Máscara de acesso
A função da máscara de acesso é descrever os direitos de acesso de forma compacta. Para simplificar o gerenciamento de acesso, a máscara de acesso contém um conjunto de quatro bits, os direitos genéricos, que são convertidos em um conjunto de direitos mais detalhados usando a função RtlMapGenericMask.
A figura a seguir ilustra a máscara de acesso:
Os direitos genéricos são:
GENERIC_READ: o direito de ler as informações mantidas pelo objeto.
GENERIC_WRITE: o direito de gravar as informações mantidas pelo objeto.
GENERIC_EXECUTE: o direito de executar ou, alternativamente, examinar o objeto.
GENERIC_ALL: o direito de ler, gravar e executar o objeto.
Esses direitos podem ser combinados. Por exemplo, GENERIC_READ e GENERIC_WRITE podem ser solicitados. O mapeamento resultante requer a união dos direitos necessários para cada direito genérico. Esse paradigma imita os bits de acesso "rwx" do UNIX que são usados para controlar o acesso aos recursos do UNIX. Os direitos genéricos na máscara de acesso simplificam o desenvolvimento de aplicativos no Windows, pois esses direitos mascaram os diferentes direitos de segurança para vários tipos de objetos.
O seguinte conjunto de direitos padrão é aplicável a todos os tipos de objeto:
DELETE: o direito de excluir o objeto específico.
READ_CONTROL: o direito de ler as informações de controle (segurança) do objeto.
WRITE_DAC: o direito de modificar as informações de controle (segurança) do objeto.
WRITE_OWNER: o direito de modificar o SID do proprietário do objeto. Lembre-se de que os proprietários sempre têm o direito de modificar o objeto.
SYNCHRONIZE: o direito de aguardar o objeto fornecido (supondo que a espera seja um conceito válido para o objeto).
Os 16 bits inferiores da máscara de acesso representam os direitos específicos. O significado desses direitos específicos é exclusivo do objeto em questão. Para sistemas de arquivos, os interesses primários são os direitos específicos para objetos de arquivo. Para objetos de arquivo, direitos específicos são normalmente interpretados de forma diferente, dependendo se o objeto de arquivo representa um arquivo ou um diretório. Para arquivos, a interpretação normal é:
FILE_READ_DATA: o direito de ler dados do arquivo fornecido.
FILE_WRITE_DATA: o direito de gravar dados no arquivo fornecido (dentro do intervalo existente do arquivo).
FILE_APPEND_DATA: o direito de estender o arquivo fornecido.
FILE_READ_EA: o direito de ler os atributos estendidos do arquivo.
FILE_WRITE_EA: o direito de modificar os atributos estendidos do arquivo.
FILE_EXECUTE: o direito de executar localmente o arquivo fornecido. A execução de um arquivo armazenado em um compartilhamento remoto requer permissão de leitura, pois o arquivo é lido do servidor, mas executado no cliente.
FILE_READ_ATTRIBUTES: o direito de ler as informações de atributo do arquivo.
FILE_WRITE_ATTRIBUTES: o direito de modificar as informações de atributo do arquivo.
Para diretórios, os mesmos valores de bit são usados, mas sua interpretação é diferente em alguns dos seguintes casos:
FILE_LIST_DIRECTORY: o direito de listar o conteúdo do diretório.
FILE_ADD_FILE: o direito de criar um novo arquivo dentro do diretório.
FILE_ADD_SUBDIRECTORY: o direito de criar um novo diretório (subdiretório) dentro do diretório.
FILE_READ_EA: o direito de ler os atributos estendidos do diretório fornecido.
FILE_WRITE_EA: o direito de gravar os atributos estendidos do diretório fornecido.
FILE_TRAVERSE: o direito de acessar objetos dentro do diretório. O direito de acesso FILE_TRAVERSE é diferente do direito de acesso FILE_LIST_DIRECTORY. Manter o direito de acesso FILE_LIST_DIRECTORY permite que uma entidade obtenha uma lista do conteúdo de um diretório, enquanto o direito de acesso FILE_TRAVERSE dá a uma entidade o direito de acessar o objeto. Um chamador sem o direito de acesso FILE_LIST_DIRECTORY poderia abrir um arquivo que ele sabia que já existia, mas não seria capaz de obter uma lista do conteúdo do diretório.
FILE_DELETE_CHILD: o direito de excluir um arquivo ou diretório dentro do diretório atual.
FILE_READ_ATTRIBUTES: o direito de ler as informações de atributo de um diretório.
FILE_WRITE_ATTRIBUTES: o direito de modificar as informações de atributo de um diretório.
O Gerenciador de E/S define o mapeamento real de direitos genéricos para direitos padrão e específicos para objetos de arquivo. Um sistema de arquivos pode recuperar esse mapeamento usando IoGetFileObjectGenericMapping. Normalmente, o Gerenciador de E/S faz esse mapeamento durante o processamento IRP_MJ_CREATE antes de chamar o sistema de arquivos. Mas um sistema de arquivos que verifica a segurança em operações específicas (operações FSCTL especializadas, por exemplo) pode precisar fazer esse mapeamento por conta própria.