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 中定义的错误代码之一。

言论

pfnAllocBufferpfnFreeBuffer 参数必须同时指向调用方分配的函数,或者它们都必须 NULL。 如果它们都 NULL,则 CLFS 提供用于分配和释放日志 I/O 块的默认函数。

在调用 ClfsCreateMarshallingArea之前,必须通过调用 ClfsAddLogContainerClfsAddLogContainerSet将至少两个容器添加到基础日志中。

有关 CLFS 概念和术语的说明,请参阅 通用日志文件系统

要求

要求 价值
目标平台 桌面
标头 wdm.h (包括 Wdm.h)
Clfs.lib
DLL Clfs.sys
IRQL IRQL <= APC_LEVEL

另请参阅

ClfsAddLogContainer

ClfsAddLogContainerSet

ClfsCreateLogFile

ClfsDeleteMarshallingArea

LOG_FILE_OBJECT

POOL_TYPE