Prévention d’un déséquilibre de la création et de la fermeture des notifications à un pilote

Avertissement

UMDF 2 est la dernière version d’UMDF et remplace UMDF 1. Tous les nouveaux pilotes UMDF doivent être écrits à l’aide d’UMDF 2. Aucune nouvelle fonctionnalité n’est ajoutée à UMDF 1 et la prise en charge d’UMDF 1 est limitée sur les versions plus récentes de Windows 10. Les pilotes Windows universels doivent utiliser UMDF 2.

Les exemples UMDF 1 archivés se trouvent dans la Windows 11, version 22H2 - Mise à jour des exemples de pilotes de mai 2022.

Pour plus d’informations, consultez Prise en main avec UMDF.

Un pilote UMDF supérieur peut utiliser la méthode IWDFDeviceInitialize::AutoForwardCreateCleanupClose pour contrôler quand l’infrastructure transfère automatiquement les notifications create-file, cleanup-file et close-file vers le pilote inférieur suivant dans la pile d’appareils. Toutefois, étant donné que le pilote supérieur définit AutoForwardCreateCleanupClose pour transférer automatiquement uniquement au niveau de l’appareil et non au niveau par fichier, le transfert doit être le même pour tous les fichiers d’un appareil. L’infrastructure garantit ce comportement de transfert pour les notifications de fichier de nettoyage et de fermeture de fichier. Si le pilote supérieur implémente la fonction de rappel IQueueCallbackCreate::OnCreateFile , il doit s’assurer que son comportement de transfert est le même pour toutes les demandes de création de fichier et qu’il est cohérent avec le comportement de transfert pour les notifications de nettoyage de fichier et de fermeture de fichier. Si vous ne le faites pas, les pilotes inférieurs peuvent recevoir un nombre inégaux d’appels à leurs méthodes IQueueCallbackCreate::OnCreateFile et IFileCallbackCleanup::OnCleanupFile et IFileCallbackClose::OnCloseFile .

Pour empêcher les pilotes inférieurs de recevoir un nombre inégaux de notifications de création de fichier et de fermeture de fichier, le pilote supérieur doit s’assurer, dans sa fonction de rappel IQueueCallbackCreate::OnCreateFile , que :

  • Son comportement de transfert est le même pour tous les fichiers d’un appareil.

  • Son comportement de transfert est cohérent avec la façon dont il définit le paramètre d’indicateur de IWDFDeviceInitialize::AutoForwardCreateCleanupClose. Plus précisément :

    • Si le pilote définit l’indicateur sur WdfTrue, il doit transférer toutes les demandes de fichier de création vers le bas de la pile d’appareils.
    • Si le pilote a défini l’indicateur sur WdfFalse, il ne doit pas transférer les demandes de fichier de création dans la pile.
    • Si le pilote définit l’indicateur sur WdfUseDefault et :
      • Si le pilote est un pilote de fonction, il ne doit pas transférer de demandes de fichier de création dans la pile.
      • Si le pilote est un pilote de filtre, il doit transférer toutes les demandes de fichier de création dans la pile.

Dans les situations où le pilote ne peut pas transférer une requête create-file, le pilote peut toujours générer une nouvelle demande de fichier de création pour les pilotes inférieurs en appelant la méthode IWDFDevice::CreateWdfFile pour créer un fichier WDF. Le pilote peut ensuite terminer la demande de création de fichier d’origine en fonction des résultats de la demande de création de fichier nouvellement générée (c’est-à-dire à partir des résultats de CreateWdfFile).