Funzione IoAllocateIrp (wdm.h)
La routine IoAllocateIrp alloca un'IRP , dato il numero di posizioni dello stack di I/O per ogni driver a livelli sotto il chiamante e, facoltativamente, per il chiamante. Vedere anche IoAllocateIrpEx.
Sintassi
PIRP IoAllocateIrp(
[in] CCHAR StackSize,
[in] BOOLEAN ChargeQuota
);
Parametri
[in] StackSize
Specifica il numero di posizioni dello stack di I/O da allocare per l'IRP. Questo valore deve essere almeno uguale a StackSize dell'oggetto dispositivo del driver inferiore successivo, ma può essere uno maggiore di questo valore. Il driver chiamante non deve allocare una posizione dello stack nell'IRP stessa.
[in] ChargeQuota
Se si imposta su TRUE , la memoria allocata per l'IRP deve essere addebitata rispetto alla quota per il processo corrente. Deve essere impostato su FALSE per driver intermedi. Questa opzione può essere impostata 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.
Valore restituito
IoAllocateIrp restituisce un puntatore a un'istanza di IRP, allocata dallo spazio di sistema non di pagina o NULL se non è stato possibile allocare un'istanza di IRP.
Commenti
La routine IoAllocateIrp non associa l'IRP a un thread. Il driver di allocazione deve liberare l'IRP anziché completarlo al gestore di I/O.
Un driver intermedio o di livello più alto può chiamare IoAllocateIrp per creare irP per le richieste inviate ai driver di livello inferiore. Tale driver deve inizializzare l'IRP e deve impostare la routine IoCompletion nell'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 uso. È possibile usare IoInitializeIrp per riutilizzare un'IRP già usata in determinate circostanze speciali. Per informazioni dettagliate, vedere Riutilizzo di IRP .
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 2000. |
Piattaforma di destinazione | Universale |
Intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Libreria | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
Regole di conformità DDI | ForwardedAtBadIrqlAllocate(wdm), HwStorPortProhibitedDDIs(storport), IoAllocateComplete(wdm), IoAllocateForward(wdm), IoAllocateFree(wdm), IoAllocateIrpSignalEventInCompletion(wdm), IoAllocateIrpSignalEventInCompletion2 (wdm), IoAllocateIrpSignalEventInCompletion3(wdm), IoAllocatecaterpSignalEventInCompletionTimeout(wdm), IoFreeIrp(storport), IoReuseIrp(wdm), MarkPower(wdm), MarkPowerDown(wdm), MarkQueryRelations(wdm), MarkStartDevice(wdm), SpNoWait(storport), StorPortStartIo(storport) |