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。 如果缓存文件所需的页已驻留在内存中,则会立即复制数据,并且不会发生阻塞。 如果任何所需页面不驻留,则调用方将处于等待状态,直到所有必需的页面都成为常驻页面,并且可以复制数据。
如果 等待FALSE,CcCopyRead 将拒绝阻止,并且如果缓存文件所需的页面尚未驻留在内存中,则返回 FALSE。
FileOffset 加上 长度 必须小于或等于缓存文件的大小,否则将发生断言失败。
如果发生任何故障,CcCopyRead 将引发该特定失败的状态异常。 例如,如果池分配失败,CcCopyRead 引发STATUS_INSUFFICIENT_RESOURCES异常;如果发生 I/O 错误,CcCopyRead 引发 I/O 错误的状态异常。 因此,若要控制故障是否发生,驱动程序应在 try-except 或 try-finally 语句中包装对 CcCopyRead 的调用。
若要缓存文件,请使用 CcInitializeCacheMap。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 2000 |
目标平台 | 普遍 |
标头 | ntifs.h(包括 Ntifs.h、FltKernel.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |