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.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 |
머리글 | wdfmemory.h(Wdf.h 포함) |
DDI 규정 준수 규칙 | MdlAfterReqCompletedIntIoctlA(kmdf), MdlAfterReqCompletedIoctlA(kmdf), MdlAfterReqCompletedReadA(kmdf), MdlAfterReqCompletedWriteA(kmdf) |