IRP_MN_START_DEVICE
すべての PnP ドライバーは、この IRP を処理する必要があります。
値
0x00
主要なコード
送信時
PnP マネージャーは、デバイスにハードウェア リソース (ある場合) を割り当てた後、この IRP を送信します。 デバイスが、最近列挙された後に初めて起動されている場合や、または、リソースの再調整のために停止された後に再起動されている場合などが考えられます。
PnP マネージャーは、既に起動されているデバイスに IRP_MN_START_DEVICE を送信し、デバイスが現在使用しているリソースとは異なるリソース セットを提供することがあります。 ドライバーは、IoInvalidateDeviceState を呼び出し、PNP_RESOURCE_REQUIREMENTS_CHANGED フラグが設定された後続の IRP_MN_QUERY_PNP_DEVICE_STATE 要求に応答することによって、このアクションを開始します。 バス ドライバーでは、このメカニズムを使用して、たとえば、PCI-to-PCI ブリッジで新しい開口部を開くことができます。
PnP マネージャーは、システム スレッドのコンテキストの IRQL PASSIVE_LEVEL でこの IRP を送信します。
入力パラメーター
IO_STACK_LOCATION構造体の Parameters.StartDevice.AllocatedResources メンバーは、PnP マネージャーがデバイスに割り当てたハードウェア リソースを記述する CM_RESOURCE_LIST を指します。 この一覧には、生の形式のリソースが含まれています。 未加工のリソースを使用してデバイスをプログラミングします。
Parameters.StartDevice.AllocatedResourcesTranslated は、PnP マネージャーがデバイスに割り当てたハードウェア リソースを記述する CM_RESOURCE_LIST を指します。 この一覧には、変換された形式のリソースが含まれています。 変換されたリソースを使用して、割り込みベクターを接続し、I/O 空間をマップして、メモリをマップします。
出力パラメーター
なし
I/O 状態ブロック
ドライバーは、Irp->IoStatus.Status を STATUS_SUCCESS に設定するか、STATUS_UNSUCCESSFUL や STATUS_INSUFFICIENT_RESOURCES などの適切なエラー状態に設定します。
ドライバーは、デバイスの開始操作を実行するのに時間がかかる場合は、IRP を保留中としてマークし、STATUS_PENDING を返すことができます。
操作
この IRP は、最初にデバイスの親バス ドライバーによって処理され、次にデバイス スタック内の上位の各ドライバーによって処理される必要があります。
この IRP に応答して、ドライバーは初めてデバイスを起動するか、停止されていたデバイスを再起動します。 デバイスの起動に必要な正確な操作はデバイスによって異なりますが、デバイスの電源投入、デバイス固有の初期化の実行、割り込みの接続などが含まれます。
ドライバーは通常、デバイスを初めて起動する場合でも、IRP_MN_STOP_DEVICE 後にデバイスを再起動する場合でも、ドライバーが停止後の再起動時にデバイスの状態を復元する必要がある場合を除いて、同じ方法でこの IRP を処理できます。
Windows Vista 以降のオペレーティング システムでは、ドライバーは常に IRP_MN_START_DEVICE IRP を保留にし、後でその処理を完了することをお勧めします。 この順序で処理することにより、システムはデバイスの再起動を非同期で処理できます。 (Windows Vista より前のオペレーティング システムでは、ドライバーはディスパッチ ルーチンから STATUS_PENDING を返すことができますが、PnP マネージャーはデバイスの再起動を他の操作と重複させません。)
IRP の開始処理の詳細については、「デバイスの起動」を参照してください。
この IRP の送信
システムで使用するために予約されています。 ドライバーは、この IRP を送信することはできません。
要件
ヘッダー |
Wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |