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
指向包含文件的 AllocationSize、 FileSize 和 ValidDataLength 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-except 或 try-finally 语句中包装对 CcInitializeCacheMap 的调用。
文件系统在对文件使用任何其他缓存管理器例程之前,必须调用 CcInitializeCacheMap 来缓存文件,除非该文件是在禁用数据缓存的情况下创建的。 在大多数文件系统中,文件缓存默认处于启用状态,但可以通过在文件创建选项中将FILE_NO_INTERMEDIATE_BUFFERING标志设置为 TRUE 来禁用。
调用 CcInitializeCacheMap 后,文件系统可以调用 CcSetAdditionalCacheAttributes 以禁用预读或写后(如果需要)。
关闭文件时,无论文件是否缓存,每个支持文件缓存的文件系统都必须对该文件调用 CcUninitializeCacheMap 。 即使文件是在禁用缓存的情况下创建的,文件系统仍必须调用 CcUninitializeCacheMap。
CcIsFileCached 宏确定是否缓存了文件。
BOOLEAN CcIsFileCached(
[in] PFILE_OBJECT FileObject
);
参数
FileObject[in] [in]
指向文件的文件对象的指针。
返回值
如果缓存文件,则返回 TRUE ;否则返回 FALSE 。
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
标头 | ntifs.h (包括 Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |