サードパーティのバイナリ (ソースなし) の起動が遅い問題をトラブルシューティングしようとしています。これは、64 ビット Windows 7 で実行される 32 ビット アプリケーションです。
起動時に CPU 使用率が 0% でハングしているアプリケーションにデバッガを使用して侵入しましたが、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"
その上で正しい方向に向けてくれたSkywingに感謝します。
タイプの HANDLE は他にどこFile
から来ることができますか? 他の HANDLE 作成関数NtCreateFile
は、実際の syscall に委譲しませんか (そうではないと思います)。