CcMapData 函式 (ntifs.h)
CcMapData 例程會將快取檔案的指定位元組範圍對應至記憶體中的緩衝區。
語法
BOOLEAN CcMapData(
[in] PFILE_OBJECT FileObject,
[in] PLARGE_INTEGER FileOffset,
[in] ULONG Length,
[in] ULONG Flags,
[out] PVOID *Bcb,
[out] PVOID *Buffer
);
參數
[in] FileObject
要對應數據以供讀取存取之檔案之檔案物件的指標。
[in] FileOffset
變數的指標,指定所需數據所在之快取檔案內的起始位移。
[in] Length
所需的數據位元組長度。
[in] Flags
旗標的位掩碼,指定如何執行對應作業。 這是下列一或多個值的位 OR 組合:
價值 | 意義 |
---|---|
MAP_WAIT | 呼叫端可以放入等候狀態,直到數據已對應為止。 |
MAP_NO_READ | 只有已駐在記憶體中的頁面才會對應。 |
等
如果呼叫端可以放入等候狀態,直到數據已對應,FALSE,請將 設定為 TRUE。
[out] Bcb
在第一次呼叫時,這會傳回緩衝區控制區塊 (BCB) 結構的指標。 此指標必須作為所有後續呼叫的輸入來提供,以供此緩衝區使用。
[out] Buffer
包含對應數據的緩衝區指標。
傳回值
如果快取檔案的數據成功對應,
言論
CcMapData 對應快取檔案中的數據以進行讀取存取。 請注意,呼叫 CcMapData 之後,就會對應數據;但未釘選。 這個區別很重要。 無法安全地修改已對應但未釘選的數據。 若要釘選數據,請使用 CcPinMappedData、CcPinRead或 CcPreparePinWrite。
每次成功呼叫 CcMapData,都必須與後續對 CcUnpinData 的呼叫相符。
CcMapData 無法在快取管理員中跨檢視界限對應數據。 快取管理員會在 256 KB 對齊的檢視中管理系統中的檔案。 (快取管理員的檢視大小是由系統定義的常數 VACB_MAPPING_GRANULARITY所指定,其設定為 ntifs.h中的 256 KB。對應的區域不能跨越一個以上的 256 KB 檢視。 因此,可對應的最大區域是 256 KB,從檔案中的 256 KB 對齊位移開始。
對應快取檔案中的位元組範圍,不可確保頁面會保留在記憶體中。 只要頁面已對應,位元組範圍就保證會持續對應到系統快取虛擬位址空間,但記憶體管理員可以在系統記憶體需求需要時分頁出實體頁面。
如果已設定 MAP_WAIT 旗標(或 Wait為 TRUE),CcMapData 保證可以完成對應要求,並傳回 true true。 如果快取檔案的必要頁面已存在於記憶體中,則會立即對應數據,而且不會發生任何封鎖。 如果任何必要的頁面都不是常駐頁面,則呼叫端會進入等候狀態,直到所有必要頁面都已進入居民狀態,且數據可以對應。 如果未設定
如果發生任何失敗,CcMapData 會引發該特定失敗的狀態例外狀況。 例如,如果集區配置失敗,CcMapData 引發 STATUS_INSUFFICIENT_RESOURCES 例外狀況;如果發生 I/O 錯誤,CcMapData 會引發 I/O 錯誤的狀態例外狀況。 因此,若要控制是否發生失敗,驅動程式應該在 try-except 或
若要快取檔案,請使用 CcInitializeCacheMap。
要求
要求 | 價值 |
---|---|
目標平臺 | 普遍 |
標頭 | ntifs.h (include Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | < DISPATCH_LEVEL |