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

規格需求

   
目標平臺 環球
標頭 ntifs.h (包含 Ntifs.h)
程式庫 NtosKrnl.lib
DLL NtosKrnl.exe

另請參閱

CcSetAdditionalCacheAttributes

CcUninitializeCacheMap