createLogMarshallingArea 函数 (clfsw32.h)
为日志创建封送处理区域,成功后返回封送处理上下文。 在创建封送处理区域之前,日志必须至少有一个容器。
封送处理上下文用于将记录追加到日志或从日志中读取记录。 由于记录始终存储在日志块中,因此它们必须通过封送上下文传递。
日志记录是通过调用 ReserveAndAppendLog 写入的。
语法
CLFSUSER_API BOOL CreateLogMarshallingArea(
[in] HANDLE hLog,
[in, optional] CLFS_BLOCK_ALLOCATION pfnAllocBuffer,
[in, optional] CLFS_BLOCK_DEALLOCATION pfnFreeBuffer,
[in, optional] PVOID pvBlockAllocContext,
[in] ULONG cbMarshallingBuffer,
[in] ULONG cMaxWriteBuffers,
[in] ULONG cMaxReadBuffers,
[out] PVOID *ppvMarshal
);
参数
[in] hLog
从 CreateLogFile 获取的日志句柄。
日志句柄可以引用专用日志或多路复用日志。
[in, optional] pfnAllocBuffer
为日志块分配内存的回调函数。
如果此参数为 NULL,则公共日志文件系统 (CLFS) 提供默认块分配函数。 如果使用 pfnFreeBuffer 参数指定了释放块回调,则此参数不能为 NULL。
以下示例标识块分配回调函数的语法:
typedef PVOID (* CLFS_BLOCK_ALLOCATION) (ULONG cbBufferSize, PVOID pvUserContext);
[in, optional] pfnFreeBuffer
释放 pfnAllocBuffer 分配的日志块的回调函数。
如果此参数为 NULL,则 CLFS 提供默认的块解除分配函数。 如果使用 pfnAllocBuffer 参数指定了块分配回调,则此参数不能为 NULL。
以下示例标识了释放块回调函数的语法:
typedef void (* CLFS_BLOCK_DEALLOCATION) (PVOID pvBuffer, PVOID pvUserContext);
“ClfsBlockDeallocProc”的 buffer 参数必须指向使用 pfnAllocBuffer 指向的回调分配的块。
[in, optional] pvBlockAllocContext
指向缓冲区的指针,该缓冲区作为用户上下文传回块分配和解除分配例程(如果指定了缓冲区)。
如果 pfnAllocBuffer 为 NULL,则忽略此参数。
[in] cbMarshallingBuffer
新封送处理区域将使用的单个日志 I/O 块的大小(以字节为单位)。 这必须是稳定存储介质上扇区大小的倍数。 扇区大小是在 GetDiskFreeSpace 函数的 lpBytesPerSector 参数中返回的值。
如果记录的长度超过此值,则无法追加或读取记录。
[in] cMaxWriteBuffers
可随时为写入操作分配的最大块数。
此值可能会影响数据刷新的频率。 如果不需要指定限制来控制数据刷新周期的频率,请指定 INFINITE。
[in] cMaxReadBuffers
可随时为读取操作分配的最大块数。
读取上下文至少使用一个读取块。
[out] ppvMarshal
指向 CLFS 在 CreateLogMarshallingArea 成功完成时分配的封送处理上下文的指针。
此上下文必须用于记录封送处理区域的所有读取、追加、写入和刷新操作。 使用封送处理上下文访问封送区域的所有操作都是线程安全的。 如果操作不成功,则此参数为 NULL 。
返回值
如果该函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
以下列表标识了可能的错误代码:
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 R2 [仅限桌面应用] |
目标平台 | Windows |
标头 | clfsw32.h |
Library | Clfsw32.lib |
DLL | Clfsw32.dll |