次の方法で共有


RxRegisterMinirdr 関数 (mrx.h)

RxRegisterMinirdr は、RDBSS にドライバーを登録するネットワーク ミニ リダイレクター ドライバーによって呼び出されます。これにより、登録情報が内部登録テーブルに追加されます。 RDBSS では、ネットワーク ミニ リダイレクター用のデバイス オブジェクトもビルドされます。

構文

NTSTATUS RxRegisterMinirdr(
  [out]     OUT PRDBSS_DEVICE_OBJECT *DeviceObject,
  [in, out] IN OUT PDRIVER_OBJECT    DriverObject,
  [in]      IN PMINIRDR_DISPATCH     MrdrDispatch,
  [in]      IN ULONG                 Controls,
  [in]      IN PUNICODE_STRING       DeviceName,
  [in]      IN ULONG                 DeviceExtensionSize,
  [in]      IN DEVICE_TYPE           DeviceType,
  [in]      IN ULONG                 DeviceCharacteristics
);

パラメーター

[out] DeviceObject

作成されたデバイス オブジェクトが格納される場所へのポインター。

[in, out] DriverObject

ネットワーク ミニ リダイレクター ドライバーのドライバー オブジェクトへのポインター。 各ドライバーは、 DriverEntry ルーチンへのパラメーターで、ドライバー オブジェクトへのポインターを受け取ります。 このドライバー オブジェクトは、ネットワーク ミニ リダイレクター ドライバーのデバイス オブジェクトを作成するために使用されます。

[in] MrdrDispatch

ネットワーク ミニ リダイレクターのディスパッチ テーブルへのポインター。 このディスパッチ テーブルには、ネットワーク ミニ リダイレクターの構成情報と、ネットワーク ミニ リダイレクター カーネル ドライバーによって実装されたコールバック ルーチンへのポインターのテーブルが含まれています。 RDBSS は、このコールバック ルーチンの一覧を使用して、ネットワーク ミニ リダイレクター ドライバーを呼び出します。

[in] Controls

ネットワーク ミニ リダイレクター ドライバーの機能と、RDBSS でネットワーク ミニ リダイレクター ドライバーの初期化と名前テーブル キャッシュを処理する方法を決定するオプションのセット。 これらのオプションには、次のビットの任意の組み合わせを含めることができます。

RX_REGISTERMINI_FLAG_DONT_PROVIDE_UNCS

このフラグを設定すると、ネットワーク ミニ リダイレクターが UNC 名をサポートしていないことを示します。

RX_REGISTERMINI_FLAG_DONT_PROVIDE_MAILSLOTS

このフラグを設定すると、ネットワーク ミニ リダイレクターが mailslot をサポートしていないことを示します。

RX_REGISTERMINI_FLAG_DONT_INIT_DRIVER_DISPATCH

このフラグを設定すると、ネットワーク ミニ リダイレクターが RDBSS 内部ルーチンを指すようにミニ リダイレクター ドライバーのドライバー ディスパッチ エントリ ポイントを初期化する RDBSS を望まないことを示します。 このオプションは、通常とは異なる状況でのみ使用されます。 通常、RDBSS は、RDBSS 内部のルーチンを指すように、ドライバー ディスパッチ エントリ ポイントと、ネットワーク ミニ リダイレクター ドライバー オブジェクト内の高速 I/O ディスパッチを設定します。

RX_REGISTERMINI_FLAG_DONT_INIT_PREFIX_N_SCAVENGER

このフラグを設定すると、ネットワーク ミニ リダイレクターは、RDBSS がこの名前テーブルを清掃するための内部ネットワーク名テーブルとスカベンジャー データ構造を初期化することを望まないことを示します。 このオプションは、ネットワーク共有名自体のキャッシュを処理し、名前のキャッシュと清掃に RDBSS 機能を使用しないネットワーク ミニ リダイレクターに設定されます。

[in] DeviceName

デバイス オブジェクトの名前を指定する 0 で終わる Unicode 文字列を含むバッファーへのポインター。 文字列は完全なパス名である必要があります。 このパラメーターは、RDBSS によって DeviceName として IoCreateDevice ルーチンに渡されます。

[in] DeviceExtensionSize

デバイス オブジェクトのデバイス拡張機能に割り当てられるバイト数のミニ リダイレクター ドライバーによって指定されたサイズ。 デバイス拡張機能の内部構造はドライバー定義です。 このパラメーターは、RDBSS によって使用されるデバイス拡張機能のサイズに追加され、 DeviceExtensionSize パラメーターとして RDBSS によって IoCreateDevice ルーチンに渡されます。

[in] DeviceType

