Partager via


Fonction IoStartNextPacket (wdm.h)

La routine IoStartNextPacket met en file d’attente l’IRP suivante, le cas échéant, à partir 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 fournisseurs d’intégration dans la file d’attente de l’appareil peuvent être annulés.

Valeur de retour

Aucun

Remarques

S’il n’y a pas d’IRPs actuellement dans la file d’attente de l’appareil pour la cible DeviceObject, cette routine retourne simplement le contrôle à l’appelant.

Si le pilote a passé un pointeur à une routine d’annulation lorsqu’il a appelé IoStartPacket, il doit passer TRUE dans le paramètre Cancelable. Si annulable est TRUE, le gestionnaire d’E/S utilise le verrou 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 requêtes consécutives à partir de sa routine StartIo (par exemple, lorsqu’une erreur d’appareil se produit et que le pilote efface sa file d’attente d’appareils), vous devez définir l’attribut DeferredStartIo pour l’appareil à l’aide de IoSetStartIoAttributes routine. 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 de IoStartNextPacket doivent s’exécuter à IRQL = DISPATCH_LEVEL. Généralement, cette routine est appelée à partir du DpcForIsr d’un pilote de périphérique ou routine CustomDpc, qui sont exécutées à IRQL = DISPATCH_LEVEL.

Exigences

Exigence Valeur
client minimum pris en charge Disponible à partir de Windows 2000.
plateforme cible Universel
d’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(wd, SpinLockSafe(storport), SpinLockSafe(storport), SpinLockSafe(wdm), StartIoRecursion(wdm)

Voir aussi

DEVICE_OBJECT

IoSetStartIoAttributes

ioStartNextPacketByKey

IoStartPacket