次の方法で共有


RxDriverEntry 関数 (rxprocs.h)

rxDriverEntry は、RDBSS スタティック ライブラリを初期化するために、DriverEntry ルーチンからモノリシック ネットワーク ミニ リダイレクター ドライバーによって呼び出されます。

モノリシック ドライバー以外の場合、この初期化ルーチンは、RDBSS.SYS デバイス ドライバーの DriverEntry ルーチンと同じです。

構文

NTSTATUS RxDriverEntry(
  [in] IN PDRIVER_OBJECT  DriverObject,
  [in] IN PUNICODE_STRING RegistryPath
);

パラメーター

[in] DriverObject

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

[in] RegistryPath

ドライバー パラメーターとその他の構成データが格納される場所へのレジストリ パスを含む Unicode 文字列へのポインター。 通常、このレジストリ パスは、HKLM\System\CurrentControlSet\Services キー にある特定のネットワーク ミニ リダイレクターのサービス エントリの下にあります。

戻り値

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

リターン コード 形容
RXINIT_START RDBSS の初期化が開始されましたが、エラーが発生しました。 このエラー コードは、値が 5 の内部 RDBSS 列挙型です。

備考

RDBSSLIB と静的にリンクされているモノリシック ネットワーク ミニ リダイレクター ドライバー。LIB は、ドライバー リンクされた RDBSSLIB ライブラリのコピーを初期化するために、DriverEntry ルーチンから RxDriverEntry を呼び出す必要があります。 rxDriverEntry 、他の RDBSS ルーチンが呼び出される前に、モノリシック ネットワーク ミニ リダイレクター ドライバーによって呼び出される必要があります。

DriverEntry ルーチンの開始時に RDBSS ライブラリのコピーを初期化するために rxDriverEntry を呼び出した後、ネットワーク ミニリダイレクター ドライバーは通常、後で rdBSS に登録する DriverEntry ルーチンで rxRegisterMinirdr を呼び出します。

RxDriverEntry 呼び出しが成功すると、内部グローバル RDBBS データ構造が初期化されます。 これらのデータ構造を保護するために、さまざまなスピンロックとミューテックスが作成されます。 これらのデータ構造の 1 つは、RDBSS メモリ データ構造の最上位構造であるRDBSS_DATA構造です。 DriverObject パラメーターは、RDBSS_DATA構造体の DriverObject メンバーに格納されます。 RxDriverEntry では、トレース、ログ記録、デバッグも初期化されます (たとえば、チェックされたビルド)。

RxDriverEntry は、RegistryPath パラメーターとして渡されたレジストリ パスを開こうとします。このオブジェクトは大文字と小文字を区別しない文字列として扱われます。 このレジストリ キーを正常に開くことができる場合は、このエントリの下にある Parameters レジストリ キーを開こうとします。

RxDriverEntry は、HKLM\System\CurrentControlSet\Services\LanmanWorkStation\Parameters レジストリ キーを開こうとします。

このキーを開くことができる場合は、オペレーティング システムのバージョンに応じて、このキーの下にある値の読み取りが試行されます。

Windows XP 以降では、RxDriverEntry は、LanmanWorkStation\Parameters キーの下にある DisableByteRangeLockingOnReadOnlyFiles 値を開こうとします。

この値は、ブール値として扱われ、読み取り専用ファイルのバイト範囲ロックを処理するための RDBSS 変数 DisableByteRangeLockingOnReadOnlyFiles のブール値として格納される DWORD です。 この変数は、RDBSS が FCB 上のネットワーク ミニ リダイレクターによる新しいSRV_OPEN要求を処理する方法に影響し、属性に互換性がある場合に既存のSRV_OPENに折りたたむことができるかどうかを決定します。 ネットワーク ミニ リダイレクター ドライバーがこの動作を変更する場合、ドライバーは、RxDriverEntry ルーチンが返された後、適切な値に DisableByteRangeLockingOnReadOnlyFiles の値を設定する必要があります。 RDBSSLIB。LIB スタティック ライブラリは、DisableByteRangeLockingOnReadOnlyFiles を外部変数として公開します。