デバイス オブジェクトの作成時に使用されるデバイスの種類。 これは、デバイスの種類を示すシステム定義のFILE_DEVICE_XXX定数の 1 つ、または新しい種類のデバイスのベンダー定義値を指定します。 通常、この値は、ネットワーク ミニ リダイレクター ドライバーに対してFILE_DEVICE_NETWORK_FILE_SYSTEMされます。 このパラメーターは、 RDBSS によって DeviceType として IoCreateDevice ルーチンに渡されます。

[in] DeviceCharacteristics

デバイス オブジェクトの作成時に使用されるデバイス特性。 これは、ドライバーのデバイスに関する追加情報を提供する 1 つ以上のシステム定義定数を組み合わせて指定します。 この値には、ネットワーク ミニ リダイレクター ドライバーのFILE_REMOTE_DEVICEを含める必要がありますが、これは、FILE_DEVICE_SECURE_OPENなどの他の特性と組み合わせることができます。 このパラメーターは、RDBSS によって IoCreateDevice ルーチンに DeviceCharacteristics として渡されます。

戻り値

RxRegisterMinirdr は、成功した場合はSTATUS_SUCCESSを返し、失敗した場合は次のいずれかのエラー値を返します。

リターン コード 説明
STATUS_INSUFFICIENT_RESOURCES
デバイス オブジェクトを作成するためのリソースが不足していました。
STATUS_INVALID_PARAMETER
無効なパラメーターがルーチンに渡されました。 このエラーは、 DeviceObject パラメーターが NULL ポインターの場合に返されます。
STATUS_OBJECT_NAME_COLLISION
このデバイス オブジェクトを作成しようとしたときに、名前の競合が発生しました。
STATUS_OBJECT_NAME_EXISTS
この名前のデバイス オブジェクトは既に存在します。
STATUS_UNSUCCESSFUL
デバイス オブジェクトを作成するための呼び出しで NULL デバイス オブジェクトが返されました。

注釈

ドライバーがカーネルによって読み込まれるたびに、ネットワーク ミニ リダイレクターが RDBSS に登録され、ドライバーがアンロードされると RDBSS で登録解除されます。 非モノリシック ドライバー (SMB ネットワーク ミニ リダイレクター) は、別のカーネル ドライバー であるRdbss.sysと通信します。 Rdbsslib.lib と静的にリンクするモノリシック ネットワーク ミニ リダイレクター ドライバーの場合、この通信は単に Rdbsslib.lib ライブラリ ルーチンの呼び出しにすぎません。

ネットワーク ミニ リダイレクターは、RDBSS からエクスポートされた登録ルーチン RxRegisterMinirdr を呼び出すことによって読み込まれたことを RDBSS に通知します。 ネットワーク ミニ リダイレクター ドライバーが最初に ( DriverEntry ルーチンで) 起動すると、ドライバーは RDBSS RxRegisterMinirdr ルーチンを呼び出して、ネットワーク ミニ リダイレクター ドライバーを RDBSS に登録します。 RxRegisterMinirdr に渡されるパラメーターに基づいて、RDBSS は IoCreateDevice を呼び出して、ネットワーク ミニ リダイレクター ドライバーのデバイス オブジェクトを作成します。

この登録プロセスの一環として、ネットワーク ミニ リダイレクターは、ネットワーク ミニ リダイレクターの構成情報と MINIRDR_DISPATCH、ネットワーク ミニ リダイレクター ドライバーによって実装されたコールバック ルーチンへのポインターのディスパッチ テーブルを含む大きな構造体へのポインターである RxRegisterMinirdr にパラメーターを渡します。 この構成データは、このネットワーク ミニ リダイレクターで使用する内部 RDBSS テーブルを構成するために使用されます。 RDBSS では、この構造体で渡されたコールバック ルーチンを使用して、ネットワーク ミニ リダイレクターと通信します。 ネットワーク ミニ リダイレクターは、これらのコールバック ルーチンの一部のみを実装するように選択できます。 実装されていないコールバック ルーチンは、RDBSS に渡されるディスパッチ テーブル内の NULL ポインターに設定する必要があります。 ネットワーク ミニ リダイレクターによって実装されたコールバック ルーチンのみが RDBSS によって呼び出されます。

RxRegisterMinirdr ルーチンは、最上位レベルの RDBSS ディスパッチ ルーチン RxFsdDispatch を指すネットワーク ミニ リダイレクター ドライバーのすべてのドライバー ディスパッチ ルーチンを設定します。 ネットワーク ミニ リダイレクターは、ドライバー ディスパッチ エントリ ポイントのコピーを保存し、 RxRegisterMinirdr を呼び出し、 RxRegisterMinirdr への呼び出しが返された後にドライバーディスパッチを独自のエントリ ポイントで書き換えることで、この動作をオーバーライドできます。 また、ネットワーク ミニ リダイレクターは、RX_REGISTERMINI_FLAG_DONT_INIT_DRIVER_DISPATCH ビットが Controls パラメーターに設定されている場合に、ドライバー ディスパッチ ルーチンが RxRegisterMinirdr ルーチンによってコピーされないようにすることもできます。

