次の方法で共有


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 を作成するための無効な要求が行われました (IrpMajorFunction メンバーが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

こちらもご覧ください

RxDriverEntry