Fonction IoStartNextPacket (wdm.h)
La routine IoStartNextPacket supprime la file d’attente d’IRP suivante, le cas échéant, de la file d’attente d’appareils associée à l’objet d’appareil donné et appelle la routine StartIo du pilote.
Syntaxe
void IoStartNextPacket(
[in] PDEVICE_OBJECT DeviceObject,
[in] BOOLEAN Cancelable
);
Paramètres
[in] DeviceObject
Pointeur vers l’objet d’appareil pour lequel l’IRP doit être mis en file d’attente.
[in] Cancelable
Spécifie si les IRP dans la file d’attente d’appareils peuvent être annulés.
Valeur de retour
None
Remarques
Si aucun IRP n’est actuellement dans la file d’attente de l’appareil pour l’objet DeviceObject cible, cette routine renvoie simplement le contrôle à l’appelant.
Si le pilote a passé un pointeur vers une routine d’annulation lorsqu’il a appelé IoStartPacket, il doit passer TRUE dans le paramètre Cancelable . Si Cancelable a la valeur TRUE, le gestionnaire d’E/S utilise le verrouillage de rotation d’annulation pour protéger la file d’attente de l’appareil et l’IRP actuel.
Les pilotes qui n’ont pas de routine StartIo ne peuvent pas appeler IoStartNextPacket.
Les pilotes qui appellent IoStartNextPacket à partir de leur routine StartIo doivent être conscients des problèmes de récursivité. Si un pilote peut appeler IoStartNextPacket sur un grand nombre de demandes successives à partir de sa routine StartIo (par exemple, lorsqu’une erreur d’appareil se produit et que le pilote efface la file d’attente de l’appareil), vous devez définir l’attribut DeferredStartIo pour l’appareil à l’aide de la routine IoSetStartIoAttributes . Cet attribut garantit que le paquet suivant n’est pas émis tant que l’appel StartIo précédent n’est pas retourné.
Les appelants d’IoStartNextPacket doivent s’exécuter sur IRQL = DISPATCH_LEVEL. En règle générale, cette routine est appelée à partir de la routine DpcForIsr ou CustomDpc d’un pilote de périphérique, qui sont toutes deux exécutées dans IRQL = DISPATCH_LEVEL.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible à partir de Windows 2000. |
Plateforme cible | Universal |
En-tête | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | DISPATCH_LEVEL (voir la section Remarques) |
Règles de conformité DDI | HwStorPortProhibitedDDIs(storport), IrqlDispatch(storport), IrqlDispatch(storport), IrqlDispatch(wdm), SpinLockSafe(storport), SpinLockSafe(storport), SpinLockSafe(wdm), StartIoRecursion(wdm) |