Função IoAllocateIrp (wdm.h)

A rotina IoAllocateIrp aloca um IRP, considerando o número de locais de pilha de E/S para cada driver em camadas sob o chamador e, opcionalmente, para o chamador. Consulte também IoAllocateIrpEx.

Sintaxe

PIRP IoAllocateIrp(
  [in] CCHAR   StackSize,
  [in] BOOLEAN ChargeQuota
);

Parâmetros

[in] StackSize

Especifica o número de locais de pilha de E/S a serem alocados para o IRP. Esse valor deve ser pelo menos igual ao StackSize do objeto de dispositivo do driver mais baixo, 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.

[in] ChargeQuota

Definir isso como TRUE faz com que a memória alocada para o IRP seja cobrada em relação à cota do processo atual. Deve ser definido como FALSE por drivers intermediários. Isso pode ser definido como TRUE somente por 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.

Retornar valor

IoAllocateIrp retorna um ponteiro para um IRP, que foi alocado do espaço do sistema nãopagado ou NULL se um IRP não pôde ser alocado.

Comentários

A rotina IoAllocateIrp 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 IoAllocateIrp para criar IRPs para solicitações enviadas a drivers de nível inferior. Esse driver deve inicializar o IRP e deve definir sua rotina 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 do Windows 2000.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Regras de conformidade de DDI ForwardedAtBadIrqlAllocate(wdm), HwStorPortProhibitedDIs(storport), IoAllocateComplete(wdm), IoAllocateForward(wdm), IoAllocateFree(wdm), IoAllocateIrpSignalEventInCompletion(wdm), IoAllocateIrpSignalEventInCompletion2(wdm), IoAllocateIrpSignalEventInCompletion3(wdm), IoAllocateIrpSignalEventInCompletionTimeout(wdm), IoFreeIrp(storport), IoReuseIrp(wdm), MarkPower(wdm), MarkPowerDown(wdm), MarkQueryRelations(wdm), MarkStartDevice(wdm), SpNoWait(storport), StorPortStartIo(storport)

Confira também

IO_STACK_LOCATION

IRP

IoAllocateIrpEx

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoFreeIrp

IoMakeAssociatedIrp

IoReuseIrp

IoSetCompletionRoutine