2013-12-10 67 views
1

我正在開發一個監視進程創建的驅動程序,我寫了一個簡單的代碼來完成它。我使用PsSetCreateProcessNotifyRoutineEx。但是這不起作用!我正好下面的Microsoft幫助on this link進程監視CreateProcessNotifyRoutineEx

#include <ntddk.h> 

NTSTATUS DriverEntry(
    IN PDRIVER_OBJECT DriverObject, 
    IN PUNICODE_STRING RegistryPath 
    ); 

VOID UnloadRoutine(
    IN PDRIVER_OBJECT DriverObject 
    ); 

VOID CreateProcessNotifyEx(
    __inout PEPROCESS Process, 
    __in  HANDLE ProcessId, 
    __in_opt PPS_CREATE_NOTIFY_INFO CreateInfo 
); 



VOID CreateProcessNotifyEx(
    __inout PEPROCESS Process, 
    __in  HANDLE ProcessId, 
    __in_opt PPS_CREATE_NOTIFY_INFO CreateInfo 

) 
{ 
    if (CreateInfo) 
    { 
     if(CreateInfo->FileOpenNameAvailable==TRUE) 
     { 
      DbgPrintEx( 
       DPFLTR_IHVDRIVER_ID, 
       DPFLTR_INFO_LEVEL, 
       "PID : 0x%X (%d) ImageName :%wZ CmdLine : %wZ \n", 
       ProcessId,ProcessId, 
       CreateInfo->ImageFileName, 
       CreateInfo->CommandLine 
       ); 
     } 
    } 

} 


VOID UnloadRoutine(IN PDRIVER_OBJECT DriverObject) 
{ 
    PsSetCreateProcessNotifyRoutineEx((PCREATE_PROCESS_NOTIFY_ROUTINE_EX) CreateProcessNotifyEx, TRUE); 
    DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL,"Unloaded\n"); 
} 

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) 
{ 

    NTSTATUS status = PsSetCreateProcessNotifyRoutineEx((PCREATE_PROCESS_NOTIFY_ROUTINE_EX)CreateProcessNotifyEx, FALSE); 
    if(!NT_SUCCESS(status)) 
    { 
    DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL,"Faild to PsSetCreateProcessNotifyRoutineEx .status : 0x%X \n",status); 
    } 
    DriverObject->DriverUnload = UnloadRoutine; 
    DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL,"Load\n"); 

    return STATUS_SUCCESS; 

} 

該驅動系統負載和正常運行,但是當運行一個程序(新工藝),不會發生任何事情,不能註冊PsSetCreateProcessNotifyRoutineEx我得到了0xC0000022錯誤(拒絕訪問) 。 enter image description here

有什麼想法嗎?

回答

1

總是我一定要找到我的答案;)

爲了傳遞這個問題只需要這個值LINKER_FLAGS=/integritycheck添加到源文件!

前:

TARGETNAME=ProcView 
TARGETPATH=. 
TARGETTYPE=DRIVER 

SOURCES=ProcView.c 

現在:

TARGETNAME=ProcView 
TARGETPATH=. 
TARGETTYPE=DRIVER 
LINKER_FLAGS=/integritycheck 
SOURCES=ProcView.c 

enter image description here