次の方法で共有


CcInitializeCacheMap 関数 (ntifs.h)

ファイル システムは CcInitializeCacheMap ルーチンを呼び出してファイルをキャッシュします。

構文

void CcInitializeCacheMap(
  [in] PFILE_OBJECT             FileObject,
  [in] PCC_FILE_SIZES           FileSizes,
  [in] BOOLEAN                  PinAccess,
  [in] PCACHE_MANAGER_CALLBACKS Callbacks,
  [in] PVOID                    LazyWriteContext
);

パラメーター

[in] FileObject

ファイルのファイル オブジェクトへのポインター。

[in] FileSizes

ファイルの AllocationSizeFileSizeValidDataLength を含むCC_FILE_SIZES構造体へのポインター。 この構造体は次のように定義されます。

typedef struct _CC_FILE_SIZES {
    LARGE_INTEGER AllocationSize;
    LARGE_INTEGER FileSize;
    LARGE_INTEGER ValidDataLength;
} CC_FILE_SIZES, *PCC_FILE_SIZES;
メンバー 意味
AllocationSize ファイルの新しいセクション オブジェクト サイズ。 現在のセクション サイズ以下の場合は無視されます。
FileSize ファイルの新しいファイル サイズ。
ValidDataLength ファイルの新しい有効なデータ長。

[in] PinAccess

CcPinXxx ルーチンがファイルで使用される場合は TRUE に設定します。

[in] Callbacks

非ページ プールから割り当てられた構造体へのポインター。呼び出し元が提供する先読みおよび書き込みコールバック ルーチンのエントリ ポイントを含みます。この構造体とそのメンバーは、次のように定義されます。

typedef struct _CACHE_MANAGER_CALLBACKS {
    PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite;
    PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite;
    PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead;
    PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead;
} CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
typedef
BOOLEAN (*PACQUIRE_FOR_LAZY_WRITE) (
             IN PVOID Context,
             IN BOOLEAN Wait
             );
typedef
VOID (*PRELEASE_FROM_LAZY_WRITE) (
             IN PVOID Context
             );
typedef
BOOLEAN (*PACQUIRE_FOR_READ_AHEAD) (
             IN PVOID Context,
             IN BOOLEAN Wait
             );
typedef
VOID (*PRELEASE_FROM_READ_AHEAD) (
             IN PVOID Context
             );

[in] LazyWriteContext

コールバックで指定されたコールバック ルーチンに渡されるコンテキスト情報へのポインター。

戻り値

なし

解説

CcInitializeCacheMap は、ファイル データ キャッシュに必要なデータ構造を作成します。

エラーが発生した場合、 CcInitializeCacheMap は特定のエラーの状態例外を発生させます。 たとえば、プール割り当てエラーが発生した場合、 CcInitializeCacheMap はSTATUS_INSUFFICIENT_RESOURCES例外を発生させます。 そのため、エラーが発生した場合に制御を得るために、ドライバーは CcInitializeCacheMap の呼び出しを try-except ステートメントまたは try-finally ステートメントでラップする必要があります。

ファイル がデータ キャッシュを無効にして作成された場合を除き、ファイル システムは CcInitializeCacheMap を呼び出してファイルをキャッシュしてから、ファイル上で他のキャッシュ マネージャー ルーチンを使用する必要があります。 ほとんどのファイル システムでは、ファイル キャッシュは既定で有効になっていますが、ファイル作成オプションで FILE_NO_INTERMEDIATE_BUFFERING フラグを TRUE に設定することで無効にすることができます。

CcInitializeCacheMap を呼び出した後、ファイル システムは CcSetAdditionalCacheAttributes を呼び出して、必要に応じて先読みまたは書き込み分離を無効にすることができます。

ファイルを閉じるときに、ファイル キャッシュをサポートするすべてのファイル システムは、ファイルがキャッシュされているかどうかに関係なく、そのファイルで CcUninitializeCacheMap を呼び出す必要があります。 キャッシュを無効にしてファイルが作成された場合でも、ファイル システムは CcUninitializeCacheMap を呼び出す必要があります。

CcIsFileCached マクロは、ファイルがキャッシュされているかどうかを判断します。

BOOLEAN CcIsFileCached(
  [in] PFILE_OBJECT FileObject
);

パラメーター

FileObject[in] [in]

ファイルのファイル オブジェクトへのポインター。

戻り値

ファイルがキャッシュされている場合は TRUE 、それ以外の場合は FALSE を 返します。

メモ 複数のファイル オブジェクトが同じファイル (つまり、データ ストリーム) を参照できるため、 のキャッシュされたファイル オブジェクトが同じデータ ストリームを参照している場合、キャッシュされていないファイル オブジェクトが TRUE を 返す可能性があります。 つまり、同じデータ ストリームを参照するファイル オブジェクトのセットがあり、セット内の少なくとも 1 つのファイル オブジェクトがキャッシュされている場合、 CcIsFileCached はセット内のすべてのファイル オブジェクトに対して TRUE を 返します。
 

要件

要件
対象プラットフォーム ユニバーサル
Header ntifs.h (Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe

こちらもご覧ください

CcSetAdditionalCacheAttributes

CcUninitializeCacheMap