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 이상에서 지원됩니다.
대상 플랫폼 유니버설
헤더 ndis/mdlapi.h(ndis.h 포함)
라이브러리 Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 Irql_NetBuffer_Function(ndis), NdisAllocateMdl(ndis)

참고 항목

ExAllocatePool

IoAllocateMdl

MmBuildMdlForNonPagedPool

MmProbeAndLockPages

NdisAllocateMemoryWithTagPriority

NdisFreeMdl

NdisMAllocateSharedMemory