RxFsdDispatch は、I/O 要求パケット (IRP) を処理する RDBSS のファイル システム ドライバー (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 を発行することもできます。
RxDriverEntry ルーチン が RDBSS を初期化するために呼び出されると、RxFsdDispatch ルーチン へのポインターが、ネットワーク ミニ リダイレクター ドライバーのドライバー ディスパッチ テーブルにコピーされます。
内部的には、RDBSS は次の 2 つのディスパッチ ベクトルを保持します。
ほとんどの操作の一般的なディスパッチ ベクター。
ファイル デバイス FCB 操作用のプライベート ディスパッチ ベクター。
IRP がIRP_MJ_CREATE要求の場合は、RxFsdDispatch 共通ディスパッチ ベクターが使用されます。 IRP がファイル オブジェクトの FCB に対する操作の場合は、RxFsdDispatch プライベート ディスパッチ ベクターを使用する必要があるかどうかを確認します。 それ以外の場合は、IRP の処理に共通のディスパッチ ベクターが使用されます。
RxFsdDispatch は、ネットワーク ミニ リダイレクター ドライバーによって実装されたコールバック ルーチンの 1 つを呼び出すほとんどの標準 IRP を処理する内部ルーチンを呼び出します。
いくつかの IRP は特別として扱われ、RDBSS によって内部的に処理されます。 たとえば、WMI が有効になっている場合、IRP_MJ_SYSTEM_CONTROLは内部的に使用されます。 IRP_MJ_CREATE_MAILSLOTまたはIRP_MJ_CREATE_NAMED_PIPE要求は特別に扱われ、拒否されます (STATUS_OBJECT_NAME_INVALID エラーが返されます)。
必要条件
| 要件 | 価値 |
|---|---|
| ターゲット プラットフォーム の | デスクトップ |
| ヘッダー | mrx.h (Mrx.h、Rxstruc.h、Struchdr.h を含む) |
| IRQL | <= APC_LEVEL |
関連項目
RxDriverEntryの