nettiger
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分90分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:1450回复:2

为什么取进程名偶尔会蓝屏?

楼主#
更多 发布于:2007-01-06 20:15
  附代码:
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
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2007-01-07 13:19
会不会此时某个地址为空?没有判断?
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
NewBaby.Natas
驱动牛犊
驱动牛犊
  • 注册日期2007-01-05
  • 最后登录2007-01-30
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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 ?一句就足够了。
流氓不可怕,就怕流氓有文化。
游客

返回顶部