CcCopyReadEx 函数 (ntifs.h)

CcCopyReadEx 例程将数据从缓存文件复制到用户缓冲区。 操作的 I/O 字节计数向发出线程收费。

语法

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

参数

[in] FileObject

指向要从中读取数据的缓存文件的文件对象的指针。

[in] FileOffset

指向指定缓存文件中起始字节偏移量的变量的指针。

[in] Length

要读取的数据的长度(以字节为单位)。

[in] Wait

如果调用方可以置于等待状态,直到复制所有数据,则设置为 TRUE,否则为 FALSE。

[out] Buffer

指向要将数据复制到其中的缓冲区的指针。

[out] IoStatus

指向调用方分配的结构的指针,该结构接收最终完成状态和有关操作的信息。 如果未成功复制所有数据,IoStatus.Information 包含复制的实际字节数。

[in] IoIssuerThread

发出读取请求的线程。 对于启用了磁盘 I/O 记帐的文件系统,这是 I/O 收费的线程。 如果 IoIssuerThread 为 NULL,则 I/O 将按当前线程收费。

返回值

如果成功复制数据,则 CcCopyReadEx 例程返回 TRUE;否则返回 FALSE。

言论

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

如果 等待 为 FALSE,CcCopyReadEx 将拒绝阻止,并且如果缓存文件所需的页面尚未驻留在内存中,则返回 FALSE。

FileOffset 加上 长度 必须小于或等于缓存文件的大小,否则将发生断言失败。

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

若要缓存文件,请使用 CcInitializeCacheMap

要求

要求 价值
最低支持的客户端 Windows 8
目标平台 普遍
标头 ntifs.h(包括 Ntifs.h、FltKernel.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

CcFastCopyRead

CcInitializeCacheMap

CcReadAhead

CcScheduleReadAhead

CcSetAdditionalCacheAttributes

CcSetReadAheadGranularity