RxFsdDispatch 関数 (mrx.h)

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 (IrpMajorFunction メンバーが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