在WOW64中捕获HANDLE创建

时间:2012-03-22 21:49:09

标签: windows winapi windbg handle wow64

我正在尝试解决第三方二进制文件的缓慢启动问题(无源)。它是在64位Windows 7上运行的32位应用程序。

我已经使用调试器进入应用程序,而它在启动时挂起了0%的CPU使用率,它似乎正在等待ReadFile返回。 ReadFile的第一个参数是句柄值000000f0。 windbg的!handle命令告诉我:

Handle f0
  Type            File
  Attributes      0
  GrantedAccess   0x120189:
         ReadControl,Synch
         Read/List,ReadEA,ReadAttr,WriteAttr
  HandleCount     2
  PointerCount    4
  No Object Specific Information available

我想知道它对应的设备。但是,Sysinternals Process Explorer在其进程句柄列表中不包含此句柄。

我使用windbg来跟踪对ntdll!NtCreateFile的所有调用并打印路径并返回句柄:此句柄不在其中。永远不会触发kernel32!CreateNamedPipeWkernel32!CallNamedPipeWkernel32!WaitNamedPipeW上的断点(这很奇怪,因为Process Explorer确实显示了另一个路径为\Device\NamedPipe\的句柄)。

供参考,以下是在Windows x64上跟踪NtCreateFile(akak ZwCreateFile)的命令:

bp ntdll!NtCreateFile "!ustr poi(@r8+10) ; r $t0 = @rcx ; gu ; dd @$t0 L1 ; gc"

Thanks to Skywing for pointing me in the right direction on that

类型File的HANDLE还能来自哪里?其他HANDLE创建函数是否委托给NtCreateFile实际的系统调用(我猜不是)?

2 个答案:

答案 0 :(得分:1)

看起来你只能在进行内核调试时获取文件句柄信息。所以有3种选择。

  1. 执行本地计算机内核调试,这应该不是问题,因为您只需要获取文件句柄信息并保持静态。请参阅以下内容:http://msdn.microsoft.com/en-us/library/windows/hardware/ff553382(v=vs.85).aspx
  2. 执行VM计算机的远程内核调试。从某种意义上说“更安全”,你不能炸毁你的机器。
  3. BSOD你的盒子然后看那个转储。再次对你的盒子来说不是一件好事,但过去我做过类似的事情,当我需要能够在没有机器状态变化的情况下对机器进行全面分析时。

答案 1 :(得分:1)

句柄可以继承,也可以由DuplicateHandle()创建。您可以尝试在句柄上调用GetFileInformationByHandleEx并查询FileNameInfo。