Compartilhar via


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

Confira também

IO_STACK_LOCATION

IRP

IoAllocateIrp

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoCompletion

IoBuildSynchronousFsdRequest

IoFreeIrp

IoMakeAssociatedIrp

IoReuseIrp

IoSetCompletionRoutine