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

麻烦问下大家,在98 VXD中如何根据32位进程句柄得到进程名

楼主#
更多 发布于:2005-07-07 01:14
我使用ONCREATEPROCESS可以得到32位的进程句柄(是句炳么。。。他写的是ProcessToken.......)(我是使用DS),我想根据句柄获得进程名,请问我该怎么做呀,谢谢大家(不一定非要DS的方法,其他直接使用DDK的标准函数也可以的,毕竟DS其实最后还是使用DDK嘛,HOHO,谢谢大家了)

最新喜欢:

znsoftznsoft
civil_war
驱动牛犊
驱动牛犊
  • 注册日期2004-02-14
  • 最后登录2006-02-06
  • 粉丝0
  • 关注0
  • 积分108分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-07-13 14:47
只能自己顶了呀
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2005-07-13 16:10
我以前回答过这个问题,你搜一下以前的帖子
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-07-14 09:43
VWIN32_GetCurrentProcessHandle返回的进程句柄,实际上是一个指向PEB结构的指针,
通过这个指针可以获取进程路径,
但是在OnCreateProcess中只能获取进程ID,所以还需要通过进程ID来获取进程句柄,
具体的方法就是(进程ID ^ 进程句柄 = 常数),这个常数在系统起来后就不会变化,但是每次系统启动后这个数都不是相同的(有点拗口)

PS:微软被人骂,不是没有道理的,呵呵,不知在windows系统中,人为地设置了多少障碍


所以解决的方法就是:

在win32下获取当前进程的进程id,然后通过device io把这个进程id传给vxd,在vxd中获取当前进程句柄,
然后把这个两个数异或,得到一个数g_dwObfuscator,以后可以通过这个g_dwObfuscator,在OnCreateProcess中
通过进程id获取进程句柄,然后再获取进程路径


// pid: 进程id
// ppath: 缓冲区,保存进程路径
BOOL GetProcessName(DWORD pid, CHAR *ppath)
{
       DWORD dwAddress;
      
       if (g_dwObfuscator != 0)
       {
              dwAddress = pid ^ g_dwObfuscator;
              dwAddress += 0x40;
              if ((dwAddress = *(DWORD *)dwAddress) != 0) // PEB->ProcessParameters
              {
                     dwAddress += 0x8;
                     if ((dwAddress = *(DWORD *)dwAddress) != 0) // PEB->ProcessParameters->ImageFile
                     {
                            sprintf(ppath, (CHAR *) dwAddress);
                            return TRUE;
                     }
              }
       }
      
       sprintf(ppath, "???");
       return FALSE;
}
civil_war
驱动牛犊
驱动牛犊
  • 注册日期2004-02-14
  • 最后登录2006-02-06
  • 粉丝0
  • 关注0
  • 积分108分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-07-14 16:48
倒塌。。。楼上的老大们,问题是现在不允许任何RING 3程序与之交互。。。。只能自己通过一个PROCESS TOKEN来得到进程名。。。。。。
civil_war
驱动牛犊
驱动牛犊
  • 注册日期2004-02-14
  • 最后登录2006-02-06
  • 粉丝0
  • 关注0
  • 积分108分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-07-14 17:59
我查看了一下,ON CREATE PROCESS得到的的确是ID。。。。。我记得ID应当是全局PDB的一个索引???能否用其他方式获得PDB呢。。。这样是不是就好做了。。。顺便提一下,我发现在我用做开发的机器上的常数是放在固定位置的。。。30:1e66c,不知道是每台机器都一样还是不一样。。。。
游客

返回顶部