IoStartNextPacket-Funktion (wdm.h)
Die IoStartNextPacket-Routine entfernt die nächste IRP(sofern vorhanden) 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 das IRP dequeuiert 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 DeviceObject-Ziel befinden, gibt diese Routine einfach die Steuerung an den Aufrufer zurück.
Wenn der Treiber beim Namen IoStartPacket einen Zeiger auf eine Abbruchroutine übergeben hat, sollte er TRUE im Cancelable-Parameter übergeben. Wenn Cancelable TRUE 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 auslöscht), 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ückgibt.
Aufrufer von IoStartNextPacket müssen unter IRQL = DISPATCH_LEVEL ausgeführt werden. Normalerweise wird diese Routine von 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) | Verfügbar ab Windows 2000. |
Zielplattform | Universell |
Header | wdm.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) |