Freigeben über


IoAllocateIrp-Funktion (wdm.h)

Die IoAllocateIrp- Routine weist ein IRP zu, wobei die Anzahl der I/O-Stapelstandorte für jeden Treiber, der unter dem Aufrufer angeordnet ist, und optional für den Anrufer zugewiesen wird. Siehe auch IoAllocateIrpEx.

Syntax

PIRP IoAllocateIrp(
  [in] CCHAR   StackSize,
  [in] BOOLEAN ChargeQuota
);

Parameter

[in] StackSize

Gibt die Anzahl der I/O-Stapelspeicherorte an, die für das IRP zugewiesen werden sollen. Dieser Wert muss mindestens dem StackSize- des Geräteobjekts des nächsten niedrigeren Treibers entsprechen, kann jedoch einen größer sein als dieser Wert. Der aufrufende Treiber muss keinen Stapelstandort im IRP selbst zuordnen.

[in] ChargeQuota

Wenn Sie diesen Wert auf TRUE festlegen bewirkt, dass der für das IRP zugewiesene Speicher dem Kontingent für den aktuellen Prozess in Rechnung gestellt wird. Sollte auf FALSE- durch Zwischentreiber festgelegt werden. Dies kann auf TRUE- nur durch Treiber 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.

Rückgabewert

IoAllocateIrp einen Zeiger auf einen IRP zurück, der aus nicht seitenseitigem Systembereich zugewiesen wurde, oder NULL-, wenn ein IRP nicht zugeordnet werden konnte.

Bemerkungen

Die IoAllocateIrp Routine ordnet das IRP keinem Thread zu. 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 IoAllocateIrp- 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 Routine im 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 unter bestimmten besonderen Umständen bereits 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 an Treiber niedrigerer Ebene gesendet werden. Nur ein Treiber der höchsten Ebene kann IoMakeAssociatedIrpaufrufen.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Ab Windows 2000 verfügbar.
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <= DISPATCH_LEVEL
DDI-Complianceregeln ForwardedAtBadIrqlAllocate(wdm), HwStorPortProhibitedDIs(storport), IoAllocateComplete(wdm), IoAllocateForward(wdm), IoAllocateFree(wdm), IoAllocateIrpSignalEventInCompletion(wdm), IoAllocateIrpSignalEventInCompletion2(wdm), IoAllocateIrpSignalEventInCompletion3(wdm), IoAllocateIrpSignalSignal, IoFreeIrp(storport), IoReuseIrp(wdm), MarkPower(wdm), MarkPowerDown(wdm), MarkQueryRelations(wdm), MarkStartDevice(wdm), SpNoWait(storport), StorPortStartIo(storport)

Siehe auch

IO_STACK_LOCATION

IRP-

IoAllocateIrpEx-

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoFreeIrp-

IoMakeAssociatedIrp-

IoReuseIrp

IoSetCompletionRoutine-