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

Подпрограмма CcCopyRead копирует данные из кэшированного файла в пользовательский буфер.

Синтаксис

BOOLEAN CcCopyRead(
  [in]  PFILE_OBJECT     FileObject,
  [in]  PLARGE_INTEGER   FileOffset,
  [in]  ULONG            Length,
  [in]  BOOLEAN          Wait,
  [out] PVOID            Buffer,
  [out] PIO_STATUS_BLOCK IoStatus
);

Параметры

[in] FileObject

Указатель на объект файла для кэшированного файла, из которого считываются данные.

[in] FileOffset

Указатель на переменную, указывающую начальное смещение байтов в кэшированном файле.

[in] Length

Длина считываемых данных в байтах.

[in] Wait

Установите значение TRUE , если вызывающий объект может быть помещен в состояние ожидания, пока не будут скопированы все данные. В противном случае — FALSE .

[out] Buffer

Указатель на буфер, в который копируются данные.

[out] IoStatus

Указатель на структуру, выделенную вызывающим объектом, которая получает окончательное состояние завершения и сведения об операции. Если не все данные успешно скопированы, IoStatus.Information содержит фактическое количество скопированных байтов.

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

Подпрограмма CcCopyRead возвращает значение TRUE , если данные были успешно скопированы, в противном случае — FALSE .

Комментарии

Если значение Wait имеет значение TRUE, CcCopyRead гарантированно завершит запрос на копирование и возвратит значение TRUE. Если необходимые страницы кэшированного файла уже находятся в памяти, данные будут скопированы немедленно и блокировка не возникнет. Если какие-либо необходимые страницы не являются резидентами, вызывающий объект будет помещен в состояние ожидания, пока все необходимые страницы не будут резидентами, и данные можно будет скопировать.

Если значение Wait имеет значение FALSE, CcCopyRead откажется блокировать и возвращает значение FALSE, если необходимые страницы кэшированного файла еще не находятся в памяти.

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

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

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

Требования

Требование Значение
Минимальная версия клиента Windows 2000
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntifs.h, FltKernel.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

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

CcFastCopyRead

CcInitializeCacheMap

CcReadAhead

CcScheduleReadAhead

CcSetAdditionalCacheAttributes

CcSetReadAheadGranularity