IoAllocateMdl 함수(wdm.h)
IoAllocateMdl 루틴은 버퍼의 시작 주소와 길이가 지정된 경우 버퍼를 매핑할 수 있을 만큼 큰 MDL(메모리 설명자 목록)을 할당합니다. 필요에 따라 이 루틴은 MDL을 IRP와 연결합니다.
통사론
PMDL IoAllocateMdl(
[in, optional] __drv_aliasesMem PVOID VirtualAddress,
[in] ULONG Length,
[in] BOOLEAN SecondaryBuffer,
[in] BOOLEAN ChargeQuota,
[in, out, optional] PIRP Irp
);
매개 변수
[in, optional] VirtualAddress
MDL에서 설명할 버퍼의 기본 가상 주소에 대한 포인터입니다.
[in] Length
MDL에서 설명할 버퍼의 길이(바이트)를 지정합니다. 자세한 내용은 다음 설명 섹션을 참조하세요.
[in] SecondaryBuffer
버퍼가 주 버퍼인지 보조 버퍼인지 여부를 나타냅니다. 이 매개 변수는 MDL을 IRP에 연결하는 방법을 결정합니다. IRP에서 MDL에서 설명하는 첫 번째 버퍼를 제외한 모든 버퍼는 보조 버퍼로 간주됩니다. MDL과 연결된 IRP가 없는 경우 이 필드는 FALSE 합니다. 자세한 내용은 다음 설명 섹션을 참조하세요.
[in] ChargeQuota
시스템 사용을 위해 예약되어 있습니다. 드라이버는 이 매개 변수를 FALSE 설정해야 합니다.
[in, out, optional] Irp
MDL과 연결할 IRP에 대한 포인터입니다. Irp 포인터가 NULL경우 할당된 MDL은 SecondaryBuffer값에 따라 지정된 IRP의 MDL 목록과 연결됩니다.
반환 값
IoAllocateMdl MDL에 대한 포인터를 반환하거나 MDL을 할당할 수 없는 경우 NULL 반환합니다.
발언
IoAllocateMdl 각각 별도의 MDL에 의해 매핑된 조각으로 버퍼를 분할하거나 드라이버 할당 버퍼를 매핑해야 하는 드라이버에서 사용할 수 있습니다. 드라이버는 이 호출에 의해 할당된 MDL을 사용하여 MmBuildMdlForNonPagedPool 호출하여 비페이지 풀에서 드라이버 할당 버퍼를 설명하는 MDL을 설정해야 합니다.
Length 매개 변수는 MDL에서 설명할 버퍼의 크기를 지정합니다. Windows Server 2003, Windows XP 및 Windows 2000에서 이 루틴이 할당할 수 있는 최대 버퍼 크기(바이트)는 PAGE_SIZE * (65535 - MDL(sizeof) / sizeof(ULONG_PTR)입니다. Windows Vista 및 Windows Server 2008에서 최대 버퍼 크기는 (2GB - PAGE_SIZE)입니다. Windows 7 및 Windows Server 2008 R2부터 최대 버퍼 크기는 (4GB - PAGE_SIZE)입니다.
SecondaryBuffer 매개 변수가 FALSE 경우 루틴이 Irp 업데이트됩니다.>MdlAddress는 새 MDL을 가리키도록. SecondaryBuffer TRUE 경우 루틴은 Irp MDL 체인의 끝에 MDL을 추가합니다. mdlAddress가 가리키는>.
MDL에 대한 자세한 내용은 MDL 사용하는참조하세요.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000부터 사용할 수 있습니다. |
대상 플랫폼 | 보편적 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |