Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Tout pilote de niveau supérieur peut avoir une routine StartIo . Toutefois, un tel pilote est peu susceptible d’être interopérable avec les conducteurs de niveau inférieur existants et est susceptible d’présenter des caractéristiques de performances médiocres.
Une routine StartIo dans un pilote de niveau supérieur a les effets suivants :
Les irps entrantes peuvent être mises en file d’attente en appelant IoStartPacket à partir de la ou des routines DispatchXxx du pilote et IoStartNextPacket à partir de ses routines IoCompletion , ce qui entraîne le traitement d’irPs un par un par le biais de la routine StartIo .
Le débit d’E/S du pilote peut devenir sensiblement plus lent pendant les périodes de forte demande d’E/S, car sa routine StartIo peut devenir un goulot d’étranglement.
La routine StartIo du pilote appelle IoCallDriver avec chaque IRP à IRQL = DISPATCH_LEVEL, ce qui entraîne l’exécution de toutes les routines de répartition des pilotes de niveau inférieur également à IRQL = DISPATCH_LEVEL. Cela limite l’ensemble de routines de support que les pilotes inférieurs peuvent appeler dans leurs routines de répartition. Étant donné que la plupart des auteurs de pilotes supposent que les routines de distribution de leurs pilotes s'exécutent au niveau IRQL < DISPATCH_LEVEL, le pilote de niveau supérieur est peu susceptible d'être interopérable avec de nombreux pilotes de niveau inférieur existants.
La routine StartIo réduit le débit du système global, car elle et les routines de répartition de tous les pilotes de niveau inférieur de sa chaîne sont exécutées à IRQL = DISPATCH_LEVEL.
Pour plus d’informations sur les IRQL sur lesquels les routines de pilotes standard sont exécutées, consultez Gestion des priorités matérielles.
Aucun des pilotes de niveau supérieur fourni par le système n’a de routine StartIo , car il peut ralentir le traitement IRP pour le pilote lui-même, pour tous les pilotes ci-dessus et en dessous, et pour le système global.
La plupart des pilotes de niveau supérieur envoient simplement des IRPs à des pilotes de niveau inférieur à partir de leurs routines de répartition et effectuent tout traitement de nettoyage nécessaire dans leurs routines IoCompletion .
Toutefois, les pilotes de niveau supérieur peuvent configurer des files d’attente internes pour les IRPs qui demandent des types d’opérations particuliers, ou configurer des files d’attente internes pour contenir des IRPs destinées à un ensemble d’appareils sous-jacents hétérogènes comme le pilote de port SCSI. Pour plus d'informations, consultez les files d'attente et la sortie des IRPs.