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

注解

如果 WaitTRUE,则 CcCopyRead 保证完成复制请求并返回 TRUE。 如果缓存文件的所需页已驻留在内存中,则会立即复制数据,并且不会发生阻塞。 如果任何所需的页面不是驻留页,调用方将处于等待状态,直到所有必需的页面都已驻留,并且可以复制数据。

如果 WaitFALSE则 CcCopyRead 将拒绝阻止,并且如果缓存文件的所需页尚未驻留在内存中,则返回 FALSE

FileOffsetLength 必须小于或等于缓存文件的大小,否则将发生断言失败。

如果发生任何故障, CcCopyRead 将针对该特定故障引发状态异常。 例如,如果池分配失败, CcCopyRead 将引发STATUS_INSUFFICIENT_RESOURCES异常;如果发生 I/O 错误, CcCopyRead 将引发 I/O 错误的状态异常。 因此,若要在发生故障时获得控制,驱动程序应在 try-except 或try-finally 语句中包装对 CcCopyRead 的调用。

若要缓存文件,请使用 CcInitializeCacheMap

要求

要求
最低受支持的客户端 Windows 2000
目标平台 通用
标头 ntifs.h (包括 Ntifs.h、FltKernel.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

CcFastCopyRead

CcInitializeCacheMap

CcReadAhead

CcScheduleReadAhead

CcSetAdditionalCacheAttributes

CcSetReadAheadGranularity