Функция 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;
Член Значение
AllocationSize Новый размер объекта раздела для файла. Игнорируется, если меньше или равен размеру текущего раздела.
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

Указатель на контекстную информацию, передаваемую подпрограммам обратного вызова, указанным в разделе Обратные вызовы.

Возвращаемое значение

None

Remarks

CcInitializeCacheMap создает структуры данных, необходимые для кэширования данных файлов.

При возникновении какого-либо сбоя CcInitializeCacheMap создает исключение состояния для этого конкретного сбоя. Например, при сбое выделения пула CcInitializeCacheMap вызывает исключение STATUS_INSUFFICIENT_RESOURCES. Поэтому, чтобы получить контроль в случае сбоя, драйвер должен заключить вызов CcInitializeCacheMap в оператор try-except или 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 (включая Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe

См. также раздел

CcSetAdditionalCacheAttributes

CcUninitializeCacheMap