Detectar privilégios de depuração em um processo (Windows, C)
-
06-07-2019 - |
Pergunta
pergunta anterior perguntei como superar o fato de que em certos usuários os privilégios de depuração não estavam lá. Agora, já que não pode definir algo que não existe, como eu ia verificar se um usuário tem privilégios de depuração?
Eu sei que eu tenho que usar LookupPrivilegeValue (), eu simplesmente não consigo descobrir onde ler no valor retornado que indica se um privilégio particular é lá ou não.
Código é apreciado.
Graças
Solução
A partir http://msdn.microsoft. com / en-us / library / aa446619% 28VS.85% 29.aspx
BOOL SetPrivilege(
HANDLE hToken, // access token handle
LPCTSTR lpszPrivilege, // name of privilege to enable/disable
BOOL bEnablePrivilege // to enable or disable privilege
)
{
TOKEN_PRIVILEGES tp;
LUID luid;
if ( !LookupPrivilegeValue(
NULL, // lookup privilege on local system
lpszPrivilege, // privilege to lookup
&luid ) ) // receives LUID of privilege
{
printf("LookupPrivilegeValue error: %u\n", GetLastError() );
return FALSE;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if (bEnablePrivilege)
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
tp.Privileges[0].Attributes = 0;
// Enable the privilege or disable all privileges.
if ( !AdjustTokenPrivileges(
hToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
(PTOKEN_PRIVILEGES) NULL,
(PDWORD) NULL) )
{
printf("AdjustTokenPrivileges error: %u\n", GetLastError() );
return FALSE;
}
if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
{
printf("The token does not have the specified privilege. \n");
return FALSE;
}
return TRUE;
}
Se a função retornar ERROR_NOT_ALL_ASSIGNED ao solicitar para definir os privilégios de depuração, em seguida, o token não existe.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow