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 之前,必须通过调用 ClfsAddLogContainer 或 ClfsAddLogContainerSet 向基础日志添加至少两个容器。

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

要求

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

请参阅

ClfsAddLogContainer

ClfsAddLogContainerSet

ClfsCreateLogFile

ClfsDeleteMarshallingArea

LOG_FILE_OBJECT

POOL_TYPE