Partager via


Réutilisation d’objets de transaction DMA

[S’applique à KMDF uniquement]

Une fois qu’un pilote a traite tous les transferts DMA associés à une transaction DMA, il peut supprimer ou réutiliser l’objet de transaction. En règle générale, la fonction de rappel EvtInterruptDpc du pilote supprime l’objet transaction (en appelant WdfObjectDelete). Par la suite, lorsque le pilote crée une transaction DMA, il appelle WdfDmaTransactionCreate pour créer un objet de transaction.

Toutefois, il est parfois avantageux pour le pilote de réutiliser des objets transactionnels. Dans ce cas, le pilote appelle WdfDmaTransactionRelease au lieu de WdfObjectDelete.

Par exemple, supposons que votre pilote et votre appareil doivent fonctionner lorsque les ressources mémoire de l’ordinateur sont faibles. Pour gérer ce problème de mémoire, votre pilote peut utiliser la procédure suivante :

  1. La fonction de rappel EvtDriverDeviceAdd du pilote peut appeler WdfDmaTransactionCreate pour créer un ou plusieurs objets transactionnels. Le pilote enregistre les handles dans ces objets de transaction.

  2. Chaque fois que le pilote est prêt à créer et initialiser une nouvelle transaction, il appelle WdfDmaTransactionCreate. Si cette méthode retourne STATUS_INSUFFICIENT_RESOURCES, le pilote peut utiliser l’un des objets de transaction stockés.

  3. Si le pilote utilise l’un de ses objets transaction stockés, il doit réutiliser l’objet de transaction, au lieu de le supprimer, une fois la transaction terminée. Le pilote configure l’objet transaction pour la réutilisation en appelant WdfDmaTransactionRelease au lieu de WdfObjectDelete.

L’exemple PLX9x5x réutilise des objets transactionnels DMA.