Função IoAllocateMdl (wdm.h)
A rotina IoAllocateMdl aloca uma MDL (lista de descritores de memória) grande o suficiente para mapear um buffer, considerando o endereço e o comprimento iniciais do buffer. Opcionalmente, essa rotina associa o MDL a um IRP.
Sintaxe
PMDL IoAllocateMdl(
[in, optional] __drv_aliasesMem PVOID VirtualAddress,
[in] ULONG Length,
[in] BOOLEAN SecondaryBuffer,
[in] BOOLEAN ChargeQuota,
[in, out, optional] PIRP Irp
);
Parâmetros
[in, optional] VirtualAddress
O ponteiro para o endereço virtual base do buffer que o MDL deve descrever.
[in] Length
Especifica o comprimento, em bytes, do buffer que o MDL deve descrever. Para obter mais informações, consulte a seção Comentários a seguir.
[in] SecondaryBuffer
Indica se o buffer é um buffer primário ou secundário. Esse parâmetro determina como o MDL deve ser vinculado ao IRP. Todos os buffers, exceto o primeiro buffer descrito por um MDL em um IRP, são considerados buffers secundários. Esse campo deve ser FALSE se nenhum IRP estiver associado ao MDL. Para obter mais informações, consulte a seção Comentários a seguir.
[in] ChargeQuota
Reservado para uso do sistema. Os drivers devem definir esse parâmetro para FALSE.
[in, out, optional] Irp
Ponteiro para um IRP a ser associado ao MDL. Se o ponteiro irp não forNULL, o MDL alocado será associado à lista de MDL do IRP especificado, de acordo com o valor de SecondaryBuffer.
Valor de retorno
IoAllocateMdl retorna um ponteiro para um MDL ou, se o MDL não puder ser alocado, retornará NULL.
Observações
IoAllocateMdl pode ser usado por um driver que precisa dividir um buffer em partes, cada um mapeado por um MDL separado ou mapear um buffer alocado pelo driver. O driver deve chamar MmBuildMdlForNonPagedPool com o MDL alocado por essa chamada para configurar um MDL descrevendo um buffer alocado pelo driver no pool nãopagado.
O parâmetro Length especifica o tamanho do buffer que deve ser descrito pelo MDL. No Windows Server 2003, Windows XP e Windows 2000, o tamanho máximo do buffer, em bytes, que essa rotina pode alocar é PAGE_SIZE * (65535 - sizeof(MDL)) /sizeof(ULONG_PTR). No Windows Vista e no Windows Server 2008, o tamanho máximo do buffer é (2 gigabytes – PAGE_SIZE). A partir do Windows 7 e do Windows Server 2008 R2, o tamanho máximo do buffer é (4 gigabytes – PAGE_SIZE).
Se o parâmetro SecondaryBuffer for FALSE, as atualizações de rotina irp>MdlAddress para apontar para o novo MDL. Se secondaryBuffer for VERDADEIRO, a rotina adicionará o MDL ao final da cadeia de MDL à qual Irp –>aponta o MdlAddress.
Para obter mais informações sobre MDLs, consulte Usando MDLs.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Disponível a partir do Windows 2000. |
da Plataforma de Destino | Universal |
cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
biblioteca | NtosKrnl.lib |
de DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |