阅读:1450回复:2
为什么取进程名偶尔会蓝屏?
附代码:
void GetProcessNameOffset() { int i; PEPROCESS curproc; curproc = PsGetCurrentProcess(); for( i = 0; i < 3*PAGE_SIZE; i++ ) { if( !strncmp( "system", (PCHAR) curproc + i, strlen("System") )|| !strncmp( "System", (PCHAR) curproc + i, strlen("System") )|| !strncmp( "SYSTEM", (PCHAR) curproc + i, strlen("System") )) { g_ProcessNameOffset = i; } } } //获得程序名字 int GetProcessName( PCHAR theName ) { PEPROCESS curproc; char *nameptr; ULONG i; KIRQL oldirql; if( g_ProcessNameOffset ) { curproc = PsGetCurrentProcess(); nameptr = (PCHAR) curproc + g_ProcessNameOffset; strncpy( theName, nameptr, 16);//***// theName[16] = 0; /* NULL at end */ return TRUE; } return FALSE; } 在HookZwQueryDirectoryFile中调用GetProcessName怎么会出现 PAGE_FAULT_IN_NONPAGED_AREA (50)蓝屏。出错位置为这一行//***// 这个驱动是开机自动加载的,g_ProcessNameOffset已经在DriverEntry中得到。 求大侠帮忙!3X |
|
沙发#
发布于:2007-01-07 13:19
会不会此时某个地址为空?没有判断?
|
|
|
板凳#
发布于:2007-01-08 13:26
strncpy( theName, nameptr, 16);
这句出错有两种可能 1.theName提供的缓冲区不够16字节 2.nameptr所指向的字符串长度小于16字节,且后续内存不可读。 另外: !strncmp( "system", (PCHAR) curproc + i, strlen("System") )|| !strncmp( "System", (PCHAR) curproc + i, strlen("System") )|| !strncmp( "SYSTEM", (PCHAR) curproc + i, strlen("System") ) 这三句为什么不用 stricmp ?一句就足够了。 |
|
|