Contrôle de l’accès à l’espace de noms de l’appareil
Dans le modèle de pilote Windows (WDM), chaque objet d’appareil a un espace de noms associé. Les noms de l’espace de noms de l’appareil sont des chemins qui commencent par le nom de l’appareil. Pour un appareil nommé « \Device\DeviceName », son espace de noms se compose de n’importe quel nom de la forme « \DeviceName\\FileName ». (Pour un système de fichiers, FileName est le nom réel d’un fichier sur le système de fichiers.)
Un pilote WDM reçoit des demandes ouvertes pour tous les noms de l’espace de noms de l’appareil. Le pilote traite une demande ouverte pour « \DeviceName\ » comme une ouverture de l’objet de périphérique lui-même. Si le pilote implémente la prise en charge des demandes ouvertes dans l’espace de noms de l’appareil, il traite une demande ouverte pour « \DeviceName\\FileName » comme une ouverture d’un « fichier » dans l’espace de noms de l’objet de l’appareil (où la notion de « fichier » pour l’appareil est déterminée par le pilote).
La plupart des pilotes n’implémentent pas la prise en charge des opérations ouvertes dans l’espace de noms de l’appareil, mais tous les pilotes doivent fournir des vérifications de sécurité pour empêcher tout accès non autorisé à l’espace de noms de l’appareil. Par défaut, les vérifications de sécurité pour les demandes d’ouverture de fichier dans l’espace de noms de l’appareil (par exemple, « \DeviceName\FileName\ ») sont entièrement laissées au pilote : l’ACL de l’objet de périphérique n’est pas vérifiée par le système d’exploitation.
Si la caractéristique FILE_DEVICE_SECURE_OPEN d’un objet d’appareil est définie, le système applique le descripteur de sécurité de l’objet d’appareil à toutes les demandes ouvertes de fichier dans l’espace de noms de l’appareil. Les pilotes peuvent définir FILE_DEVICE_SECURE_OPEN lorsqu’ils créent l’objet d’appareil avec IoCreateDevice ou IoCreateDeviceSecure. Pour les pilotes WDM, FILE_DEVICE_SECURE_OPEN peuvent également être définis dans le Registre. Il peut également être défini dans le Registre pour les objets d’appareil de pilotes non WDM créés par IoCreateDeviceSecure. Pour plus d’informations sur la définition des propriétés de l’objet d’appareil, telles que les caractéristiques de l’appareil, dans le Registre, consultez Définition des propriétés de l’objet d’appareil dans le Registre. Pour plus d’informations sur les caractéristiques de l’appareil, consultez Spécification des caractéristiques de l’appareil.
Les pilotes pour les appareils qui ne prennent pas en charge les espaces de noms doivent utiliser l’une des deux méthodes suivantes pour s’assurer que les demandes d’ouverture de fichier au sein de l’espace de noms de l’appareil sont gérées correctement :
Les objets de périphérique du pilote ont la FILE_DEVICE_SECURE_OPEN caractéristiques de périphérique définies. Le pilote peut ensuite traiter toute demande ouverte dans l’espace de noms de l’appareil comme une demande ouverte pour l’objet de périphérique.
Le pilote peut échouer à toutes les demandes IRP_MJ_CREATE qui spécifient un paramètre IrpSp-FileObject-FileName>> dont la longueur est différente de zéro. Dans ce cas, les demandes ouvertes pour l’appareil sont soumises à la case activée ACL du système, tandis que toutes les demandes d’ouverture de fichier au sein de l’espace de noms de l’appareil sont échouées par le pilote. (Les pilotes qui prennent en charge les ouvertures exclusives doivent utiliser cette option.)
Les pilotes pour les appareils qui prennent en charge les espaces de noms peuvent également utiliser deux méthodes pour sécuriser les demandes d’ouverture de fichiers dans l’espace de noms de l’appareil :
Les objets de périphérique du pilote ont la FILE_DEVICE_SECURE_OPEN caractéristiques de périphérique définies. Cela garantit que les paramètres de sécurité de l’appareil s’appliquent uniformément à l’espace de noms de l’appareil. (Le pilote est chargé d’implémenter la prise en charge de l’espace de noms dans sa fonction de rappel DRIVER_DISPATCH .)
Le pilote vérifie les listes de contrôle d’accès pour le nom de fichier dans sa routine DispatchCreate . (Même dans ce cas, le pilote doit définir la caractéristique FILE_DEVICE_SECURE_OPEN, sauf si s’ouvre dans l’espace de noms de l’appareil peut avoir des paramètres de sécurité plus faibles que l’objet de périphérique.)
La caractéristique FILE_DEVICE_SECURE_OPEN est vérifiée en haut de la pile. Les objets d’appareil de filtre doivent donc copier le membre Caractéristiques de l’objet d’appareil inférieur suivant après l’attachement.