NdisAllocateMdl 함수(ndis/mdlapi.h)
NdisAllocateMdl 함수는 지정된 가상 주소의 메모리 버퍼를 설명하는 MDL을 할당합니다.
구문
NDIS_EXPORTED_ROUTINE MDL * NdisAllocateMdl(
[in] NDIS_HANDLE NdisHandle,
[in] PVOID VirtualAddress,
[in] ULONG Length
);
매개 변수
[in] NdisHandle
호출자 초기화 중에 가져온 NDIS 핸들입니다. 자세한 내용은 풀 핸들 가져오기를 참조하세요.
[in] VirtualAddress
MDL에서 설명할 버퍼의 기본 가상 주소에 대한 포인터입니다.
NdisAllocateMdl에 대한 VirtualAddress 매개 변수는 페이지가 없는 풀의 메모리만 허용합니다. 즉, ExAllocatePool*(NonPagedNx), NdisAllocateMemoryWithTagPriority 또는 NdisMAllocateSharedMemory의 메모리가 필요합니다. 특히 스택, 페이징 풀, 드라이버 글로벌 데이터 또는 기타 메모리 영역의 메모리와 함께 사용하면 안 됩니다 .
드라이버가 이러한 비페이지되지 않은 풀 영역 중 하나에 대한 MDL을 빌드해야 하는 경우 MmProbeAndLockPages와 결합된 IoAllocateMdl과 같은 해당 메모리 유형에 적절한 커널 API를 사용해야 합니다.
[in] Length
메모리 버퍼의 크기(바이트)입니다.
반환 값
NdisAllocateMdl 은 할당된 MDL에 대한 포인터를 반환합니다. 할당이 실패하면 반환 값은 NULL입니다.
설명
NdisAllocateMdl을 호출하여 할당된 모든 MDL은 NdisFreeMdl 함수를 호출하여 해제해야 합니다.
NdisAllocateMdl 은 메모리를 할당하고 한 단계로 MDL을 빌드합니다. 이 프로세스는 MDL에 대한 메모리만 할당하는 IoAllocateMdl과 다릅니다. 즉, 호출자는 MmBuildMdlForNonPagedPool 또는 MmProbeAndLockPages를 호출하여 MDL을 빌드해야 합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | NDIS 6.0 이상에서 지원됩니다. |
대상 플랫폼 | 유니버설 |
최소 UMDF 버전 | 2.33 |
머리글 | ndis/mdlapi.h(ndis.h 포함) |
라이브러리 | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI 규정 준수 규칙 | Irql_NetBuffer_Function(ndis), NdisAllocateMdl(ndis) |