Como o AccessCheck funciona

Quando um thread tenta acessar um objeto protegível, o sistema concede ou nega acesso. Se o objeto não tiver uma DACL (lista de controle de acesso discricionário), o sistema concederá acesso; caso contrário, o sistema procura acEs (entradas de Controle de Acesso) no DACL do objeto que se aplicam ao thread. Cada ACE no DACL do objeto especifica os direitos de acesso permitidos ou negados para um administrador, que podem ser uma conta de usuário, uma conta de grupo ou uma sessão de logon.

Dacls

O sistema compara o administrador em cada ACE com os administradores identificados no token de acesso do thread. Um token de acesso contém SIDs ( identificadores de segurança ) que identificam o usuário e as contas de grupo às quais o usuário pertence. Um token também contém um SID de logon que identifica a sessão de logon atual. Durante uma verificação de acesso, o sistema ignora SIDs de grupo que não estão habilitados. Para obter mais informações sobre SIDs habilitados, desabilitados e somente negação, consulte atributos SID em um Token de Acesso.

Normalmente, o sistema usa o token de acesso primário do thread que está solicitando acesso. No entanto, se o thread estiver representando outro usuário, o sistema usará o token de representação do thread.

O sistema examina cada ACE em sequência até que um dos seguintes eventos ocorra:

  • Uma ACE negada pelo acesso nega explicitamente qualquer um dos direitos de acesso solicitados a um dos administradores listados no token de acesso do thread.
  • Uma ou mais ACEs permitidas pelo acesso para administradores listados no token de acesso do thread concedem explicitamente todos os direitos de acesso solicitados.
  • Todas as ACEs foram verificadas e ainda há pelo menos um direito de acesso solicitado que não foi explicitamente permitido, nesse caso, o acesso é implicitamente negado.

A ilustração a seguir mostra como a DACL de um objeto pode permitir o acesso a um thread enquanto nega o acesso a outro.

dacl that grants different access rights to different threads

Para o Thread A, o sistema lê ACE 1 e nega imediatamente o acesso porque o ACE negado pelo acesso se aplica ao usuário no token de acesso do thread. Nesse caso, o sistema não verifica aces 2 e 3. Para o Thread B, o ACE 1 não se aplica, portanto, o sistema prossegue para ACE 2, que permite acesso de gravação, e ACE 3, que permite acesso de leitura e execução.

Como o sistema para de verificar ACEs quando o acesso solicitado é explicitamente concedido ou negado, a ordem das ACEs em uma DACL é importante. Observe que, se a ordem ACE fosse diferente no exemplo, o sistema poderia ter concedido acesso ao Thread A. Para objetos do sistema, o sistema operacional define uma ordem preferencial de ACEs em um DACL.