アプリケーション要求が完了しない理由の確認

アプリケーション要求が完了しない理由を確認するには、次の手順を実行します。

  1. !wudfext.umirps UMDF デバッガー拡張機能を使用して、ホスト プロセスの未処理のユーザー モード I/O 要求パケット (IRP) をすべて表示します。各ユーザー モード IRP の情報には、ユーザー モード IRP が作成された元のカーネル モード IRP が含まれています。

    アプリケーションによって送信されたカーネル モード IRP に対応するユーザー モード IRP を特定します。

  2. !wudfext.umirp UMDF デバッガー拡張機能を使用して、特定のユーザー モード IRP に関する情報を取得します。

    !wudfext.umirp <irp_addr>

    ユーザー モード IRP の情報には、スタックの場所が含まれています。スタックの場所がわかれば、IRP が処理されている場所を特定できます。スタックの場所が 0 の場合は、スタックが UMDF の下に存在する (つまり、カーネル モード スタック、または Microsoft Win32 や Winsock などのその他のサブシステムである) ことを示します。

  3. IRP がドライバーのレイヤー (ドライバーが IRP を処理しているレイヤー) に存在する場合は、次の手順を実行します。
    1. ドライバーのレイヤーで設定されている I/O キューを表示します。!wudfext.wudfdevicequeues UMDF デバッガー拡張機能を使用すると、ドライバーのレイヤーで設定されているすべての I/O キューを表示できます。!wudfext.wudfqueue UMDF デバッガー拡張機能を使用して特定のキューに関する情報を取得することもできます。

      !wudfext.wudfqueue <IWDFIoQueue*>

    2. 未処理の要求が複数ある場合は、!wudfext.wudfrequest UMDF デバッガー拡張機能を使用して、基になるユーザー モード IRP を含む要求に関する情報を取得できます。ユーザー モード IRP の情報から、目的の要求を特定できます。
    3. 要求を所有しているのがキューであるかドライバーであるかを確認します。この情報は、!wudfext.wudfqueue の出力の一部として表示されます。要求を所有しているのがキューであるかドライバーであるかに応じて、次のいずれかの検証を実行します。
      • キューが要求を所有している場合は、キューの状態をチェックして、要求がキューからドライバーに送信されていない理由を確認します。
      • ドライバーが要求を所有している場合は、ホスト プロセスのスレッドをチェックして、要求の処理中にスレッドが動作しない状態またはデッドロック状態になったかどうかを確認します。
  4. IRP が別の UMDF ドライバー レイヤーに存在する場合は、そのレイヤーに対して上記の手順を繰り返します。!wudfext.umdevstack UMDF デバッガー拡張機能を使用すると、すべてのスタック レイヤーに関する情報が表示されることに留意してください。

  5. IRP が UMDF スタックに存在しない場合は (たとえば、スタックの場所 0 が、現在 IRP が処理されている場所である場合など)、対応するカーネル モード IRP が完了していない理由を確認します。

 

 

コミュニティの追加

追加
表示:
© 2015 Microsoft