IRP_MN_WRITE_CONFIG

構成領域を持つバスのバス ドライバーは、子デバイス (子 PDO) に対するこの要求を処理する必要があります。 ファンクション ドライバーとフィルター ドライバーは、この要求を処理しません。

0x10

主要なコード

IRP_MJ_PNP

送信時

ドライバーまたはその他のシステム コンポーネントは、デバイスの親バスの構成領域へデータを書き込むためにこの IRP を送信します。

ドライバーまたはその他のシステム コンポーネントは、任意のスレッド コンテキストで IRQL < DISPATCH_LEVEL でこの IRP を送信します。

入力パラメーター

Parameters.ReadWriteConfig は、次の情報を含む構造体です。

ULONG WhichSpace;
PVOID Buffer;
ULONG Offset;
ULONG Length

構造体のメンバーは、異なるバス ドライバーによって異なった解釈をするできますが、通常、メンバーは次のように定義されます。

WhichSpace
構成領域を指定します。 WhichSpace に指定できる値については、「IRP_MN_READ_CONFIG」を参照してください。

Buffer
書き込まれるデータを含むバッファーへのポインター。 バッファーの形式はバス固有です。

Offset
構成領域へのオフセットを指定します。

Length
書き込むバイト数を指定します。

出力パラメーター

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 スタックの場所に値を設定します。MajorFunctionIRP_MJ_PNP に、MinorFunctionIRP_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 を含む)

関連項目

IRP_MN_QUERY_INTERFACE

IRP_MN_READ_CONFIG