共用方式為


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

CC_FILE_SIZES結構的指標,其中包含 AllocationSizeFileSizeValidDataLength。 此結構的定義如下:

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例外狀況。 因此,若要控制是否發生失敗,驅動程式應該將呼叫包裝在 try-excepttry-finally 語句中 CcInitializeCacheMap

除非檔案已停用,否則文件系統必須先呼叫 CcInitializeCacheMap 來快取檔案,才能在檔案上使用任何其他快取管理員例程來快取檔案。 在大部分的文件系統中,預設會啟用檔案快取,但可藉由將檔案建立選項中的 FILE_NO_INTERMEDIATE_BUFFERING 旗標設定為 TRUE 來停用。

呼叫 CcInitializeCacheMap之後,文件系統可以視需要呼叫 CcSetAdditionalCacheAttributes 來停用預先讀取或寫入後置。

關閉檔案時,支援檔案快取的每個文件系統都必須在該檔案上呼叫 CcUninitializeCacheMap,不論檔案是否已快取。 即使檔案已停用快取,檔案系統仍必須呼叫 CcUninitializeCacheMap

CcIsFileCached 巨集會決定是否快取檔案。

BOOLEAN CcIsFileCached(
  [in] PFILE_OBJECT FileObject
);

參數

FileObject[in] [in]

檔案物件的指標。

傳回值

如果快取檔案,則傳回 true TRUE,否則 傳回 FALSE

注意 因為多個檔案物件可以參考相同的檔案(也就是數據流),因此如果另一個快取的檔案對象參考相同的數據流,CcIsFileCached 巨集可以傳回 TRUE 指定的非快取檔案物件。 換句話說,如果有一組參考相同數據流的檔案物件,而且如果快取集合中至少有一個檔案物件,則 CcIsFileCached 會針對集合中的所有檔案物件傳回 true TRUE
 

要求

要求 價值
目標平臺 普遍
標頭 ntifs.h (include Ntifs.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe

另請參閱

CcSetAdditionalCacheAttributes

CcUninitializeCacheMap