Задрасте всем) Есть проблема с PsSetCreateProcessNotifyRoutineEx(). Надо перехватывать старт процессов и запрещать им стартовать. Код (Text): #include <ntddk.h> /*typedef struct _PS_CREATE_NOTIFY_INFO { SIZE_T Size; union { ULONG Flags; struct { ULONG FileOpenNameAvailable :1; ULONG Reserved :31; }; }; HANDLE ParentProcessId; CLIENT_ID CreatingThreadId; struct _FILE_OBJECT *FileObject; PCUNICODE_STRING ImageFileName; PCUNICODE_STRING CommandLine; NTSTATUS CreationStatus; } PS_CREATE_NOTIFY_INFO, *PPS_CREATE_NOTIFY_INFO;*/ CreateProcessNotifyRoutine( __inout PEPROCESS Process, __in HANDLE ProcessId, __in_opt PPS_CREATE_NOTIFY_INFO CreateInfo ) { //DbgPrint("%d",ProcessId); CreateInfo->CreationStatus = STATUS_ACCESS_DENIED; } VOID UnloadRoutine(IN PDRIVER_OBJECT DriverObject) { PsSetCreateProcessNotifyRoutineEx( (PCREATE_PROCESS_NOTIFY_ROUTINE_EX) CreateProcessNotifyRoutine, TRUE); DbgPrint("Unload!\n"); } DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { PsSetCreateProcessNotifyRoutineEx( (PCREATE_PROCESS_NOTIFY_ROUTINE_EX) CreateProcessNotifyRoutine, FALSE); DriverObject->DriverUnload = UnloadRoutine; DbgPrint("Driver loaded"); return STATUS_SUCCESS; } функция регистрации калбека возвращает STATUS_ACCESS_DENIED, не пойму почему
Так подружитесь: вся актуальная техническая документация - именно на английском языке, и не имея возможности читать её - вы не сможете написать хоть сколь-нибудь серьёзную программу.
Упс! Узай эту функцию "PsSetCreateProcessNotifyRoutine" она и более рания(С 2000 ) и менее проблематичная ...
Cr4sh Т.е. если драйвер не подписан, то эту функцию ему использовать не позволено? или я что-то не правильно тоже понял про флаг в PE хидере IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY?
RET Все вы правильно поняли ... Еще есть такая функция ObRegisterCallbacks STATUS_ACCESS_DENIED The callback routines do not reside in a signed kernel binary image. Сдесь четко говорится о подписи ... Как вариант можно пропатчить LDR_DATA_TABLE_ENTRY ну и MmVerifyCallbackFunction....