ReserveAndAppendLog 函数 (clfsw32.h)
为日志缓冲区保留空间,或将日志记录追加到日志中,或同时执行这两项操作。 函数是原子函数。
语法
CLFSUSER_API BOOL ReserveAndAppendLog(
[in] PVOID pvMarshal,
[in, optional] PCLFS_WRITE_ENTRY rgWriteEntries,
[in] ULONG cWriteEntries,
[in, optional] PCLFS_LSN plsnUndoNext,
[in, optional] PCLFS_LSN plsnPrevious,
[in] ULONG cReserveRecords,
[in, out, optional] LONGLONG [] rgcbReservation,
[in] ULONG fFlags,
[out, optional] PCLFS_LSN plsn,
[in, out, optional] LPOVERLAPPED pOverlapped
);
参数
[in] pvMarshal
指向使用 CreateLogMarshallingArea 函数分配的封送处理上下文的指针。
[in, optional] rgWriteEntries
指向要封送到一条记录中的 CLFS_WRITE_ENTRY 缓冲区数组的指针。
如果 cWriteEntries 参数为零,则忽略此参数。
[in] cWriteEntries
rgWriteEntries 数组中的写入条目数。
如果此值为非零值,则必须在 rgWriteEntries 参数中指定缓冲区。
[in, optional] plsnUndoNext
指向 CLFS_LSN 结构的指针,该结构指定撤消链中下一条记录的日志序列号 (LSN) 。
[in, optional] plsnPrevious
指向 CLFS_LSN 结构的指针,该结构指定上一条链中上一条记录的 LSN。
[in] cReserveRecords
rgcbReservation 数组中的记录大小数。
[in, out, optional] rgcbReservation
指向 cReserveRecords 参数指定的每个记录的预留大小的数组的指针。
如果 cReserveRecords 参数为零,则忽略此参数。 如果预留大小为负,则会释放该大小的预留。
为每条记录保留的实际空间(包括所需的开销)在成功完成后在各个数组元素中返回。 可以将这些值传递给 FreeReservedLog 函数,以调整封送处理区域中保留的空间。
[in] fFlags
指定此函数行为的标志。
可以组合以下一个或多个值。
[out, optional] plsn
指向接收追加记录的 LSN 的 CLFS_LSN 结构的指针。
[in, out, optional] pOverlapped
指向 OVERLAPPED 结构的指针。
如果未使用异步操作,此参数可以为 NULL 。
返回值
如果该函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 若要获得更多的错误信息,请调用 GetLastError 函数。
以下列表标识了可能的错误代码:
注解
ReserveAndAppendLog 函数返回的 LSN 不一定是使用的下一个 LSN。 返回的 LSN 是下一个 LSN 的估计值,它根据 fFlags 参数指定的标志而异。 移动基尾时,可以使用返回的 LSN。 此 LSN 因下一次调用此函数而失效。
如果 ReserveAndAppendLog 函数返回 ERROR_LOG_FILE_FULL,则日志中不再有空间。 可以通过以下方法之一解决此问题:
- 释放任何不需要的预留。
- 推进基本 LSN 或日志存档尾部,或同时推进两者,以回收容器。
- 将容器添加到日志。
如果使用有效的 pOverlapped 结构调用 ReserveAndAppendLog 函数,并且日志句柄是使用重叠选项创建的,则如果对此函数的调用失败并出现错误代码ERROR_IO_PENDING,则指向有效读取上下文的指针将放置在 ppvReadContext 参数指向的变量中。
若要完成日志记录复制,客户端应首先使用 GetOverlappedResult 函数或其中一个同步 Wait 函数将其执行与重叠 I/O 操作的延迟完成同步。 有关详细信息,请参阅 同步和重叠输入和输出。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 R2 [仅限桌面应用] |
目标平台 | Windows |
标头 | clfsw32.h |
Library | Clfsw32.lib |
DLL | Clfsw32.dll |