WDF_MEMORY_DESCRIPTOR_INIT_MDL函数 (wdfmemory.h)

[适用于 KMDF 和 UMDF]

WDF_MEMORY_DESCRIPTOR_INIT_MDL 函数初始化 WDF_MEMORY_DESCRIPTOR 结构,以便它描述指定的内存描述符列表(MDL)。

语法

void WDF_MEMORY_DESCRIPTOR_INIT_MDL(
  [out] PWDF_MEMORY_DESCRIPTOR Descriptor,
  [in]  PMDL                   Mdl,
  [in]  ULONG                  BufferLength
);

参数

[out] Descriptor

指向 WDF_MEMORY_DESCRIPTOR 结构的指针。

[in] Mdl

指向描述缓冲区的 MDL 的指针。

[in] BufferLength

Mdl 指定的缓冲区的大小(以字节为单位)。

返回值

没有

注解

WDF_MEMORY_DESCRIPTOR_INIT_MDL 函数将指定的 WDF_MEMORY_DESCRIPTOR 结构归零,并将结构的 类型 成员设置为 WdfMemoryDescriptorTypeMdl。 然后,它将结构的 u.MdlType.Mdlu.MdlType.BufferLength 成员设置为分别指定 MdlBufferLength 参数的值。

例子

下面的代码示例分配缓冲区,为缓冲区创建 MDL,并使用 MDL 初始化 WDF_MEMORY_DESCRIPTOR 结构。

PVOID  pBuffer = NULL;
PMDL  pMdl = NULL;

pBuffer = ExAllocatePoolWithTag(
                                NonPagedPool, 
                                BUFFER_LENGTH, 
                                IOTARGET_DRIVER_TAG
                                );
if (pBuffer == NULL){
    Status = STATUS_UNSUCCESSFUL;
    goto Cleanup;
}
pMdl = IoAllocateMdl(
                     pBuffer,
                     BUFFER_LENGTH,
                     FALSE,
                     TRUE,
                     NULL
                     );
if (pMdl == NULL){
    Status = STATUS_UNSUCCESSFUL;
    goto Cleanup;
}
MmBuildMdlForNonPagedPool(pMdl);
WDF_MEMORY_DESCRIPTOR_INIT_MDL(
                               pInputBuffer,
                               pMdl,
                               BUFFER_LENGTH
                               );

要求

要求 价值
目标平台 普遍
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
标头 wdfmemory.h (包括 Wdf.h)
DDI 符合性规则 MdlAfterReqCompletedIntIoctlA(kmdf)MdlAfterReqCompletedIoctlA(kmdf)MdlAfterReqCompletedReadA(kmdf)MdlAfterReqCompletedWriteA(kmdf)

另请参阅

ExAllocatePoolWithTag

IoAllocateMdl

mmBuildMdlForNonPagedPool

WDF_MEMORY_DESCRIPTOR

WDF_MEMORY_DESCRIPTOR_INIT_BUFFER

WDF_MEMORY_DESCRIPTOR_INIT_HANDLE