RxFsdDispatch 関数 (mrx.h)
RxFsdDispatch は、RDBSS が I/O 要求パケット (IRP) を処理するためのファイル システム ドライバー (FSD) ディスパッチを実装します。 このルーチンへのポインターは、RDBSS の初期化時に RxDriverEntry ルーチンによって、ネットワーク ミニ リダイレクター ドライバーのデバイス ドライバー ディスパッチ テーブル上にコピーされます。
構文
NTSTATUS RxFsdDispatch(
[in] IN PRDBSS_DEVICE_OBJECT RxDeviceObject,
[in] IN PIRP Irp
);
パラメーター
[in] RxDeviceObject
このネットワーク ミニ リダイレクターの RDBSS デバイス オブジェクトへのポインター。
[in] Irp
処理される I/O 要求パケットへのポインター。
戻り値
RxFsdDispatch は、次のいずれかの値を返します。
リターン コード | 説明 |
---|---|
STATUS_INVALID_DEVICE_REQUEST | 無効なデバイス オブジェクトに対して要求が行われました。 たとえば、ファイル システム オブジェクトが RxDeviceObject パラメーターとして渡された場合、このエラーが返されます。 この状態値は、エラーを示します。 |
STATUS_OBJECT_NAME_INVALID | 名前付きパイプまたは mailslot を作成するための無効な要求が行われました (Irp の MajorFunction メンバーがIRP_MJ_CREATE_MAILSLOTまたはIRP_MJ_CREATE_NAMED_PIPE)。 この状態値は、エラーを示します。 |
STATUS_PENDING | 非同期要求が行われ、要求の状態が保留中です。 |
STATUS_SUCCESS | RxFsdDispatch ルーチン呼び出しが成功しました。 |
注釈
RxFsdDispatch は、I/O 要求パケット (IRP) を処理するために RDBSS によって呼び出されます。 通常、これらの IRP は、ファイルに対する操作を要求するユーザー モード アプリケーションに応答して RDBSS によって受信されます。 また、別のカーネル ドライバーがこのような IRP を発行することもできます。
RxFsdDispatch ルーチンへのポインターは、RDBSS を初期化するために RxDriverEntry ルーチンが呼び出されたときに、ネットワーク ミニ リダイレクター ドライバーのドライバー ディスパッチ テーブル上にコピーされます。
内部的には、RDBSS は次の 2 つのディスパッチ ベクトルを保持します。
ほとんどの操作の一般的なディスパッチ ベクター。
ファイル デバイス FCB 操作用のプライベート ディスパッチ ベクター。
IRP がIRP_MJ_CREATE要求である場合、 RxFsdDispatch は共通のディスパッチ ベクターを使用します。 IRP がファイル オブジェクトの FCB に対する操作の場合、プライベート ディスパッチ ベクターを使用する必要がある場合、RxFsdDispatch はチェックします。 それ以外の場合は、一般的なディスパッチ ベクターを使用して IRP を処理します。
RxFsdDispatch は内部ルーチンを呼び出して標準 IRP を処理します。そのほとんどにより、ネットワーク ミニ リダイレクター ドライバーによって実装されたコールバック ルーチンの 1 つが呼び出されます。
いくつかの IRP は特別なものとして扱われ、RDBSS によって内部的に処理されます。 たとえば、WMI が有効になっている場合、IRP_MJ_SYSTEM_CONTROLは内部的に使用されます。 IRP_MJ_CREATE_MAILSLOTまたはIRP_MJ_CREATE_NAMED_PIPE要求は特別に扱われ、拒否されます (STATUS_OBJECT_NAME_INVALID エラーが返されます)。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | mrx.h (Mrx.h、Rxstruc.h、Struchdr.h を含む) |
IRQL | <= APC_LEVEL |