IRP_MN_WRITE_CONFIG
構成領域を持つバスのバス ドライバーは、子デバイス (子 PDO) に対するこの要求を処理する必要があります。 ファンクション ドライバーとフィルター ドライバーは、この要求を処理しません。
値
0x10
主要なコード
送信時
ドライバーまたはその他のシステム コンポーネントは、デバイスの親バスの構成領域へデータを書き込むためにこの IRP を送信します。
ドライバーまたはその他のシステム コンポーネントは、任意のスレッド コンテキストで IRQL < DISPATCH_LEVEL でこの IRP を送信します。
入力パラメーター
Parameters.ReadWriteConfig は、次の情報を含む構造体です。
ULONG WhichSpace;
PVOID Buffer;
ULONG Offset;
ULONG Length
構造体のメンバーは、異なるバス ドライバーによって異なった解釈をするできますが、通常、メンバーは次のように定義されます。
WhichSpace
構成領域を指定します。 WhichSpace に指定できる値については、「IRP_MN_READ_CONFIG」を参照してください。
Buffer
書き込まれるデータを含むバッファーへのポインター。 バッファーの形式はバス固有です。
出力パラメーター
I/O 状態ブロックで返されます。
I/O 状態ブロック
バス ドライバーは、Irp->IoStatus.Status を STATUS_SUCCESS に設定するか、STATUS_INVALID_PARAMETER_n、STATUS_NO_SUCH_DEVICE、STATUS_DEVICE_NOT_READY などの適切なエラー状態に設定します。
成功した場合、バス ドライバーは Irp->IoStatus.Information に書き込まれたバイト数を設定します。
バス ドライバーは、この要求をすぐに完了できない場合、IRP を保留中としてマークし、STATUS_PENDING を返して、後で IRP を完了することができます。
操作
バス ドライバーは、子デバイス (子 PDO) に対してこの IRP を処理します。
ファンクション ドライバーとフィルター ドライバーは、この IRP を処理せず、Irp->IoStatus に変更を加えずに、次の下位ドライバーに渡します。また、IoCompletion ルーチンを設定しません。
プラグ アンド プレイのマイナー IRP の処理に関する一般的な規則については、「プラグ アンド プレイ」を参照してください。
この IRP の送信
通常、ファンクション ドライバーは、この IRP を接続されているデバイス スタックに送信し、IRP は親バス ドライバーによって処理されます。
IRP の送信の詳細については、「IRP の処理」を参照してください。 次の手順は、特にこの IRP に適用されます。
ページ プールからバッファーを割り当て、書き込むデータでそれを初期化します。
IRP の次の I/O スタックの場所に値を設定します。MajorFunction を IRP_MJ_PNP に、MinorFunction を IRP_MN_WRITE_CONFIG に設定して、Parameters.ReadWriteConfig に適切な値を設定します。
IoStatus.Status を STATUS_NOT_SUPPORTED に初期化します。
IRP とバッファーが不要になったら、割り当てを解除します。
ドライバーは、IRQL < DISPATCH_LEVEL からこの IRP を送信する必要があります。
親バス ドライバーがこのようなインターフェイスをエクスポートする場合、ドライバーは、バス インターフェイス ルーチンを介して、DISPATCH_LEVEL でバスの構成領域にアクセスすることができます。 バス インターフェイスを取得するために、ドライバーは親バス ドライバーに IRP_MN_QUERY_INTERFACE 要求を送信します。 その後、ドライバーは、インターフェイスで返される適切なルーチンを呼び出します。
たとえば、DISPATCH_LEVEL から構成領域を書き込むために、ドライバーは、ドライバーの初期化中に IRP_MN_QUERY_INTERFACE を呼び出して、親バス ドライバーから BUS_INTERFACE_STANDARD インターフェイスを取得できます。 ドライバーは、IRQL PASSIVE_LEVEL からクエリ IRP を送信します。 その後、IRQL DISPATCH_LEVEL のコードから、ドライバーはインターフェイスで返される適切なルーチン (Interface.SetBusData ルーチンなど) を呼び出します。
要件
ヘッダー |
Wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |