Maschera di accesso

La funzione della maschera di accesso consiste nel descrivere i diritti di accesso in un modulo 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.

diagramma che illustra la maschera di accesso.

I diritti generici sono uno dei seguenti:

  • GENERIC_READ: il 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 esaminare in alternativa l'oggetto.

  • GENERIC_ALL: il diritto di leggere, scrivere ed eseguire l'oggetto.

Si noti che questi diritti possono essere combinati (GENERIC_READ e GENERIC_WRITE possono essere richiesti, ad esempio) con il mapping risultante che richiede l'unione dei diritti necessari per ogni diritto generico. Questo paradigma simula i bit di accesso "rwx" UNIX usati per controllare l'accesso alle risorse UNIX. I diritti generici nella maschera di accesso semplificano lo sviluppo di applicazioni in Windows poiché 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: il diritto di leggere le informazioni di controllo (sicurezza) per l'oggetto.

  • WRITE_DAC: il diritto di modificare le informazioni di controllo (sicurezza) per l'oggetto.

  • WRITE_OWNER: il diritto di modificare il SID proprietario dell'oggetto. Tenere presente che i proprietari hanno sempre il diritto di modificare l'oggetto.

  • SYNC: il diritto di attendere sull'oggetto specificato (presupponendo che si tratta di 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 primari sono i diritti specifici per gli oggetti file. Per gli oggetti file, i diritti specifici vengono normalmente 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: il diritto di leggere i dati dal file specificato.

  • FILE_WRITE_DATA: il 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: il diritto di leggere gli attributi estesi del file.

  • FILE_WRITE_EA: diritto di modificare gli attributi estesi del file.

  • FILE_EXECUTE: il 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: il diritto di leggere le informazioni sull'attributo del file.

  • FILE_WRITE_ATTRIBUTES: il diritto di modificare le informazioni sull'attributo del file.

Per le directory, vengono usati gli stessi valori bit, ma l'interpretazione è diversa in alcuni dei casi seguenti:

  • FILE_LIST_DIRECTORY: il diritto di elencare il contenuto della directory.

  • FILE_ADD_FILE: il diritto di creare un nuovo file all'interno della directory.

  • FILE_ADD_SUBDIRECTORY: il diritto di creare una nuova directory (sottodirectory) all'interno della directory.

  • FILE_READ_EA: il diritto di leggere gli attributi estesi della directory specificata.

  • FILE_WRITE_EA: il diritto di scrivere gli attributi estesi della directory specificata.

  • FILE_TRAVERSE: il 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à consente a un'entità di ottenere un elenco del contenuto di una directory, mentre il diritto di accesso FILE_TRAVERSE fornisce 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: il diritto di eliminare un file o una directory all'interno della directory corrente.

  • FILE_READ_ATTRIBUTES: il diritto di leggere le informazioni sull'attributo di una directory.

  • FILE_WRITE_ATTRIBUTES: il diritto di modificare le informazioni sull'attributo di una directory.

Il mapping effettivo dei diritti generici ai diritti standard e specifici per gli oggetti file è definito dalla gestione I/O. Questo mapping può essere recuperato da un file system usando IoGetFileObjectGenericMapping. In genere, questo mapping viene eseguito durante l'elaborazione IRP_MJ_CREATE da parte della gestione I/O prima di chiamare il file system. Ma questa operazione potrebbe essere eseguita da un file system che controlla la sicurezza su operazioni specifiche (operazioni FSCTL specializzate, ad esempio).