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 |