名前キャッシュの管理

NAME_CACHE構造体は、クライアントが冗長な要求を抑制できるように、サーバーで実行された最近の操作の名前文字列をキャッシュします。 たとえば、開いている要求が最近 "ファイルが見つかりません" というメッセージで失敗し、クライアント アプリケーションが大文字の文字列で開いている要求を再度試行し、ネットワーク ミニ リダイレクターが大文字と小文字を区別する名前をサポートしていない場合、RDBSS はサーバーにヒットすることなくすぐに要求を失敗させることができます。

一般に、アルゴリズムは時間枠と操作数の制限をNAME_CACHEエントリに設定することです。 通常、時間枠は 2 秒です。 したがって、NAME_CACHE エントリが 2 秒を超える場合、一致は失敗し、要求はサーバーに送信されます。 サーバーで要求が再度失敗した場合、NAME_CACHE エントリは別の 2 秒のウィンドウで更新されます。 要求操作の数が一致しない場合、1 つ以上の要求がサーバーに送信され、このNAME_CACHEエントリが無効になる可能性があります。 ここでも、この操作はサーバーに送信されます。

NAME_CACHE構造体には、ネットワーク ミニ リダイレクター、MRX_NAME_CACHE、および RDBSS のみで使用するためのプライベート セクションに公開されているパブリック部分があります。 ミニ リダイレクター部分には、この名前エントリに対する以前のサーバー操作の結果のコンテキスト フィールド NTSTATUS と、NAME_CACHE構造体と共に割り当てることができる追加のミニ リダイレクター固有のストレージのコンテキスト拡張ポインターがあります。 詳細については、「 RxNameCacheInitialize」を参照してください。

Windows ネットワークの場合、SMB 操作数はミニ リダイレクター固有の状態の例であり、MRX_NAME_CACHEのコンテキスト フィールドに保存できます。 RxNameCacheCheckEntry が呼び出されると、名前キャッシュ内の一致を検索する一環として、コンテキスト フィールドと指定されたパラメーターの間で等値チェックが実行されます。 NAME_CACHE エントリが作成または更新されると、このフィールドに適切な値を指定し、NAME_CACHE エントリの有効期間を秒単位で指定するのが、ネットワーク ミニ リダイレクターのジョブです。

NAME_CACHE構造体のプライベート RDBSS 部分には、Unicode 文字列としての名前、検索を高速化する名前のハッシュ値、エントリの有効期限、およびサーバーで大文字と小文字が区別される名前がサポートされているかどうかを示すフラグが含まれています。

NAME_CACHE_CONTROL構造体は、特定の名前キャッシュを管理します。 無料のリスト、アクティブなリスト、更新プログラムを同期するためのロックがあります。 NAME_CACHE_CONTROL構造体には、割り当てられた現在のNAME_CACHE エントリの数、割り当てられるエントリの最大数の値、各NAME_CACHEエントリに使用される追加のネットワーク ミニ リダイレクター ストレージのサイズ、統計の値 (キャッシュが更新、チェック、有効な一致が返された回数) も含まれています。 ネットワークミニリダイレクターがネットワーク操作を保存したとき)。 MaximumEntries フィールドは、動作が不十分なプログラムが大量のメモリを消費する無効なファイル名を持つ多数のオープン要求を生成した場合に作成されるNAME_CACHEエントリの数を制限します。

現在、OBJECT_NAME_NOT_FOUNDの RDBSS によって管理されている名前キャッシュがあります。 この名前キャッシュの場合、2 秒のウィンドウが維持され、サーバーに何らかの操作が送信されると無効になります。 これは、サーバー上のアプリケーションがサーバー上の別のファイル (sample2) の作成を通知するために使用できるファイル (sample1) がクライアント アプリケーションで開かれている場合に発生する可能性があります。 クライアントが最初のファイル (sample1) を読み取り、2 番目のファイル (sample2) がサーバー上に作成されたことを確認すると、2 番目のファイル (sample2) と一致する名前キャッシュ内のヒットはエラーを返すことができません。 この最適化は、まだ存在しない同じファイルに対する連続するファイルオープン操作の場合にのみ処理します。 このシナリオは、Microsoft Word を使用して行われます。

RDBSS 名前キャッシュ管理ルーチンには、次のものが含まれます。

Routine 説明

RxNameCacheActivateEntry

このルーチンは、名前キャッシュ エントリを受け取り、有効期限とネットワーク ミニ リダイレクター コンテキストを更新します。 次に、アクティブなリストにエントリを配置します。

RxNameCacheCheckEntry

このルーチンは、NAME_CACHEエントリの有効性をチェックします。

RxNameCacheCreateEntry

このルーチンは、指定された名前文字列を使用してNAME_CACHE構造体を割り当てて初期化します。 呼び出し元は、名前キャッシュ コンテキストの追加のネットワーク ミニ リダイレクター要素を初期化し、そのエントリを名前キャッシュアクティブ リストに配置することが想定されます。

RxNameCacheExpireEntry

このルーチンは、空きリストにNAME_CACHEエントリを配置します。

RxNameCacheExpireEntryWithShortName

このルーチンは、名前プレフィックスが指定された短いファイル名と一致するすべてのNAME_CACHE エントリの有効期限が切れます。

RxNameCacheFetchEntry

このルーチンは、NAME_CACHE エントリの指定した名前文字列との一致を検索します。

RxNameCacheFinalize

このルーチンは、NAME_CACHE_CONTROL構造体に関連付けられているすべてのNAME_CACHEエントリのストレージを解放します。

RxNameCacheFreeEntry

このルーチンは、NAME_CACHE エントリのストレージを解放し、NAME_CACHE_CONTROL構造体に関連付けられているNAME_CACHEキャッシュ エントリの数をデクリメントします。

RxNameCacheInitialize

このルーチンは、名前キャッシュ (NAME_CACHE_CONTROL構造体) を初期化します。