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


Функция 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 в противном случае.

Замечания

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

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

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

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000
целевая платформа Всеобщий
заголовка ntifs.h (include Ntifs.h, FltKernel.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

См. также

CcFastCopyRead

CcInitializeCacheMap

CcReadAhead

CcScheduleReadAhead

CcSetAdditionalCacheAttributes

CcSetReadAheadGranularity