Freigeben über


IoStartNextPacket-Funktion (ntifs.h)

Die IoStartNextPacket-Routine entfernt ggf. die nächste IRP aus der zugeordneten Gerätewarteschlange des jeweiligen Geräteobjekts und ruft die StartIo-Routine des Treibers auf.

Syntax

void IoStartNextPacket(
  [in] PDEVICE_OBJECT DeviceObject,
  [in] BOOLEAN        Cancelable
);

Parameter

[in] DeviceObject

Zeiger auf das Geräteobjekt, für das die IRP entfernt werden soll.

[in] Cancelable

Gibt an, ob IRPs in der Gerätewarteschlange abgebrochen werden können.

Rückgabewert

Keine

Bemerkungen

Wenn sich derzeit keine IRPs in der Gerätewarteschlange für das Ziel-DeviceObject befinden, gibt diese Routine einfach die Steuerung an den Aufrufer zurück.

Wenn der Treiber beim Aufrufen von IoStartPacket einen Zeiger auf eine Abbruchroutine übergeben hat, sollte er true im Cancelable-Parameter dieser Routine übergeben. Wenn Cancelable AUF TRUE festgelegt ist, verwendet der E/A-Manager die Abbruch-Drehsperre, um die Gerätewarteschlange und die aktuelle IRP zu schützen.

Treiber ohne StartIo-Routine können IoStartNextPacket nicht aufrufen.

Treiber, die IoStartNextPacket aus ihrer StartIo-Routine aufrufen, sollten sich der Rekursionsprobleme bewusst sein. Wenn ein Treiber IoStartNextPacket für eine große Anzahl von Anforderungen nacheinander aus seiner StartIo-Routine aufrufen kann (z. B. wenn ein Gerätefehler auftritt und der Treiber die Gerätewarteschlange entfernt), sollten Sie das DeferredStartIo-Attribut für das Gerät mithilfe der IoSetStartIoAttributes-Routine festlegen. Dieses Attribut stellt sicher, dass das nächste Paket erst ausgegeben wird, wenn der vorherige StartIo-Aufruf zurückgegeben wird.

Aufrufer von IoStartNextPacket müssen unter IRQL = DISPATCH_LEVEL ausgeführt werden. Normalerweise wird diese Routine aus der DpcForIsr - oder CustomDpc-Routine eines Gerätetreibers aufgerufen, die beide mit IRQL = DISPATCH_LEVEL ausgeführt werden.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000
Zielplattform Universell
Header ntifs.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL DISPATCH_LEVEL (siehe Abschnitt "Hinweise")
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IrqlDispatch(storport), IrqlDispatch(storport), IrqlDispatch(wdm), SpinLockSafe(storport), SpinLockSafe(storport), SpinLockSafe(wdm), StartIoRecursion(wdm)

Weitere Informationen

DEVICE_OBJECT

IoSetStartIoAttributes

IoStartNextPacketByKey

IoStartPacket