Uruchamianie programu przed logowaniem - jak?

26filip

Użytkownik
Dołączył
Marzec 30, 2010
Posty
3
Niektóre programy (np. partycjonujące) jak muszą przeprowadzić operację, która nie może odbyć się podczas działania komputera, uruchamiają ten proces przed ukazaniem się okna logowania przy starcie systemu.
W jaki sposób mogę to zrobić, by mój program tak się uruchomił?
 

swap.context

Użytkownik
Dołączył
Październik 10, 2009
Posty
9
Programy, które uruchamiane są przed zdarzeniem logowania nazywane są macierzystymi - native. Ich ograniczeniem jest fakt, że mogą one korzystać jedynie z funkcji eksportowanych przez bibliotekę ntdll.dll.

Inside Native Applications

swap
 

26filip

Użytkownik
Dołączył
Marzec 30, 2010
Posty
3
Dzięki. Czyli kopiowanie, usuwanie plików obsłuży. A czy wtedy można podmienić plik explorer.exe?
 

26filip

Użytkownik
Dołączył
Marzec 30, 2010
Posty
3
A mógłbyś opisać co trzeba gdzieś dodać by zadziałało?
Bo jakoś mi nie działa - może źle zrozumiałem ten opis ze strony...
 

swap.context

Użytkownik
Dołączył
Październik 10, 2009
Posty
9
Struktura kodu aplikacji macierzystej powinna wyglądać następująco:

Kod:
VOID NtProcessStartup(STARTUP_ARGUMENT *Argument)
{
    RtlInitUnicodeString(&FileName, L"\\??\\C:\\Windows\\explorer.exe");
 
    ObjectAttributes.Length = sizeof(OBJECT_ATTRIBUTES);
    ObjectAttributes.RootDirectory = NULL;
    ObjectAttributes.ObjectName = &FileName;
    ObjectAttributes.Attributes = OBJ_CASE_INSENSITIVE;
    ObjectAttributes.SecurityDescriptor = NULL;
    ObjectAttributes.SecurityQualityOfService = NULL;
 
    NtStatus = NtOpenFile(...);
 
    NtStatus = NtSetInformationFile(...);
 
    NtStatus = NtSetInformationFile(...);
}

Zamianę pliku (dlaczego akurat explorer.exe?) można rozwiązać na wiele sposobów, jednym z nich może być podmiana sztywnych dowiązań (symbolic links).

Źródło najlepiej skompilować pod DDK tworząc odpowiedni plik source.

swap
 
Do góry Bottom