我正在尝试解决第三方二进制文件(无源)启动缓慢的问题。它是在 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!CreateNamedPipeW
,kernel32!CallNamedPipeW
和上的断点kernel32!WaitNamedPipeW
永远不会被触发(这很奇怪,因为 Process Explorer 确实显示了另一个带有 path 的句柄\Device\NamedPipe\
)。
作为参考,这里是在 Windows x64 上跟踪NtCreateFile
(akak ) 的命令:ZwCreateFile
bp ntdll!NtCreateFile "!ustr poi(@r8+10) ; r $t0 = @rcx ; gu ; dd @$t0 L1 ; gc"
类型的 HANDLE 还能File
从哪里来?其他 HANDLE 创建函数不委托给NtCreateFile
实际的系统调用(我猜不是)吗?