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