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.
Gardez à l’esprit les points suivants lors de l’implémentation d’une routine StartIo :
Une routine StartIo doit synchroniser son accès à un appareil physique et à toutes les informations d’état ou ressources partagées que le pilote gère dans l’extension de périphérique avec les autres routines du pilote qui accèdent au même périphérique, à l’emplacement de mémoire ou aux ressources.
Si la routine StartIo partage l’appareil ou l’état avec l’ISR, elle doit utiliser KeSynchronizeExecution pour appeler une routine SynchCritSection fournie par le pilote pour programmer l’appareil ou accéder à l’état partagé. Pour plus d’informations, consultez Utilisation des sections critiques.
Si la routine StartIo partage l’état ou les ressources avec des routines autres que l’ISR, elle doit protéger l’état ou les ressources partagés avec un verrou de rotation exécutif initialisé pour lequel le pilote fournit le stockage. Pour plus d’informations, consultez Verrous à rotation.
Si un pilote de périphérique non WDM monolithique configure un objet de contrôleur, sa routine StartIo peut utiliser l’objet contrôleur pour synchroniser les opérations via un appareil physique partagé avec des appareils attachés (similaires).
Pour plus d’informations, consultez Objets de contrôleur .
À moins qu’un pilote de niveau supérieur étroitement couplé ne pré-scinde de grandes demandes de transfert DMA pour son pilote de périphérique sous-jacent, la routine StartIo du pilote de périphérique sous-jacent doit fractionner les demandes de transfert volumineuses en parties de transfert, et le pilote doit effectuer une séquence d’opérations de transfert partielles. Chaque transfert partiel doit être dimensionné pour répondre aux fonctionnalités du matériel : les fonctionnalités de l’appareil du pilote ou, pour un périphérique DMA subordonné, les fonctionnalités du contrôleur DMA système, selon les contraintes plus strictes.
Pour plus d’informations sur l’utilisation du DMA système ou du bus-master, consultez Objets adaptateurs et DMA.
La routine StartIo d’un pilote qui utilise DMA doit synchroniser les transferts à l’aide d’un objet adaptateur.
Une routine StartIo est exécutée à IRQL = DISPATCH_LEVEL, ce qui limite l’ensemble des routines de support qu’elle peut appeler.
Par exemple, une routine StartIo ne peut ni accéder ni allouer de mémoire paginable, et elle ne peut pas attendre qu’un objet de répartiteur soit défini sur l’état signalé. En revanche, une routine StartIo peut acquérir et libérer un verrou exécutif alloué par le pilote avec KeAcquireSpinLockAtDpcLevel et KeReleaseSpinLockFromDpcLevel, qui s’exécutent plus rapidement que KeAcquireSpinLock et KeReleaseSpinLock.
Pour plus d’informations, consultez Gestion des priorités matérielles et des verrous de rotation .
Si le pilote maintient les IRP dans un état annulable, sa routine StartIo doit vérifier si l’IRP d’entrée a déjà été annulé avant de commencer à traiter cette demande sur son périphérique. Pour plus d’informations, consultez Canceling IRPs.