Tokens restritos
Um token restrito é umprimário deou representação de token de acesso que foi modificado pela funçãoCreateRestrictedToken. Um processo ou representar thread em execução no contexto de segurança de um token restrito é restrito em sua capacidade de acessar objetos protegíveis ou executar operações privilegiadas. A função CreateRestrictedToken pode restringir um token das seguintes maneiras:
- Remova privilégios do token.
- Aplique o atributo somente negação aos SIDs no token para que eles não possam ser usados para acessar objetos protegidos. Para obter mais informações sobre o atributo somente negação, consulte atributos SID em um token de acesso.
- Especifique uma lista de restrições de SIDs, que podem limitar o acesso a objetos protegíveis.
O sistema usa a lista de restrições de SIDs quando verifica o acesso do token a um objeto protegível. Quando um processo ou thread restrito tenta acessar um objeto protegível, o sistema executa duas verificações de acesso: uma usando SIDs habilitados para o token e outra usando a lista de SIDs restritos. O acesso será concedido somente se ambas as verificações de acesso permitirem os direitos de acesso solicitados. Para obter mais informações sobre verificações de acesso, consulte Como os DACLs controlam o acesso a um objeto.
Você pode usar um token primário restrito em uma chamada para a funçãoCreateProcessAsUser. Normalmente, o processo que chama CreateProcessAsUser deve ter o privilégio de SE_ASSIGNPRIMARYTOKEN_NAME, que geralmente é mantido apenas pelo código do sistema ou por serviços em execução na conta LocalSystem. No entanto, se o CreateProcessAsUser chamada especificar uma versão restrita do token primário do chamador, esse privilégio não será necessário. Isso permite que aplicativos comuns criem processos restritos.
Você também pode usar um token de representação primário restrito ou na funçãoImpersonateLoggedOnUser.
Para determinar se um token tem uma lista de SIDs restritivos, chame a funçãoIsTokenRestricted.
Nota
Os aplicativos que usam tokens restritos devem executar o aplicativo restrito em áreas de trabalho diferentes da área de trabalho padrão. Isso é necessário para evitar um ataque de um aplicativo restrito, usando SendMessage ou PostMessage, para aplicativos irrestritos na área de trabalho padrão. Se necessário, alterne entre áreas de trabalho para fins de aplicativo.