阅读:1365回复:6
请问各位老大,如何在DRIVER里面判断NT与2K及XP及FILEMON中查找System方法使用不了的问题
请问各位老大,如何在DRIVER里面判断NT与2K及XP呢?我需要对系统进行判断以便取不同系统的_EPROCESS 结构中的文件名偏移地址,谢谢了
另外,我是使用PsSetCreateProcessNotifuRoutine注册了CALLBACK程序,并且取得了EPROESS结果,但是使用FILEMON的SEARCH System的方法却不好使,因为找不到System ![]() |
|
沙发#
发布于:2005-06-26 10:28
Compile different driver file for different version of Windows. Then you don't need to check OS version on the fly.
|
|
板凳#
发布于:2005-06-26 22:12
可以用PsGetVersion
>>但是使用FILEMON的SEARCH System的方法却不好使,因为找不到System 你是在什么时候用这个方法的,显然要在当前进程是System,才能用这个方法 |
|
地板#
发布于:2005-06-27 13:38
我设置了一个CALLBACK,但是这段代码总是出现问题,会报告PAGE_FAULT_IN_NONPAGED_AREA这个错误。。。我怀疑是读内存,也就是for( i = 0; i < (3*PAGE_SIZE); i++ )
这行开始的时候有错误的页操作。。。但是不知道是怎么发生的,也不知道应当如何修改,请大家帮忙看看(我这么搜索是为了能兼容多个操作系统,这里不能搜索SYSTEM的,因为并非是CURRENT PROCESS),谢谢了 VOID ProcessCreateMon(IN HANDLE hPareentId,IN HANDLE PId,IN BOOLEAN bCreate) { PEPROCESS EProcess; ULONG ulCurrentProcessId; LPTSTR lpCurProc; NTSTATUS status; UCHAR filename_; int i; int j; status = PsLookupProcessByProcessId((ULONG)PId,&EProcess); if (!(NT_SUCCESS(status))) { DbgPrint(("PsLookupProcessByProcessId error\n")); return; } // if (bCreate) // { /* lpCurProc = (LPSTR)EProcess; // KeAcquireSpinLock(&ZSpin.splock,&ZSpin.irql); // ExAcquireFastMutex( &PMMutex ); lpCurProc = (LPSTR)EProcess; for( i = 0; i < (3*PAGE_SIZE); i++ ) { if( !strncmp( ".exe", (PCHAR) EProcess + i, 4 )) { break; } else if( !strncmp(".com", (PCHAR) EProcess + i, 4 )) { break; } } if (i >= (3*PAGE_SIZE)) { return; } for (j=1;j<=i;j++) { filename_ = *((PCHAR)EProcess + i -j); if (((filename_ < 'A') || (filename_ > 'z')) && (filename_ != ' ') && ((filename_ < '0') || (filename_ > '9'))) { break; } } j--; i-=j; DbgPrint(("3_c process,name %s,ppid %d,pid %d,pa %x,i = %d\n",lpCurProc+i,hPareentId,PId,EProcess,i)); if(!strncmp("uedit32.exe",lpCurProc+i,11)) { ZSpid = PId; } //KeReleaseSpinLock(&ZSpin.splock,ZSpin.irql); // ExReleaseFastMutex( &PMMutex ); } else { if (PId == ZSpid) { DbgPrint(("uedit32.exe be terminated\n")); } } } |
|
地下室#
发布于:2005-06-27 14:12
对于system,idle,就并不以.exe结尾,对于其他不以.exe,.com结尾的Process,因为ImageFileName,算上结尾的0,才16字节,对于以.exe结尾,但超过15字节长的,后面的字符串会被截掉,也不会以.exe结尾了,都不出错。
为什么不在DriverEntry搜索System,搜System的目的是找到NameOffset,这个值对于当前的os,是不变得,后面就可以直接用了,例如在你的Callback里,直接(char*)CurProc+NameOffset,就可以取出来ImageFileName了,不明白你这么做的目的是什么? |
|
5楼#
发布于:2005-06-29 09:12
学习
|
|
6楼#
发布于:2005-06-29 09:15
在安装你的驱动时候,可以用应用程序在注册表里面附加一个操作系统的版本标记
|
|