WDF_MEMORY_DESCRIPTOR_INIT_MDL関数 (wdfmemory.h)

[KMDF と UMDF に適用]

WDF_MEMORY_DESCRIPTOR_INIT_MDL関数は、指定されたメモリ記述子リスト (MDL) を記述するように、WDF_MEMORY_DESCRIPTOR構造体を初期化します。

構文

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.Mdl メンバーと u.MdlType.BufferLength メンバーをそれぞれ 、Mdl パラメーターと BufferLength パラメーターが指定する値に設定します。

次のコード例では、バッファーを割り当て、バッファーの 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
Header 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