Condividi tramite


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)

Vedi anche

IO_STACK_LOCATION

IRP

IoAllocateIrpEx

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoFreeIrp

IoMakeAssociatedIrp

IoReuseIrp

IoSetCompletionRoutine