名前キャッシュ管理
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 名前キャッシュ管理ルーチンには、次のものが含まれます。
ルーチンによって返される値 | 説明 |
---|---|
このルーチンは、名前キャッシュ エントリを受け取り、有効期限とネットワーク ミニ リダイレクター コンテキストを更新します。 次に、アクティブなリストにエントリを配置します。 |
|
このルーチンは、有効な NAME_CACHE エントリをチェックします。 |
|
このルーチンは、指定された名前文字列を使用して NAME_CACHE 構造体を割り当てて初期化します。 呼び出し元は、名前キャッシュ コンテキストの追加のネットワーク ミニ リダイレクター要素を初期化し、そのエントリを名前キャッシュアクティブ リストに配置することが想定されます。 |
|
このルーチンは、フリー リストに NAME_CACHE エントリを配置します。 |
|
このルーチンは、名前プレフィックスが指定された短いファイル名と一致するすべての NAME_CACHE エントリの有効期限が切れます。 |
|
このルーチンは、NAME_CACHE エントリの指定した名前文字列との一致を検索します。 |
|
このルーチンは、NAME_CACHE_CONTROL 構造体に関連付けられているすべての NAME_CACHE エントリのストレージを解放します。 |
|
このルーチンは、NAME_CACHE エントリのストレージを解放し、NAME_CACHE_CONTROL 構造体に関連付けられている NAME_CACHE キャッシュ エントリの数をデクリメントします。 |
|
このルーチンは、名前キャッシュ (NAME_CACHE_CONTROL 構造体) を初期化します。 |