7

サードパーティのバイナリ (ソースなし) の起動が遅い問題をトラブルシューティングしようとしています。これは、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!CreateNamedPipeWkernel32!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 に委譲しませんか (そうではないと思います)。

4

2 に答える 2

1

カーネルデバッグを実行する場合にのみ、ファイルハンドル情報を取得できるようです。したがって、3つのオプションがあります。

  1. ローカルマシンのカーネルデバッグを実行します。ファイルハンドル情報を取得するだけで、静的なままになるため、これは問題にはなりません。以下を参照してください:http://msdn.microsoft.com/en-us/library/windows/hardware/ff553382 (v = vs.85).aspx
  2. VMマシンのリモートカーネルデバッグを実行します。マシンを爆破できないという意味で「より安全」です。
  3. ボックスをBSODして、そのようにダンプを見てください。繰り返しになりますが、ボックスに対して行うのはあまり良いことではありませんが、マシンの状態を変更せずにマシンで完全な分析を実行できるようにする必要があるときに、過去に同様のことを行いました。
于 2012-03-22T22:54:44.040 に答える
1

ハンドルは継承でき、DuplicateHandle() で作成することもできます。ハンドルでGetFileInformationByHandleExを呼び出して、FileNameInfo を照会することができます。

于 2012-03-23T00:14:50.150 に答える