Windows 2000 および Windows XP では、rxDriverEntry は、LanmanWorkStation\Parameters キーの下にある ReadAheadGranularity 値を開こうとします。

この値は、数値として扱われ、キャッシュ マネージャーで使用される先行読み取り用のPAGE_SIZE ページの数に対する内部 RDBSS オプションの値として格納される DWORD です。 16 より大きいレジストリ値は、この値が 16 (現在許可されている最大値) に制限されているかのように扱われます。 この内部オプションは、プロセッサ上のPAGE_SIZEのページ数として格納されます (たとえば、4K PAGE_SIZEの場合は最大0x10000または 64K)。 Windows 2000 および Windows XP では、RDBSS は CcSetReadAheadGranularity を呼び出し、さまざまな作成、読み取り、書き込み操作に対してこのオプションを使用します。 ネットワーク ミニ リダイレクター ドライバーは、この動作を変更する場合、ドライバーは、RxDriverEntry ルーチンが返された後、適切な値に ReadAheadGranularity の値を設定する必要があります。 RDBSSLIB。LIB スタティック ライブラリは、ReadAheadGranularity を外部変数として公開します。

X86 システムでは、64K はページング書き込みを発行するときにメモリ マネージャーによって発行される最大の書き込みです (キャッシュのフラッシュはメモリ マネージャーを介して書き込みをページングします)。 リモート ファイル システムの場合、64K は最適な選択肢ではありません。 1 つの TDI ネットワーク要求で転送できるデータの大部分は、プロトコル情報のオーバーヘッドが原因で 64K 未満になります。

Windows Server 2003 では、ReadAheadGranularity を設定するレジストリ値は公開されず、RDBSS の既定値は 32K (8 4K PAGE_SIZE ページ) です。 これは、ローカル ファイル システムに採用されているのと同じ既定値です。

RxDriverEntry は、psGetCurrentProcess 呼び出して実行されているカーネル プロセスへのポインターを取得し、内部 RDBSS データ構造にこの値を格納します。 このカーネル プロセスは、ファイル システム プロセスと呼ばれることもあります。

RxDriverEntry 、ドライバー ディスパッチ テーブル内のすべてのエントリに対して、RxFsdDispatch ルーチンへのポインターをコピーします。 そのため、モノリシック ネットワーク ミニ リダイレクター ドライバーが RDBSS ライブラリの前に特別な処理のために特定の IRP を受信する必要がある場合は、RxDriverEntry 呼び出す前に、元のドライバー ディスパッチ テーブルのコピーを保存し、RxDriverEntry 呼び出し後に復元されたルーチン ポインターを保存する必要があります。 また、この動作を回避するオプションが設定されていない限り、rxRegisterMinirdr 呼び出されると、RDBSS は RxFsdDispatch をすべてのドライバー ディスパッチ テーブル エントリにコピーします。

モノリシックでないネットワーク ミニ リダイレクター ドライバー (Microsoft SMB リダイレクター) の場合、RDBSS.SYS デバイス ドライバーは、内部的に RxDriverEntry呼び出す DriverEntry ルーチンを読み込むと、独自の DriverEntry ルーチンで初期化されます。 モノリシック ドライバーでは、RxDriverEntry ルーチンが RDBSSLIB からエクスポートされます。LIB スタティック ライブラリ。ネットワーク ミニ リダイレクターによって明示的に呼び出される必要があります。

必要条件

要件 価値
ターゲット プラットフォーム の デスクトップ
ヘッダー rxprocs.h (Rxprocs.h を含む)
IRQL <= APC_LEVEL

関連項目

CcSetReadAheadGranularity

PsGetCurrentProcess の

RxRegisterMinirdr の

RxSetDomainForMailslotBroadcast の

RxStartMinirdr の

RxStopMinirdr の

RxUnregisterMinirdr の

RxpUnregisterMinirdr の

__RxFillAndInstallFastIoDispatch