Função IoAllocateIrpEx (wdm.h)
IoAllocateIrpEx aloca um IRP do pool nãopagado do sistema, possivelmente com uma extensão IRP.
Sintaxe
PIRP IoAllocateIrpEx(
PDEVICE_OBJECT DeviceObject,
CCHAR StackSize,
BOOLEAN ChargeQuota
);
Parâmetros
DeviceObject
Ponteiro para o objeto de dispositivo a marcar para determinar se deseja adicionar espaço para uma extensão IRP. Quando DeviceObject é definido como DEVICE_WITH_IRP_EXTENSION, o espaço para a extensão IRP também é alocado.
StackSize
Número máximo de locais de pilha a serem alocados para o IRP. StackSize deve ser pelo menos igual ao StackSize do objeto de dispositivo do próximo driver inferior, mas pode ser um maior que esse valor. O driver de chamada não precisa alocar um local de pilha no IRP para si mesmo.
ChargeQuota
Definir ChargeQuota como TRUE faz com que a memória alocada para o IRP seja cobrada em relação à cota para o processo atual. Esse parâmetro pode ser definido como TRUE somente pelos drivers de nível mais alto que são chamados no contexto do thread que origina a solicitação de E/S para a qual o driver está alocando outro IRP. Os drivers intermediários devem definir esse parâmetro como FALSE.
Retornar valor
IoAllocateIrpEx retorna um ponteiro para o IRP alocado e inicializado ou NULL se um IRP não puder ser alocado.
Comentários
IoAllocateIrpEx aloca locais de pilha stackSize e inicializa o IRP. Ele não associa o IRP a um thread. O driver de alocação deve liberar o IRP em vez de concluí-lo de volta ao gerenciador de E/S.
Um driver intermediário ou de nível mais alto pode chamar IoAllocateIrpEx para criar IRPs para solicitações enviadas a drivers de nível inferior. Esse driver deve inicializar o IRP e deve definir sua rotina de retorno de chamada IoCompletion no IRP criado para que o chamador possa descartar o IRP quando os drivers de nível inferior tiverem concluído o processamento da solicitação. IoAllocateIrp inicializa automaticamente os membros do IRP. Não use IoInitializeIrp para inicializar o IRP antes de seu primeiro uso. (Você pode usar IoInitializeIrp para reutilizar um IRP que você já usou em determinadas circunstâncias especiais. Consulte Reutilizando IRPs para obter detalhes.) Um driver intermediário ou de nível mais alto também pode chamar IoBuildDeviceIoControlRequest, IoBuildAsynchronousFsdRequest ou IoBuildSynchronousFsdRequest para configurar solicitações enviadas para drivers de nível inferior. Somente um driver de nível mais alto pode chamar IoMakeAssociatedIrp.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Disponível a partir Windows 10 (versão 1507) |
Plataforma de Destino | Universal |
Cabeçalho | wdm.h (include wdm.h, ntddk.h, ntifs.h) |
Biblioteca | ntoskrnl.lib |
DLL | ntoskrnl.exe |
IRQL | <= DISPATCH_LEVEL |