共用方式為


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

包含 File 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例外狀況。 因此,若要控制是否發生失敗,驅動程式應該在 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 ,否則傳回 FALSE

注意 由於多個檔案對象可以參考相同的檔案 (亦即數據流) ,因此當另一個快取的檔案對象參考相同的數據流時,CcIsFileCached 宏可能會傳回 TRUE。如果另一個快取的檔案對象參考相同的數據流, 則 CcIsFileCached 宏可能會傳回 TRUE 。 換句話說,如果有一組參考相同數據流的檔案物件,而且如果快取集合中至少有一個檔案物件, 則 CcIsFileCached 會針對集合中的所有檔案對象傳回 TRUE
 

規格需求

需求
目標平台 Universal
標頭 ntifs.h (包含 Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe

另請參閱

CcSetAdditionalCacheAttributes

CcUninitializeCacheMap