Tokens restritos
Um token restrito é um primário ou representação token de acesso que foi modificado pela funçãoCreateRestrictedToken. Um processo ou representação de 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 deny-only a SIDs no token para que eles não possam ser usados para acessar objetos protegidos. Para obter mais informações sobre o atributo somente negar, consulte atributos SID em um token de acesso.
- Especifique uma lista de SIDs restritivos, que podem limitar o acesso a objetos protegíveis.
O sistema usa a lista de SIDs restritos quando verifica o acesso do token a um objeto protegível. Quando um processo restrito ou thread tenta acessar um objeto protegível, o sistema executa duas verificações de acesso: uma usando os SIDs habilitados do token e outra usando a lista de SIDs restritivos. O acesso só é concedido 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 as DACLs controlam o acesso a um objeto.
Você pode usar um token restrito primário em uma chamada para a funçãoCreateProcessAsUser. Normalmente, o processo que chama CreateProcessAsUser deve ter o privilégio 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 a chamada CreateProcessAsUser 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 principal ou restrito na funçãoImpersonateLoggedOnUser.
Para determinar se um token tem uma lista de SIDs restritivos, chame a funçãoIsTokenRestricted .
Observação
Os aplicativos que usam tokens restritos devem executar o aplicativo restrito em desktops diferentes da área de trabalho padrão. Isso é necessário para evitar um ataque de um aplicativo restrito, usando SendMessage ou PostMessage, a aplicativos irrestritos na área de trabalho padrão. Se necessário, alterne entre desktops para fins de seu aplicativo.