RxRegisterMinirdr 呼び出しが成功した場合、DeviceObject パラメーターによって指RDBSS_DEVICE_OBJECT内のメンバーの数が初期化されます。

  • Dispatch メンバーは MrdrDispatch パラメーターに設定されます。
  • RegistrationControls メンバーは Controls パラメーターに設定されます。
  • DeviceName メンバーは DeviceName パラメーターに設定されます。
  • Controls パラメーターのRX_REGISTERMINI_FLAG_DONT_PROVIDE_UNCS ビットが設定されていない場合、RegisterUncProvider メンバーは TRUE に設定されます。
  • Controls パラメーターのRX_REGISTERMINI_FLAG_DONT_PROVIDE_MAILSLOTS ビットが設定されていない場合、RegisterMailSlotProvider メンバーは TRUE に設定されます。
  • NetworkProviderPriority メンバーは、MUP が使用するネットワーク プロバイダーの優先順位に設定されます。
RxRegisterMinirdr 呼び出しが成功し、Controls パラメーターのRX_REGISTERMINI_FLAG_DONT_INIT_PREFIX_N_SCAVENGER ビットが設定されていない場合は、DeviceObject パラメーターによって指RDBSS_DEVICE_OBJECT他のメンバーの数が初期化されます。これには、次が含まれます。
  • pRxNetNameTable メンバー構造体が初期化されます。
  • RxNetNameTableInDeviceObject.IsNetNameTable メンバーは TRUE に設定されています
  • pRdbssScavenger メンバー構造体が初期化されます。
RxRegisterMinirdr 呼び出しが成功した場合、RDBSS は RDBSS のネットワーク ミニ リダイレクターの内部状態をRDBSS_STARTABLEに設定します。

ネットワーク ミニ リダイレクターは、MINIRDR_DISPATCH構造体で渡されたコールバック ルーチンの 1 つである MRxStart ルーチンの呼び出しを受け取るまで、実際には操作を開始しません。 MrxStart コールバック ルーチンは、ネットワーク ミニ リダイレクターが独自のドライバー ディスパッチ エントリ ポイントを保持しない限り、操作のコールバックを受信する場合は、ネットワーク ミニ リダイレクター ドライバーによって実装する必要があります。 それ以外の場合、RDBSS では、 MrxStart が正常に返されるまで、ドライバーへの次の I/O 要求パケットのみが許可されます。

  • IRPSP の FileObject->FileName.Length パラメーターが 0 で、 FileObject->RelatedFileObject パラメーターが NULL であるデバイス作成操作とデバイス操作に対する IRP 要求。
その他の IRP 要求の場合、RDBSS ディスパッチ ルーチン RxFsdDispatch は、STATUS_REDIRECTOR_NOT_STARTEDの状態を返します。

RDBSS ディスパッチ ルーチンは、次の I/O 要求パケットに対する要求も失敗します。

  • IRP_MJ_CREATE_MAILSLOT
  • IRP_MJ_CREATE_NAMED_PIPE
ネットワーク ミニ リダイレクター MrxStart ルーチンは、 RxStartMiniRdr ルーチンが呼び出されたときに RDBSS によって呼び出されます。 RDBSS RxStartMinirdr は、通常、ネットワーク ミニリダイレクターを開始するユーザー モード のアプリケーションまたはサービスからの FSCTL または IOCTL 要求の結果として呼び出されます。 RxRegisterMinirdr の呼び出しが成功した後、ネットワーク ミニ リダイレクターの DriverEntry ルーチンから RxStartMinirdr を呼び出すことはできません。これは、一部の開始処理でドライバーの初期化が完了する必要があるためです。 RxStartMinirdr 呼び出しを受信すると、RDBSS は、ネットワーク ミニ リダイレクターの MrxStart ルーチンを呼び出すことによって開始プロセスを完了します。 MrxStart の呼び出しで成功が返された場合、RDBSS は RDBSS のミニ リダイレクターの内部状態をRDBSS_STARTEDに設定します。

要件

要件
対象プラットフォーム デスクトップ
Header mrx.h (Mrx.h を含む)
IRQL <= APC_LEVEL

こちらもご覧ください

DriverEntry

IoCreateDevice

MRxStart

RxFsdDispatch

RxSetDomainForMailslotBroadcast

RxStartMinirdr

RxStopMinirdr

RxUnregisterMinirdr

RxpUnregisterMinirdr

__RxFillAndInstallFastIoDispatch