バス ドライバーでのデバイスの開始

バスドライバーは、 DispatchPnP ルーチンの中で、以下のようなプロシージャを使用して子デバイス (子 PDO) を起動します:

  1. デバイスを起動する。

    正確な手順はデバイスにより異なります。

    例えば、PCIバスドライバーは、PCIバス上の要求を有効にするために、そのマッピングレジスタをプログラムします。 PnP ISAバスドライバーは、関数ドライバーがアクセスできるようにPnP ISAカードを有効化します。

  2. IRPを完了します。

    バスドライバーの開始操作が成功した場合、ドライバーは Irp->IoStatus.Status をSTATUS_SUCCESSに設定し、 IoCompleteRequest を、IO_NO_INCREMENTの優先度ブーストを指定して呼び出します。 バスドライバーは、 DispatchPnP ルーチンよりSTATUS_SUCCESSを返します。

    バスドライバーは、開始操作中にエラーが発生した場合、IRPにエラーステータスを設定し、 IoCompleteRequest をIO_NO_INCREMENTで呼び出して、 DispatchPnP ルーチンからエラーを返します。

バスドライバーがデバイスの起動に時間を要する場合、IRP を保留としてマークし、STATUS_PENDING を返すことができます。