Поделиться через


Функция 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

Указатель на структуру CC_FILE_SIZES, содержащую AllocationSize, FileSizeи ValidDataLength для файла. Эта структура определена следующим образом:

typedef struct _CC_FILE_SIZES {
    LARGE_INTEGER AllocationSize;
    LARGE_INTEGER FileSize;
    LARGE_INTEGER ValidDataLength;
} CC_FILE_SIZES, *PCC_FILE_SIZES;
Член Значение
Выделение Новый размер объекта раздела для файла. Игнорируется, если меньше или равно текущему размеру раздела.
FileSize Новый размер файла.
ValidDataLength Новая допустимая длина данных для файла.

[in] PinAccess

Установите значение TRUE, если в файле будут использоваться подпрограммы CcPinXxx.

[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. Таким образом, чтобы получить контроль, если происходит сбой, драйвер должен упаковать вызов CcInitializeCacheMap в try-за исключением или инструкции try-finally.

Файловые системы должны вызывать 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