readLogRecord 函数 (clfsw32.h)
以三种模式之一从指定的日志序列号 (LSN) 启动读取序列,并返回指定的日志记录和读取上下文中的第一个。 客户端可以通过将读取上下文传递给 ReadNextLogRecord,在指定模式下读取后续记录。
语法
CLFSUSER_API BOOL ReadLogRecord(
[in] PVOID pvMarshal,
[in] PCLFS_LSN plsnFirst,
[in] CLFS_CONTEXT_MODE eContextMode,
[out] PVOID *ppvReadBuffer,
[out] PULONG pcbReadBuffer,
[out] PCLFS_RECORD_TYPE peRecordType,
[out] PCLFS_LSN plsnUndoNext,
[out] PCLFS_LSN plsnPrevious,
[out] PVOID *ppvReadContext,
[in, out, optional] LPOVERLAPPED pOverlapped
);
参数
[in] pvMarshal
指向使用 CreateLogMarshallingArea 函数分配的封送处理上下文的指针。
[in] plsnFirst
指向 CLFS_LSN 结构的指针,该结构指定读取操作应在其中启动的记录 (LSN) 日志序列号。
此值必须是日志活动范围内有效记录的 LSN。
[in] eContextMode
*ppvReadContext 中返回的读取上下文的模式。
下表标识了三种互斥读取模式。
值 | 含义 |
---|---|
|
读取 plsnPrevious 链接到的记录。 |
|
读取 plsnUndoNext 链接到的记录链。 |
|
使用紧跟在读取上下文中的当前 LSN 后面的 LSN 读取记录。 |
[out] ppvReadBuffer
指向变量的指针,该变量接收指向日志 I/O 块中目标记录的指针。
[out] pcbReadBuffer
指向变量的指针,该变量接收以 *ppvReadBuffer 为单位返回的数据的大小(以字节为单位)。
[out] peRecordType
指向接收记录读取类型的变量的指针。
此参数是 CLFS_RECORD_TYPE常量之一。
[out] plsnUndoNext
指向 CLFS_LSN 结构的指针,该结构接收撤消记录链中下一条记录的 LSN。
[out] plsnPrevious
指向 CLFS_LSN 结构的指针,该结构接收上一记录链中下一条记录的 LSN。
[out] ppvReadContext
指向变量的指针,该变量在读取成功时接收指向系统分配的读取上下文的指针。
如果函数延迟完成操作,它将返回有效的读取上下文指针和 错误状态ERROR_IO_PENDING。 在所有其他错误中,读取上下文指针为 NULL。 有关处理函数延迟完成的详细信息,请参阅本主题的“备注”部分。
获取所有请求的日志记录后,客户端必须将读取上下文传递给 TerminateReadLog 以释放关联的内存。 否则会导致内存泄漏。
[in, out, optional] pOverlapped
指向异步操作所需的 OVERLAPPED 结构的指针。
如果未使用异步操作,此参数可以为 NULL 。
返回值
如果该函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
以下列表标识了可能的错误代码。
注解
如果 CreateLogMarshallingArea 指定的日志块大小不足以容纳完整的日志块,则返回错误消息ERROR_LOG_BLOCK_INCOMPLETE。
如果使用有效的 pOverlapped 结构调用 ReadLogRecord,并且使用重叠选项创建日志句柄,则如果对此函数的调用失败,错误代码为 ERROR_IO_PENDING,则指向有效读取上下文的指针将放置在 ppvReadContext 参数指向的变量中。
如果尝试打开的读取上下文比上次调用 CreateLogMarshallingArea 中指定的数目缓冲区多,则返回ERROR_LOG_BLOCK_EXHAUSTED。
若要完成日志记录复制,客户端应首先使用 GetOverlappedResult 或其中一个同步 等待函数将其执行与重叠 I/O 操作的延迟完成同步。 有关详细信息,请参阅 同步和重叠输入和输出。
ReadLogRecord 异步完成后,将从磁盘读取请求的记录,但不会解析为 *ppvReadBuffer 中的指针。
若要完成请求的读取并获取指向日志记录的有效指针,客户端必须调用 ReadNextLogRecord,该指针传入 ReadLogRecord 返回的读取上下文指针。
CLFS 读取上下文不应一次传递到多个异步读取中,否则函数失败并出现ERROR_BUSY。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 R2 [仅限桌面应用] |
目标平台 | Windows |
标头 | clfsw32.h |
Library | Clfsw32.lib |
DLL | Clfsw32.dll |