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

指向包含 AllocationSizeFileSize以及文件 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-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

注意 由于多个文件对象可以引用同一文件(即数据流),因此,如果另一个缓存文件对象引用同一数据流,CcIsFileCached 宏可能会返回 TRUE 给定的非缓存文件对象。 换句话说,如果存在一组引用同一数据流的文件对象,并且缓存集中至少有一个文件对象,CcIsFileCached 将返回 TRUE 集中的所有文件对象。
 

要求

要求 价值
目标平台 普遍
标头 ntifs.h (include Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe

另请参阅

CcSetAdditionalCacheAttributes

CcUninitializeCacheMap