2016-01-24 61 views
-2

如果進程名稱是「System」,請不要DbgPrint。如果它是其他任何進程,那麼現在就可以使用DbgPrint了,但由於某種原因,它並不像它應該的那樣工作。strstr在內核空間中工作不正常

我已經試過: 如果(的strstr(ImageName, 「系統」)!= NULL){

如果(STRNCMP(ImageName, 「系統」,6)!= NULL){

如果(RtlCompareMemory(ImageName, 「系統」,長度)==長度){

我只希望它打印,如果它不是 「系統」

代碼,不低於工作:

int ThreadHooK(PEPROCESS Process, DWORD dw, HANDLE Handle, KPROCESSOR_MODE PreviousMode){    
    char *ImageName = (char*)(Process + 0x2e0); 
    char *System = "System"; 
    if(PreviousMode == KernelMode) { 
     if(strstr(ImageName, System) == NULL) { 
      DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[ThreadHooK]: Attempt To Close The Handle: [0x%016X] To A Process Opened By A Kernel Process : [%s]\n", Handle, (PUCHAR)Process + 0x2e0); 
     } 
    } 
    return 1; 
} 

我希望有人能解決這個問題

+0

不可能將其使用'strcmp'更有意義?如果你使用'strstr',它會查找任何匹配的子字符串。你將使用'if(strcmp(ImageName,「System」)!= 0){...}' –

+0

我修正了它:char * ImageName =(char *)((PUCHAR)Process + 0x2e0);花了我一點時間才意識到我在數學上搞砸了。 DUH ... – user3345770

+0

幻數0x2e0從何而來? –

回答

0

我需要改變這一行:

char *ImageName = (char*)(Process + 0x2e0); 

這樣:

char *ImageName = (char*)((PUCHAR)Process + 0x2e0);