Функция CcSetFileSizesEx (ntifs.h)

Программа CcSetFileSizesEx обновляет карты кэша и объект раздела для кэшированного файла, размер которого изменился.

Синтаксис

NTSTATUS CcSetFileSizesEx(
  PFILE_OBJECT   FileObject,
  PCC_FILE_SIZES FileSizes
);

Параметры

FileObject

[in] Указатель на объект файла для кэшированного файла.

FileSizes

[in] Указатель на структуру CC_FILE_SIZES, содержащую новые сведения о размере файла.

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

CcSetFileSizesEx возвращает STATUS_SUCCESS, если размер файла был успешно изменен, и если очистка была необходима, чтобы очистка была успешно выполнена. В противном случае возвращается код NSTATUS, отличный от успешного выполнения, например STATUS_INSUFFICIENT_RESOURCES, и может вызвать исключение состояния.

Что касается возникновения исключения состояния при ошибке:

  • Если операция вызывает очистку файла CcSetFileSizesEx или очистке файла, CcSetFileSizesEx не вызовет ошибок; он просто возвращает соответствующий код NTSTATUS, отличный от успешного выполнения операции очистки или очистки.

  • Если операция вызывает CcSetFileSizesEx расширить раздел, то CcSetFileSizesEx вызовет любую ошибку, попавшей во время этого расширения.

Замечания

Файловые системы должны вызывать CcSetFileSizesEx для обновления структур данных диспетчера кэша при каждом из следующих изменений в кэшированный файл:

  • Его размер выделения увеличивается.

  • Его допустимая длина данных уменьшается.

  • Его допустимая длина данных увеличивается операцией ввода-вывода, не кэшированного ввода-вывода.

  • Его размер файла увеличивается или уменьшается.

Если операция вызывает CcSetFileSizesEx расширить раздел и произойдет сбой, CcSetFileSizesEx вызывает исключение состояния для конкретного сбоя. Например, если происходит сбой выделения пула, CcSetFileSizesEx вызывает исключение STATUS_INSUFFICIENT_RESOURCES. Таким образом, чтобы получить контроль при возникновении сбоя, драйвер должен упаковать вызов CcSetFileSizesEx в инструкции , кроме или инструкции try-finally.

Файловая система должна убедиться, что карта кэша действительна и будет оставаться на протяжении всего этого вызова.

Чтобы кэшировать файл, используйте CcInitializeCacheMap.

Чтобы получить размер кэшированного файла, передайте FileObject в CcGetFileSizePointer.

Требования

Требование Ценность
заголовка ntifs.h

См. также

CcInitializeCacheMap

CcSetCacheFileSizes