Share via


Funzione IoAllocateIrpEx (wdm.h)

IoAllocateIrpEx alloca un IRP dal pool non di paging di sistema, possibilmente con un'estensione IRP.

Sintassi

PIRP IoAllocateIrpEx(
  PDEVICE_OBJECT DeviceObject,
  CCHAR          StackSize,
  BOOLEAN        ChargeQuota
);

Parametri

DeviceObject

Puntatore all'oggetto dispositivo per verificare se aggiungere spazio per un'estensione IRP. Quando DeviceObject è impostato su DEVICE_WITH_IRP_EXTENSION, viene allocato anche lo spazio per l'estensione IRP.

StackSize

Numero massimo di posizioni dello stack da allocare per IRP. StackSize deve essere almeno uguale a StackSize dell'oggetto dispositivo del driver inferiore successivo, ma può essere maggiore di questo valore. Il driver chiamante non deve allocare una posizione dello stack in IRP per se stessa.

ChargeQuota

Se si imposta ChargeQuota su TRUE , la memoria allocata per l'IRP viene addebitata in base alla quota per il processo corrente. Questo parametro può essere impostato su TRUE solo dai driver di livello più alto chiamati nel contesto del thread che ha origine la richiesta di I/O per cui il driver sta allocando un altro IRP. I driver intermedi devono impostare questo parametro su FALSE.

Valore restituito

IoAllocateIrpEx restituisce un puntatore all'IRP allocato e inizializzato oppure NULL se non è stato possibile allocare un IRP.

Commenti

IoAllocateIrpEx alloca le posizioni dello stack StackSize e inizializza l'IRP. Non associa l'IRP a un thread. Il driver di allocazione deve liberare l'IRP invece di completarlo al gestore di I/O.

Un driver intermedio o di livello più alto può chiamare IoAllocateIrpEx per creare irP per le richieste inviate ai driver di livello inferiore. Tale driver deve inizializzare l'IRP e deve impostare la routine di callback IoCompletion in IRP creata in modo che il chiamante possa eliminare l'IRP quando i driver di livello inferiore hanno completato l'elaborazione della richiesta. IoAllocateIrp inizializza automaticamente i membri di IRP. Non usare IoInitializeIrp per inizializzare l'IRP prima del primo utilizzo. È possibile usare IoInitializeIrp per riutilizzare un IRP già usato in determinate circostanze speciali. Per informazioni dettagliate, vedere Riutilizzo dei runtime di integrazione . Un driver intermedio o di livello più alto può anche chiamare IoBuildDeviceIoControlRequest, IoBuildAsynchronousFsdRequest o IoBuildSynchronousFsdRequest per configurare le richieste inviate ai driver di livello inferiore. Solo un driver di livello più alto può chiamare IoMakeAssociatedIrp.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 10 (versione 1507)
Piattaforma di destinazione Universale
Intestazione wdm.h (include wdm.h, ntddk.h, ntifs.h)
Libreria ntoskrnl.lib
DLL ntoskrnl.exe
IRQL <= DISPATCH_LEVEL

Vedi anche

IO_STACK_LOCATION

IRP

IoAllocateIrp

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoCompletion

IoBuildSynchronousFsdRequest

IoFreeIrp

IoMakeAssociatedIrp

IoReuseIrp

IoSetCompletionRoutine