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结构归零,并将结构的 Type 成员设置为 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