記憶域クラス ドライバーでの PnP 開始の処理
記憶域クラス ドライバーは、PnP マネージャーが開始要求でクラス ドライバーの DispatchPnP ルーチンを呼び出すときに、デバイス固有の初期化を実行します (IRP_MN_START_DEVICE でIRP_MJ_PNP)。 記憶域クラス ドライバーの DispatchPnP ルーチンは、内部 StartDevice ルーチンを呼び出すか、同じ機能をインラインで実装します。 FDO に送信された開始要求は、最初にスタック内の最下位ドライバーによって処理される必要があるため、記憶域クラス ドライバーの DispatchPnP ルーチンは、StartDevice を呼び出す前に、IoCallDriver を使用して次の下位ドライバーに要求を転送します。 要求が PDO に送信された場合、ドライバーは要求を処理する前に転送する必要はありません。
記憶域クラス ドライバーの内部 StartDevice ルーチンは、デバイスの I/O 要求を管理するドライバーによって決定されたデータを使用して、FDO のデバイス拡張機能を設定します。 詳細については、「記憶域クラス ドライバーのデバイス拡張機能の設定」を参照してください。
StartDevice ルーチンは、ドライバーがその AddDevice ルーチンに登録したデバイス インターフェイスを有効にする必要があります。 (「デバイス インターフェイス クラス」。)また、デバイス オブジェクトのシンボリック リンクを作成することもできます。
下位デバイスの起動が完了すると、ドライバーは、ほとんどの目的でデバイスが D0 電源状態 (完全にオンおよび動作中) であることを想定できます。 デバイスの電源が完全にオンでない場合、ポート ドライバーはデバイスの準備ができるまで要求をキューに入れます。 ただし、ドライバーの StartDevice ルーチンが、突入電流を必要とする操作 (たとえば、ディスク ドライブを起動する) を実行する必要がある場合、ドライバーは、操作を実行する前に、次の下位ドライバーに D0 電源要求を送信する必要があります。
FILE_DEVICE_DISKまたはFILE_DEVICE_MASS_STORAGEの種類のデバイスのドライバーは、アイドル状態の検出に登録し、PoRegisterDeviceforIdleDetection 呼び出しで -1 の保存とパフォーマンスのタイムアウト値を指定することで、デバイス クラスの標準的な電源ポリシー タイムアウトを使用できます。
記憶域クラス ドライバーの DispatchPnP ルーチンの詳細については、「記憶域周辺機器への PnP 要求の処理」を参照してください。 PnP 開始要求の処理の詳細については、「デバイスの起動」を参照してください。