Настройте токены для непривилегированных учетных записей (C, Windows)
-
06-07-2019 - |
Вопрос
Я использую следующий код (который представляет собой слегка измененный образец из MSDN), чтобы проверить, есть ли у меня права отладки в процессе.Если нет, я пытаюсь их установить.
int SetDebugPriv()
{
HANDLE TokenHandle;
LUID lpLuid;
TOKEN_PRIVILEGES NewState;
if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &TokenHandle))
{
//failed
return 0;
}
if(!LookupPrivilegeValue(NULL, "SeDebugPrivilege" , &lpLuid))
{
//failed
CloseHandle(TokenHandle);
return 0;
}
NewState.PrivilegeCount = 1;
NewState.Privileges[0].Luid = lpLuid;
NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if(!AdjustTokenPrivileges(TokenHandle, FALSE, &NewState, sizeof(NewState), NULL, NULL))
{
//failed
CloseHandle(TokenHandle);
return 0;
}
CloseHandle(TokenHandle);
return 1;
}
Теперь под определенной учетной записью в Windows XP и 2003 я получаю сообщение об отказе в доступе при попытке установить токен.Я предполагаю, что я не могу установить этот конкретный токен, потому что у меня нет на это разрешения.Как мне установить токен отладки для учетных записей, не являющихся администраторами, или учетных записей с низкими привилегиями?
код приветствуется.
Спасибо
Решение
Вы не можете.Если бы вы могли, это была бы огромная дыра в безопасности (SeDebugPrivilege имеет больше моджо, чем администратор).
AdjustTokenPrivileges включает привилегию, которую имеет токен, но она не включена.Например, SeShutdownPrivilege — один из них.
Вам необходимо добавить привилегию к учетной записи пользователя, а затем пользователь должен выйти из системы и снова войти в нее (чтобы получить новый токен с привилегией).
Чтобы добавить привилегии к учетной записи пользователя программным способом, начните с этого: http://support.microsoft.com/kb/132958