Partager via


Quel type de DPC devez-vous utiliser ?

Selon la conception d’un pilote, il peut avoir l’un des éléments suivants :

  • Un seul DpcForIsr pour effectuer toutes les opérations d’E/S pilotées par interruption

  • Ensemble d’une ou plusieurs routines CustomDpc .

  • À la fois un DpcForIsr et un ensemble de routines CustomDpc spécifiques à l’opération

Si un pilote a une seule routine DpcForIsr , un ensemble de routines CustomDpc ou les deux, dépend de la nature de son appareil sous-jacent et de l’ensemble de demandes d’E/S qu’il doit prendre en charge.

La plupart des pilotes de périphérique de niveau le plus bas ont une seule routine DpcForIsr pour terminer le traitement des E/S pour chaque IRP qui nécessite une ou plusieurs opérations sur leurs appareils respectifs. L’utilisation d’un seul DpcForIsr pour effectuer des opérations d’E/S pilotées par interruption sur un appareil qui effectue une opération à la fois est relativement facile. L’ISR d’un tel pilote doit uniquement appeler IoRequestDpc pour chaque opération d’E/S pilotée par interruption.

Peu de pilotes de niveau inférieur ont des routines CustomDpc , sauf si leurs appareils nécessitent plusieurs DPC pour effectuer un ensemble varié d’opérations d’E/S pilotées par interruption.

L’utilisation d’un seul DpcForIsr pour effectuer des opérations d’E/S qui se chevauchent et pilotées par les interruptions sur un appareil qui peut effectuer des opérations simultanées est possible avec une conception soignée, mais peut être relativement difficile. En plus de ou au lieu de mettre en file d’attente un DpcForIsr, un ISR peut mettre en file d’attente un ensemble de routines CustomDpc fournies par le pilote spécifiques à l’opération en appelant KeInsertQueueDpc.

Par exemple, considérez certains des défis de conception impliqués dans l’écriture d’un pilote série. En tant que pilote d’un appareil full-duplex, un pilote série ne peut pas s’appuyer sur une correspondance un-à-un entre l’ordre dans lequel les IIP sont mis en file d’attente vers une routine StartIo et la séquence d’interruptions de son appareil dans un système multitâche et multiprocesseur. En outre, les pilotes série doivent gérer les demandes de délai d’attente et les demandes asynchrones générées par l’utilisateur pour annuler les opérations précédemment demandées, pour vider les données mises en mémoire tampon, etc.

Par conséquent, un pilote série peut gérer des files d’attente internes pour les opérations de lecture, d’écriture, de purge et d’attente que les applications de port COM en mode utilisateur peuvent demander. Il peut également maintenir le nombre de références ou utiliser un autre mécanisme de suivi, tel qu’un ensemble d’indicateurs, pour les IRP dans ses files d’attente internes. Son ISR appelle KeInsertQueueDpc avec un certain nombre d’objets DPC alloués et initialisés par le pilote, chacun associé à une routine CustomDpc fournie par le pilote.