ReadLogRestartArea 函数 (clfsw32.h)
返回最后一个重新启动区域,该区域已成功写入与 WriteLogRestartArea 的封送处理区域关联的日志。 函数还返回读取上下文,该上下文允许调用方通过重启记录中的日志向后或向前游标。
当通过调用 ReadPreviousLogRestartArea 扫描当前重启之前的区域时,此读取上下文非常有用。
语法
CLFSUSER_API BOOL ReadLogRestartArea(
[in] PVOID pvMarshal,
[out] PVOID *ppvRestartBuffer,
[out] PULONG pcbRestartBuffer,
[out] PCLFS_LSN plsn,
[out] PVOID *ppvContext,
[in, out, optional] LPOVERLAPPED pOverlapped
);
参数
[in] pvMarshal
指向使用 CreateLogMarshallingArea 函数分配的封送上下文的指针。
[out] ppvRestartBuffer
指向变量的指针,该变量接收指向日志 I/O 块中重启数据的指针。
[out] pcbRestartBuffer
指向接收重启数据量的变量的指针。
[out] plsn
指向 CLFS_LSN 结构的指针,该结构接收 (重新启动区域的 LSN) 日志序列号。
[out] ppvContext
指向变量的指针,该变量在读取成功时接收指向系统分配的读取上下文的指针。
如果函数延迟完成操作,它将返回有效的读取上下文指针和 错误状态ERROR_IO_PENDING。 对于所有其他错误,读取上下文指针为 NULL。 有关处理函数延迟完成的详细信息,请参阅本主题的“备注”部分。
获取所有请求的日志记录后,客户端必须将读取上下文传递给 TerminateReadLog 以释放关联的内存。 否则会导致内存泄漏。
[in, out, optional] pOverlapped
指向异步操作所需的 OVERLAPPED 结构的指针。
如果未使用异步操作,此参数可以为 NULL 。
返回值
如果该函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
以下列表标识了可能的错误代码:
注解
如果 CreateLogMarshallingArea 指定的日志块大小不足以容纳完整的日志块,则返回错误消息ERROR_LOG_BLOCK_INCOMPLETE。
通常, ReadLogRestartArea 仅在客户端重启期间(崩溃后或正常关闭后)使用。
如果日志中没有重启区域, ReadLogRestartArea 将失败,代码 ERROR_LOG_NO_RESTART。
如果 ReadLogRestartArea 失败,错误代码 为 ERROR_IO_PENDING,则会将指向有效读取上下文的指针放置在 ppvReadContext 参数指向的变量中。
若要完成日志记录复制,客户端应首先通过调用 GetOverlappedResult 或其中一个同步 等待函数,将其执行与延迟完成的重叠 I/O 操作同步。 有关详细信息,请参阅 同步和重叠输入和输出。
ReadLogRestartArea 异步完成后,将从磁盘中读取请求的重启区域,但指向它的有效指针不会放置在 *ppvRestartBuffer 中。
若要获取有效的指针,客户端必须调用 ReadPreviousLogRestartArea,该指针在 ReadLogRestartArea 返回的读取上下文指针中传递。
CLFS 读取上下文不应一次传递到多个异步读取中,否则函数失败并ERROR_BUSY。
要求
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 R2 [仅限桌面应用] |
目标平台 | Windows |
标头 | clfsw32.h |
Library | Clfsw32.lib |
DLL | Clfsw32.dll |