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 구조체를 0으로 설정하고 구조체의 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