Функция 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 в противном случае.
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
заголовка | ntifs.h (include Ntifs.h) |
библиотеки |
NtosKrnl.lib |
DLL | NtosKrnl.exe |