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) |