Contrôle de l’accès des appareils dans les pilotes KMDF

Les pilotes doivent aider à empêcher les utilisateurs d’accéder de manière inappropriée aux appareils et fichiers d’un ordinateur. Pour empêcher l’accès non autorisé aux appareils et aux fichiers, vous devez :

  • Nommez les objets d’appareil uniquement si nécessaire.

  • Fournir des descripteurs de sécurité pour les objets et interfaces d’appareil.

Nommage des objets d’appareil uniquement si nécessaire

Comme la plupart des pilotes WDM (Windows Driver Model), les pilotes basés sur l’infrastructure ne nomment généralement pas leurs objets d’appareil. Les applications peuvent accéder à un appareil en spécifiant un nom d’objet d’appareil, de sorte que chaque nom d’objet d’appareil supplémentaire représente un chemin d’accès supplémentaire qu’une application peut utiliser pour accéder à l’appareil.

Pour empêcher l’accès non autorisé à un appareil, chaque pilote peut spécifier un descripteur de sécurité lorsqu’il nomme un objet d’appareil. Toutefois, le nom de fichier fourni par le système d’exploitation à un pilote (voir WdfFileObjectGetFileName) n’inclut pas le nom de l’objet d’appareil utilisé par l’application. Par conséquent, si plusieurs pilotes de la pile de votre pilote fournissent des noms pour leurs objets d’appareil, celui-ci ne peut pas déterminer le nom d’objet utilisé par l’application pour ouvrir l’appareil. Par conséquent, une application peut ouvrir l’appareil avec un descripteur de sécurité moins restrictif que ce que votre pilote attend.

Les objets d’appareil physique (PDO) doivent avoir des noms. En règle générale, les pilotes de bus basés sur l’infrastructure ne spécifient pas de nom pour un PDO, car le framework (par défaut) demande au système d’exploitation de générer un nom.

D’autre part, un pilote basé sur l’infrastructure peut attribuer un nom d’appareil à un objet d’appareil en appelant WdfDeviceInitAssignName. Un pilote doit nommer un objet d’appareil fonctionnel (FDO), un objet de périphérique de filtre (DO de filtre) ou un PDO uniquement si le pilote doit prendre en charge une application plus ancienne qui attend un nom d’appareil spécifique, ou si le pilote appartient à une pile de pilotes plus ancienne dont l’architecture nécessite des noms d’objets.

Au lieu de nommer les FDO et de filtrer les DO, les pilotes WDM et les pilotes basés sur l’infrastructure doivent fournir des interfaces d’appareil auxquelles les applications peuvent accéder. Le système d’exploitation obtient le descripteur de sécurité d’une interface d’appareil à partir du PDO de l’appareil et des entrées de Registre spécifiées par le fichier INF d’un package de pilotes. Un pilote de bus peut fournir des interfaces d’appareil pour un PDO si les périphériques du pilote fonctionnent en mode brut, sans pilote de fonction.

Certains pilotes doivent appeler WdfDeviceCreateSymbolicLink pour créer des noms de liens symboliques pour leurs appareils. Par exemple, un pilote peut créer un nom d’appareil MS-DOS si les applications s’attendent à voir un nom MS-DOS pour l’appareil. Si votre pilote crée un nom de lien symbolique pour un FDO ou un do de filtre sans nom, l’infrastructure associe le nom du lien symbolique au nom du PDO. (Les périphériques de contrôle ne sont pas associés à un AOP, de sorte que votre pilote ne peut pas créer un nom de lien symbolique pour un appareil de contrôle sans nom.)

Fourniture de descripteurs de sécurité pour les objets et interfaces d’appareil

Chaque objet d’appareil nommé doit avoir un descripteur de sécurité. Le système d’exploitation utilise le descripteur de sécurité de l’objet d’appareil pour déterminer les types d’utilisateurs autorisés à accéder à un appareil et à ses interfaces d’appareil. Les descripteurs de sécurité peuvent être attribués aux objets d’appareil en :

Par défaut, le système d’exploitation utilise également le descripteur de sécurité du PDO d’appareil pour déterminer les droits d’accès aux interfaces d’appareil qu’un pilote fournit.

Un package de pilotes peut fournir un fichier INF qui spécifie les descripteurs de sécurité d’un appareil avec une directive AddReg INF dans une section INF DDInstall.HW.

Pour plus d’informations sur la spécification des descripteurs de sécurité dans les fichiers INF, consultez Création d’installations d’appareils sécurisées.

Si votre pilote crée des PDO pour les appareils qui fonctionnent en mode brut, il doit spécifier une classe de configuration d’appareil lorsqu’il appelle WdfPdoInitAssignRawDevice. En outre, si votre pilote crée des appareils de contrôle, il peut appeler WdfDeviceInitSetDeviceClass pour spécifier une classe d’installation d’appareil. Dans ces deux cas, les administrateurs système peuvent utiliser la clé de Registre de la classe d’installation spécifiée pour stocker les descripteurs de sécurité pour l’appareil.

Pour plus d’informations sur la façon dont le système d’exploitation détermine le descripteur de sécurité à utiliser pour un appareil, consultez Contrôle de l’accès aux appareils.

Lorsque l’infrastructure crée un objet d’appareil, elle définit toujours l’indicateur FILE_DEVICE_SECURE_OPEN afin que le système d’exploitation case activée le descripteur de sécurité d’un appareil avant d’autoriser une application à accéder aux noms de l’espace de noms de l’appareil. Pour plus d’informations sur l’indicateur FILE_DEVICE_SECURE_OPEN et l’espace de noms d’appareil, consultez Contrôle de l’accès à l’espace de noms d’appareil.