Witam
Od jakiegoś czasu staram się napisać program do konsoli, ale nie tej w pracującym windowsie. Tylko program działający np. jak chkdsk.exe który będzie działał w konsoli uruchamianej z CD-windows XP / 2k
Pliki exe ze starego kompilatora Turbo C++ nie mają dopisku „This program must be run under Win32” ale są najprawdopodobniej pod dosa i też niecącą chodzić (a XP NIE MA dosa). Czy może ktoś już to przerobił i wie czym kompilować takie pliki?
Chodzi ci o tzw Native Applications? To co uruchamia sie jeszcze przed startem systemu?
Chyba tak po ekranie windowsa(na czarnym tle) mozna uruchomic rozne programy PartitionMagic; chkdsk itp. O to mi chodzi, windows jest włączony ale nie całkiem.
No to jak ustawić kompilator Builder C++ 6 lub skąd ściągnąć kompilator do C++ żeby pisać Native Applications??
Nie wiem czy Borland C++ w ogóle da się ustawić dla Native Application. Można za to ściągnąć choćby darmowe Visual C++ Toolkit. Jednak do kompilacji Native Application wymagane jest dostarczenie bibliotek z (dość kosztownego) Microsoft Windows Driver Development Kit.
Więcej szczegółów: Microsoft TechNet
Tutaj jest do dosc przystepnie opisane: http://vmsone.com/~decuslib/vmssig/vmslt98a/nt/native.htm
DDK jest darmowe i można je sobie ściągnąć bez żadnego problemu.
http://www.microsoft.com/whdc/devtools/ddk/default.mspx
othellodead link.
Pierwsza lektura
Moim pierwszym native było takie coś:
main.c
#include "ntddk.h"
NTSYSAPI NTSTATUS NTAPI NtDisplayString(UNICODE_STRING* String );
NTSYSAPI NTSTATUS NTAPI NtCreateEvent(HANDLE* EventHandle,ACCESS_MASK DesiredAccess,OBJECT_ATTRIBUTES* ObjectAttributes,EVENT_TYPE EventType,BOOLEAN InitialState);
NTSYSAPI NTSTATUS NTAPI NtWaitForSingleObject(HANDLE ObjectHandle,BOOLEAN Alertable,LARGE_INTEGER* TimeOut);
NTSYSAPI NTSTATUS NTAPI NtClose(HANDLE ObjectHandle);
NTSYSAPI NTSTATUS NTAPI NtTerminateProcess(HANDLE ProcessHandle,NTSTATUS ExitStatus);
void print(__wchar_t *msg)
{
UNICODE_STRING umsg;
RtlInitUnicodeString (&umsg, msg);
NtDisplayString(&umsg);
}
void sleep(long ms)
{
LARGE_INTEGER lTime;
HANDLE hE;
NtCreateEvent(&hE, EVENT_ALL_ACCESS, NULL, 0, 0);
lTime.QuadPart = ms * -10000;
NtWaitForSingleObject(hE, 0, &lTime);
NtClose(hE);
}
void NtProcessStartup( PVOID arg)
{
print(L"Hello and welcome to program running in Native App mode\n\n");
print(L"This program sucks so much.... I'm now gonna sleep for 5 seconds\n");
sleep(5000);
print(L"OK... well that's a sleep() function written... now we need to do\n");
print(L"beeping, waiting for a keypress, mousepress etc... etc... just to\n");
print(L"get a few of the basics done so we can have fun.\n\n");
print(L"OK... well wait 10 seconds to boot into Windows....");
sleep(10000);
print(L"Here comes Windows.....");
NtTerminateProcess( NtCurrentProcess(), 0 );
}
plik sources. (bez rozszerzenia! )
TARGETNAME=main
TARGETPATH=obj
TARGETTYPE=PROGRAM
INCLUDES=C:\WINDDK\3790.1830\inc\ddk\wxp
SOURCES=main.c
makefile skopiuj sobie z dowolnego folderu ddk z samplami.
Teraz najbardziej pokraczny krok: kompilacja. Uruchamiasz konsolę z menu start->programy->ddk->wersja->Build Environments->Windows * Free Build Environment.
Używając polecenia cd zmieniasz folder na ten z plikiem main.c i wpisujesz build.
Nigdy nie lubiałem tego ostatatniego kroku, dlatego napisałem sobie shell extension dla folderów, które dodaje "Build" do menu podręcznego jeśli wypatrzy plik sources.
Ok. super ściągnąłem odpaliłem skompilowałem i nawet działa… tyko czy zna może ktoś link do jakiejś strony (najlepiej po polsku) z opisem komend itp. albo jakieś przykładowymi programami.