-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;
}
我希望有人能解決這個問題
不可能將其使用'strcmp'更有意義?如果你使用'strstr',它會查找任何匹配的子字符串。你將使用'if(strcmp(ImageName,「System」)!= 0){...}' –
我修正了它:char * ImageName =(char *)((PUCHAR)Process + 0x2e0);花了我一點時間才意識到我在數學上搞砸了。 DUH ... – user3345770
幻數0x2e0從何而來? –