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
 

要求

   
目标平台 通用
标头 ntifs.h (包括 Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe

另请参阅

CcSetAdditionalCacheAttributes

CcUninitializeCacheMap