Condividi tramite


Funzione IoAllocateIrp (wdm.h)

La routine IoAllocateIrp alloca un IRP, dato il numero di percorsi dello stack di I/O per ogni driver a più 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 percorsi dello stack di I/O da allocare per l'IRP. Questo valore deve essere almeno uguale al 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.

[in] ChargeQuota

Impostando questa opzione su TRUE, la memoria allocata per l'IRP verrà addebitata in base alla quota per il processo corrente. Deve essere impostato su FALSE da driver intermedi. 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.

Valore restituito

IoAllocateIrp restituisce un puntatore a un IRP, allocato dallo spazio di sistema non di paging o null se non è stato possibile allocare un'istanza di IRP.

Osservazioni

La routine IoAllocateIrp 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 IoAllocateIrp per creare i runtime di integrazione per le richieste inviate a driver di livello inferiore. Tale driver deve inizializzare l'IRP e deve impostarne routine IoCompletion nell'IRP che crea 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 di IRP.

Un driver intermedio o di livello più alto può anche chiamare IoBuildDeviceIoControlRequest, IoBuildAsynchronousFsdRequest o IoBuildSynchronousFsdRequest per configurare le richieste inviate a driver di livello inferiore. Solo un driver di livello più alto può chiamare IoMakeAssociatedIrp.

Fabbisogno

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), HwStorPortProhibitedDDDIs(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)

Vedere anche

IO_STACK_LOCATION

IRP

IoAllocateIrpEx

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoFreeIrp

IoMakeAssociatedIrp

IoReuseIrp

IoSetCompletionRoutine