Masque d’accès
La fonction du masque d’accès est de décrire les droits d’accès sous une forme compacte. Pour simplifier la gestion des accès, le masque d’accès contient un ensemble de quatre bits, les droits génériques, qui sont traduits en un ensemble de droits plus détaillés en utilisant la fonction RtlMapGenericMask.
La figure suivante illustre le masque d’accès.
Les droits génériques sont :
GENERIC_READ : le droit de lire les informations conservées par l’objet.
GENERIC_WRITE : le droit d’écrire les informations conservées par l’objet.
GENERIC_EXECUTE : le droit d’exécuter ou, alternativement, de consulter l’objet.
GENERIC_ALL : le droit de lire, écrire et exécuter l’objet.
Ces droits peuvent être combinés. Par exemple, GENERIC_READ et GENERIC_WRITE peuvent être demandés simultanément. La cartographie résultante nécessite l’union des droits nécessaires pour chaque droit générique. Ce paradigme imite les bits d’accès « rwx » d’UNIX qui sont utilisés pour contrôler l’accès aux ressources UNIX. Les droits génériques dans le masque d’accès simplifient le développement d’applications sur Windows, car ces droits masquent les différents droits de sécurité pour divers types d’objets.
L’ensemble suivant de droits standards est applicable à tous les types d’objets :
DELETE : le droit de supprimer l’objet en question.
READ_CONTROL : le droit de lire les informations de contrôle (sécurité) de l’objet.
WRITE_DAC : le droit de modifier les informations de contrôle (sécurité) de l’objet.
WRITE_OWNER : le droit de modifier le SID du propriétaire de l’objet. Rappelez-vous que les propriétaires ont toujours le droit de modifier l’objet.
SYNCHRONIZE : le droit d’attendre sur l’objet donné (en supposant que l’attente est un concept valide pour l’objet).
Les 16 bits inférieurs du masque d’accès représentent les droits spécifiques. La signification de ces droits spécifiques est propre à l’objet en question. Pour les systèmes de fichiers, les droits spécifiques d’intérêt sont ceux concernant les objets fichiers. Pour les objets fichiers, les droits spécifiques sont normalement interprétés différemment, selon que l’objet fichier représente un fichier ou un répertoire. Pour les fichiers, l’interprétation normale est la suivante :
FILE_READ_DATA : le droit de lire les données du fichier en question.
FILE_WRITE_DATA : le droit d’écrire des données dans le fichier en question (dans la plage existante du fichier).
FILE_APPEND_DATA : le droit d’étendre le fichier en question.
FILE_READ_EA : le droit de lire les attributs étendus du fichier.
FILE_WRITE_EA : le droit de modifier les attributs étendus du fichier.
FILE_EXECUTE : le droit d’exécuter localement le fichier en question. Exécuter un fichier stocké sur un partage distant nécessite une autorisation de lecture, puisque le fichier est lu depuis le serveur mais exécuté sur le client.
FILE_READ_ATTRIBUTES : le droit de lire les informations d’attributs du fichier.
FILE_WRITE_ATTRIBUTES : le droit de modifier les informations d’attributs du fichier.
Pour les répertoires, les mêmes valeurs de bits sont utilisées, mais leur interprétation est différente dans certains des cas suivants :
FILE_LIST_DIRECTORY : le droit de lister le contenu du répertoire.
FILE_ADD_FILE : le droit de créer un nouveau fichier dans le répertoire.
FILE_ADD_SUBDIRECTORY : le droit de créer un nouveau répertoire (sous-répertoire) dans le répertoire.
FILE_READ_EA : le droit de lire les attributs étendus du répertoire en question.
FILE_WRITE_EA : le droit d’écrire les attributs étendus du répertoire en question.
FILE_TRAVERSE : le droit d’accéder aux objets dans le répertoire. Le droit d’accès FILE_TRAVERSE est différent du droit d’accès FILE_LIST_DIRECTORY. Détenir le droit d’accès FILE_LIST_DIRECTORY permet à une entité d’obtenir une liste du contenu d’un répertoire, tandis que le droit d’accès FILE_TRAVERSE donne à une entité le droit d’accéder à l’objet. Un appelant sans le droit d’accès FILE_LIST_DIRECTORY pourrait ouvrir un fichier qu’il savait déjà exister, mais ne pourrait pas obtenir la liste du contenu du répertoire.
FILE_DELETE_CHILD : le droit de supprimer un fichier ou un répertoire dans le répertoire actuel.
FILE_READ_ATTRIBUTES : le droit de lire les informations d’attributs du répertoire.
FILE_WRITE_ATTRIBUTES : le droit de modifier les informations d’attributs du répertoire.
Le Gestionnaire E/S définit la cartographie réelle des droits génériques aux droits standards et spécifiques pour les objets fichiers. Un système de fichiers peut récupérer cette cartographie en utilisant IoGetFileObjectGenericMapping. Normalement, le Gestionnaire E/S effectue cette cartographie lors du traitement IRP_MJ_CREATE avant d’appeler le système de fichiers. Mais un système de fichiers vérifiant la sécurité sur des opérations spécifiques (opérations FSCTL spécialisées, par exemple) pourrait avoir besoin de faire cette cartographie lui-même.