Freigeben über


IoAllocateIrpEx-Funktion (wdm.h)

IoAllocateIrpEx ein IRP aus dem systemfremden Pool zuordnet, möglicherweise mit einer IRP-Erweiterung.

Syntax

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

Parameter

DeviceObject

Zeigen Sie auf das Geräteobjekt, um zu ermitteln, ob Platz 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 das IRP zugewiesen werden sollen. StackSize- muss mindestens dem StackSize- des Geräteobjekts des nächsten niedrigeren Treibers entsprechen, kann jedoch einen größer als dieser Wert sein. Der aufrufende Treiber muss keinen Stapelstandort im IRP selbst zuordnen.

ChargeQuota

Wenn sie ChargeQuota- auf TRUE festlegen, wird der für das IRP zugewiesene Speicher für das Kontingent für den aktuellen Prozess in Rechnung gestellt. Dieser Parameter kann TRUE- nur von den Treibern der höchsten Ebene festgelegt werden, die im Kontext des Threads aufgerufen werden, der die E/A-Anforderung stammt, für die der Treiber ein anderes IRP angibt. Zwischentreiber sollten diesen Parameter auf FALSE-festlegen.

Rückgabewert

IoAllocateIrpEx gibt einen Zeiger auf den zugewiesenen und initialisierten IRP zurück oder NULL-, wenn kein IRP zugewiesen werden konnte.

Bemerkungen

IoAllocateIrpEx weist StackSize Stapelspeicherorte zu und initialisiert das IRP. Der IRP wird keinem Thread zugeordnet. Der zugewiesene Treiber muss das IRP freigeben, anstatt ihn wieder an den I/O-Manager zu senden.

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

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar ab Windows 10 (Version 1507)
Zielplattform- Universal
Header- wdm.h (include wdm.h, ntddk.h, ntifs.h)
Library ntoskrnl.lib
DLL- ntoskrnl.exe
IRQL- <= DISPATCH_LEVEL

Siehe auch

IO_STACK_LOCATION

IRP-

IoAllocateIrp-

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoCompletion-

IoBuildSynchronousFsdRequest

IoFreeIrp-

IoMakeAssociatedIrp-

IoReuseIrp

IoSetCompletionRoutine-