ClfsCreateMarshallingArea 函数 (wdm.h)
ClfsCreateMarshallingArea 例程为 CLFS 流创建封送区域,并返回指向表示新封送区域的不透明上下文的指针。
语法
CLFSUSER_API NTSTATUS ClfsCreateMarshallingArea(
[in] PLOG_FILE_OBJECT plfoLog,
[in] POOL_TYPE ePoolType,
[in, optional] PALLOCATE_FUNCTION pfnAllocBuffer,
[in, optional] PFREE_FUNCTION pfnFreeBuffer,
[in] ULONG cbMarshallingBuffer,
[in] ULONG cMaxWriteBuffers,
[in] ULONG cMaxReadBuffers,
[out] PVOID *ppvMarshalContext
);
参数
[in] plfoLog
指向表示 CLFS 流的 LOG_FILE_OBJECT 结构的指针。 调用方之前通过调用 ClfsCreateLogFile 获取了此指针。
[in] ePoolType
一个 POOL_TYPE 值,该值指定 (分页、非分页的内存类型,例如) 新的封送处理区域将用于其日志 I/O 块。
[in, optional] pfnAllocBuffer
NULL 或指向调用方提供的函数的指针,该函数为封送区域分配日志 I/O 块。 分配函数具有以下原型:
PVOID
(*PALLOCATE_FUNCTION) (
IN POOL_TYPE PoolType,
IN SIZE_T NumberOfBytes,
IN ULONG Tag
);
分配函数的返回值是指向新分配的日志 I/O 块的指针。
[in, optional] pfnFreeBuffer
NULL 或指向调用方提供的函数的指针,该函数释放以前由 pfnAllocBuffer 分配的日志 I/O 块。 函数具有以下原型:
VOID
(*PFREE_FUNCTION) (
IN PVOID Buffer
);
[in] cbMarshallingBuffer
新封送处理区域使用的单个日志 I/O 块的大小(以字节为单位)。 这必须是稳定存储介质上扇区大小的倍数。 扇区大小是从 GetDiskFreeSpace 返回的 lpBytesPerSector 值。
[in] cMaxWriteBuffers
一次可为写入操作分配的最大 I/O 块数。 此参数会影响数据刷新的频率。 如果不需要控制数据刷新的频率,请将此参数设置为 INFINITE。
[in] cMaxReadBuffers
一次可为读取操作分配的最大日志 I/O 块数。
[out] ppvMarshalContext
指向变量的指针,该变量接收指向表示新封送区域的不透明上下文的指针。
返回值
ClfsCreateMarshallingArea 如果成功,则返回STATUS_SUCCESS;否则,它将返回 Ntstatus.h 中定义的错误代码之一。
注解
pfnAllocBuffer 和 pfnFreeBuffer 参数必须都指向调用方分配的函数,或者它们都必须为 NULL。 如果它们均为 NULL,则 CLFS 提供用于分配和释放日志 I/O 块的默认函数。
在调用 ClfsCreateMarshallingArea 之前,必须通过调用 ClfsAddLogContainer 或 ClfsAddLogContainerSet 向基础日志添加至少两个容器。
有关 CLFS 概念和术语的说明,请参阅 通用日志文件系统。
要求
要求 | 值 |
---|---|
目标平台 | 桌面 |
标头 | wdm.h (包括 Wdm.h) |
Library | Clfs.lib |
DLL | Clfs.sys |
IRQL | IRQL <= APC_LEVEL |