我正在尝试解决第三方二进制文件(无源)缓慢启动的问题。它是一个运行在64位Windows 7上的32位应用程序.
我使用了一个调试器,当它在启动时挂起0%的CPU使用率时,它会进入应用程序,并且它似乎在等待ReadFile返回。ReadFile的第一个参数是句柄值000000f0。windbg的!handle命令告诉我:
处理f0类型文件属性0 GrantedAccess 0x120189: ReadControl,同步读取/列表,ReadEA,ReadAttr,WriteAttr HandleCount 2 PointerCount 4
我想知道这是什么装置。但是Sysinternals并没有将这个句柄包含在其进程句柄列表中。
我使用windbg跟踪对ntdll!NtCreateFile的所有调用,并打印路径和返回句柄:这个句柄不在其中。不会触发kernel32!CreateNamedPipeW、kernel32!CallNamedPipeW和kernel32!WaitNamedPipeW上的断点(这很奇怪,因为Process显示了路径\Device\NamedPipe\的另一个句柄)。
作为参考,下面是在Windowsx64上跟踪NtCreateFile (akak ZwCreateFile)的命令:
bp ntdll!NtCreateFile "!ustr poi(@r8+10) ; r $t0 = @rcx ; gu ; dd @$t0 L1 ; gc"感谢天翼为我指明了正确的方向。
File类型的句柄还能从哪里来?其他句柄创建函数不是为实际的syscall委托给NtCreateFile的吗(我想不是吧)?
发布于 2012-03-22 22:54:44
看起来,只有在执行内核调试时才能获得文件句柄信息。所以有三种选择。
发布于 2012-03-23 00:14:50
句柄可以继承,也可以由DuplicateHandle()创建。您可以尝试在句柄上调用GetFileInformationByHandleEx并查询FileNameInfo。
https://stackoverflow.com/questions/9831080
复制相似问题