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 ルーチンが呼び出される前に、モノリシック ネットワーク ミニ リダイレクター ドライバーによって呼び出される必要があります。
RxDriverEntry を呼び出して、DriverEntry ルーチンの開始時近くに RDBSS ライブラリのコピーを初期化した後、ネットワーク ミニ リダイレクター ドライバーは通常、後で DriverEntry ルーチンで RxRegisterMinirdr を呼び出して RDBSS に登録します。
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 ネットワーク要求で転送できるデータの大部分は、プロトコル情報のオーバーヘッドのため、64,000 未満になります。
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 ルーチンで初期化されます。 モノリシック ドライバーでは、 RxDriverEntry ルーチンが RDBSSLIB からエクスポートされます。LIB 静的ライブラリと は、ネットワーク ミニ リダイレクターによって明示的に呼び出される必要があります。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | rxprocs.h (Rxprocs.h を含む) |
IRQL | <= APC_LEVEL |