Maschera di accesso
La funzione della maschera di accesso consiste nel descrivere i diritti di accesso in un formato compatto. Per semplificare la gestione degli accessi, la maschera di accesso contiene un set di quattro bit, i diritti generici, che vengono convertiti in un set di diritti più dettagliati usando la funzione RtlMapGenericMask.
La figura seguente illustra la maschera di accesso.
I diritti generici sono:
GENERIC_READ: diritto di leggere le informazioni gestite dall'oggetto.
GENERIC_WRITE: diritto di scrivere le informazioni gestite dall'oggetto.
GENERIC_EXECUTE: il diritto di eseguire o in alternativa esaminare l'oggetto.
GENERIC_ALL: diritto di leggere, scrivere ed eseguire l'oggetto.
Questi diritti possono essere combinati. Ad esempio, è possibile richiedere GENERIC_READ e GENERIC_WRITE. Il mapping risultante richiede l'unione dei diritti necessari per ogni diritto generico. Questo paradigma simula i bit di accesso UNIX "rwx" usati per controllare l'accesso alle risorse UNIX. I diritti generici nella maschera di accesso semplificano lo sviluppo di applicazioni in Windows perché questi diritti mascherano i diversi diritti di sicurezza per vari tipi di oggetto.
Il set di diritti standard seguente è applicabile a tutti i tipi di oggetto:
DELETE: diritto di eliminare l'oggetto specifico.
READ_CONTROL: diritto di leggere le informazioni di controllo (sicurezza) per l'oggetto.
WRITE_DAC: diritto di modificare le informazioni di controllo (sicurezza) per l'oggetto.
WRITE_OWNER: diritto di modificare il SID proprietario dell'oggetto. Tenere presente che i proprietari hanno sempre il diritto di modificare l'oggetto.
SYNCHRONIZE: diritto di attendere l'oggetto specificato (presupponendo che l'attesa sia un concetto valido per l'oggetto).
I 16 bit inferiori della maschera di accesso rappresentano i diritti specifici. Il significato di questi diritti specifici è univoco per l'oggetto in questione. Per i file system, gli interessi principali sono i diritti specifici per gli oggetti file. Per gli oggetti file, i diritti specifici vengono in genere interpretati in modo diverso, a seconda che l'oggetto file rappresenti un file o una directory. Per i file, l'interpretazione normale è:
FILE_READ_DATA: diritto di leggere i dati dal file specificato.
FILE_WRITE_DATA: diritto di scrivere dati nel file specificato (all'interno dell'intervallo esistente del file).
FILE_APPEND_DATA: diritto di estendere il file specificato.
FILE_READ_EA: diritto di leggere gli attributi estesi del file.
FILE_WRITE_EA: diritto di modificare gli attributi estesi del file.
FILE_EXECUTE: diritto di eseguire localmente il file specificato. L'esecuzione di un file archiviato in una condivisione remota richiede l'autorizzazione di lettura, poiché il file viene letto dal server, ma eseguito nel client.
FILE_READ_ATTRIBUTES: diritto di leggere le informazioni sull'attributo del file.
FILE_WRITE_ATTRIBUTES: diritto di modificare le informazioni sull'attributo del file.
Per le directory vengono usati gli stessi valori di bit, ma l'interpretazione è diversa in alcuni dei casi seguenti:
FILE_LIST_DIRECTORY: il diritto di elencare il contenuto della directory.
FILE_ADD_FILE: diritto di creare un nuovo file all'interno della directory.
FILE_ADD_SUBDIRECTORY: diritto di creare una nuova directory (sottodirectory) all'interno della directory.
FILE_READ_EA: diritto di leggere gli attributi estesi della directory specificata.
FILE_WRITE_EA: diritto di scrivere gli attributi estesi della directory specificata.
FILE_TRAVERSE: diritto di accedere agli oggetti all'interno della directory. Il diritto di accesso FILE_TRAVERSE è diverso dal diritto di accesso FILE_LIST_DIRECTORY. Tenendo premuto il diritto di accesso FILE_LIST_DIRECTORY, un'entità può ottenere un elenco del contenuto di una directory, mentre il diritto di accesso FILE_TRAVERSE concede a un'entità il diritto di accedere all'oggetto. Un chiamante senza il diritto di accesso FILE_LIST_DIRECTORY potrebbe aprire un file già esistente, ma non sarebbe in grado di ottenere un elenco del contenuto della directory.
FILE_DELETE_CHILD: diritto di eliminare un file o una directory all'interno della directory corrente.
FILE_READ_ATTRIBUTES: diritto di leggere le informazioni sugli attributi di una directory.
FILE_WRITE_ATTRIBUTES: diritto di modificare le informazioni sugli attributi di una directory.
Gestione I/O definisce il mapping effettivo dei diritti generici ai diritti standard e specifici per gli oggetti file. Un file system può recuperare questo mapping usando IoGetFileObjectGenericMapping. In genere, Gestione I/O esegue questo mapping durante l'elaborazione IRP_MJ_CREATE prima di chiamare il file system. Tuttavia, un file system che controlla la sicurezza in operazioni specifiche (ad esempio operazioni FSCTL specializzate) potrebbe dover eseguire questo mapping.