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 - sizeof(MDL)) / sizeof(ULONG_PTR)입니다. Windows Vista 및 Windows Server 2008에서 최대 버퍼 크기는 (2기가바이트 - PAGE_SIZE)입니다. Windows 7 및 Windows Server 2008 R2부터 최대 버퍼 크기는 (4기가바이트 - PAGE_SIZE)입니다.
SecondaryBuffer 매개 변수가 FALSE이면 루틴은 Irp-MdlAddress > 를 업데이트하여 새 MDL을 가리킵니다. SecondaryBuffer가 TRUE이면 루틴은 Irp-MdlAddress > 가 가리키는 MDL 체인의 끝에 MDL을 추가합니다.
MDL에 대한 자세한 내용은 MDL 사용을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000부터 사용할 수 있습니다. |
대상 플랫폼 | 유니버설 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |