Freigeben über


IoAllocateIrpEx-Funktion (wdm.h)

IoAllocateIrpEx weist einen IRP aus dem systemfreien Pool zu, möglicherweise mit einer IRP-Erweiterung.

Syntax

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

Parameter

DeviceObject

Zeiger auf das Geräteobjekt, um zu überprüfen, ob Speicherplatz für eine IRP-Erweiterung hinzugefügt werden soll. Wenn DeviceObject auf DEVICE_WITH_IRP_EXTENSION festgelegt ist, wird auch Speicherplatz für die IRP-Erweiterung zugewiesen.

StackSize

Maximale Anzahl von Stapelspeicherorten, die für die IRP zugewiesen werden sollen. StackSize muss mindestens gleich dem StackSize des Geräteobjekts des nächstniedrigen Treibers sein, kann jedoch einen größer als dieser Wert sein. Der aufrufende Treiber muss keinen Stapelspeicherort im IRP für sich selbst zuordnen.

ChargeQuota

Wenn ChargeQuota auf TRUE festgelegt wird, wird der für die IRP zugewiesene Arbeitsspeicher mit dem Kontingent für den aktuellen Prozess in Rechnung gestellt. Dieser Parameter kann nur von den Treibern der höchsten Ebene true festgelegt werden, die im Kontext des Threads aufgerufen werden, der die E/A-Anforderung entspringt, für die der Treiber eine andere IRP zuschreibt. Zwischentreiber sollten diesen Parameter auf FALSE festlegen.

Rückgabewert

IoAllocateIrpEx gibt einen Zeiger auf die zugewiesene und initialisierte IRP oder NULL zurück, wenn ein IRP nicht zugeordnet werden konnte.

Hinweise

IoAllocateIrpEx weist StackSize-Stapelspeicherorte zu und initialisiert die IRP. Der IRP wird keinem Thread zugeordnet. Der Zuweisungstreiber muss die IRP freigeben, anstatt sie an den E/A-Manager zurückzustellen.

Ein Treiber auf mittlerer oder höchster Ebene kann IoAllocateIrpEx aufrufen, um IRPs für Anforderungen zu erstellen, die er an Treiber auf niedrigerer Ebene sendet. Ein solcher Treiber muss den IRP initialisieren und seine IoCompletion-Rückrufroutine in der von ihm erstellten IRP festlegen, damit der Aufrufer die IRP verwerfen kann, wenn treiber auf niedrigerer Ebene die Verarbeitung der Anforderung abgeschlossen haben. IoAllocateIrp initialisiert automatisch die Mitglieder des IRP. Verwenden Sie IoInitializeIrp nicht, um das IRP vor seiner ersten Verwendung zu initialisieren. (Sie können IoInitializeIrp verwenden, um einen IRP wiederzuverwenden, den Sie unter bestimmten besonderen Umständen bereits verwendet haben. Weitere Informationen finden Sie unter Wiederverwendung von IRPs .) Ein Treiber auf mittlerer oder höchster Ebene kann auch IoBuildDeviceIoControlRequest, IoBuildAsynchronousFsdRequest oder IoBuildSynchronousFsdRequest aufrufen, um Anforderungen einzurichten, die an Treiber auf niedrigerer Ebene gesendet werden. Nur ein Treiber der höchsten Ebene kann IoMakeAssociatedIrp aufrufen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 10 (Version 1507)
Zielplattform Universell
Header wdm.h (include wdm.h, ntddk.h, ntifs.h)
Bibliothek ntoskrnl.lib
DLL ntoskrnl.exe
IRQL <= DISPATCH_LEVEL

Weitere Informationen

IO_STACK_LOCATION

IRP

IoAllocateIrp

IoBuildAsynchronfsdRequest

IoBuildDeviceIoControlRequest

IoCompletion

IoBuildSynchronousFsdRequest

IoFreeIrp

IoMakeAssociatedIrp

IoReuseIrp

IoSetCompletionRoutine