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

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

楼主#
更多 发布于:2007-01-06 20:20
  为什么取进程名偶尔会蓝屏?

附代码:
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
JenyCheng
驱动小牛
驱动小牛
  • 注册日期2005-07-26
  • 最后登录2021-01-24
  • 粉丝2
  • 关注0
  • 积分57分
  • 威望646点
  • 贡献值0点
  • 好评度119点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-01-08 16:55
你跟一下,
有的时候,
nameptr 指向的地址可能是 非法的
小黑
驱动牛犊
驱动牛犊
  • 注册日期2006-07-22
  • 最后登录2007-01-10
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-01-10 10:08
找到i以后就应该break了吧.不应该再继续找了.
游客

返回顶部