civil_war
驱动牛犊
驱动牛犊
  • 注册日期2004-02-14
  • 最后登录2006-02-06
  • 粉丝0
  • 关注0
  • 积分108分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1366回复:6

请问各位老大,如何在DRIVER里面判断NT与2K及XP及FILEMON中查找System方法使用不了的问题

楼主#
更多 发布于:2005-06-26 03:59
请问各位老大,如何在DRIVER里面判断NT与2K及XP呢?我需要对系统进行判断以便取不同系统的_EPROCESS 结构中的文件名偏移地址,谢谢了
另外,我是使用PsSetCreateProcessNotifuRoutine注册了CALLBACK程序,并且取得了EPROESS结果,但是使用FILEMON的SEARCH System的方法却不好使,因为找不到System ,但是好象在用psGetCurrentProcess得到当前进程的时候却可以搜索System,真是奇怪,大家帮帮忙吧,有时间请大家喝酒
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
沙发#
发布于: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.
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2005-06-26 22:12
可以用PsGetVersion
>>但是使用FILEMON的SEARCH System的方法却不好使,因为找不到System
你是在什么时候用这个方法的,显然要在当前进程是System,才能用这个方法
civil_war
驱动牛犊
驱动牛犊
  • 注册日期2004-02-14
  • 最后登录2006-02-06
  • 粉丝0
  • 关注0
  • 积分108分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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"));
           }
     }

}
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于: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了,不明白你这么做的目的是什么?
yuanyuan
驱动大牛
驱动大牛
  • 注册日期2003-01-15
  • 最后登录2010-08-04
  • 粉丝0
  • 关注0
  • 积分1025分
  • 威望300点
  • 贡献值0点
  • 好评度232点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-06-29 09:12
学习
yuanyuan
驱动大牛
驱动大牛
  • 注册日期2003-01-15
  • 最后登录2010-08-04
  • 粉丝0
  • 关注0
  • 积分1025分
  • 威望300点
  • 贡献值0点
  • 好评度232点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-06-29 09:15
在安装你的驱动时候,可以用应用程序在注册表里面附加一个操作系统的版本标记
游客

返回顶部