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)
Library NtosKrnl.lib
DLL NtosKrnl.exe

另请参阅

CcSetAdditionalCacheAttributes

CcUninitializeCacheMap