Настройте токены на непривилегированных учетных записях (C, Windows) - PullRequest
2 голосов
/ 31 июля 2009

Я использую следующий код (это пример слегка измененного 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 я получаю сообщение об ошибке отказа в доступе при попытке установить токен. Я предполагаю, что я не могу установить этот конкретный токен, потому что у меня нет разрешения на это. Как установить токен отладки для учетных записей без прав администратора или учетной записи с низкими привилегиями?

код приветствуется.

спасибо

1 Ответ

6 голосов
/ 31 июля 2009

Вы не можете. Если бы вы могли, это была бы огромная дыра в безопасности (SeDebugPrivilege имеет больше возможностей, чем администратор).

AdjustTokenPrivileges включает привилегию, которую имеет токен, но она не включена. Например, SeShutdownPrivilege является одним из них.

Вы должны добавить привилегию к учетной записи пользователя, а затем пользователь должен выйти из системы и снова войти в нее (чтобы получить новый токен с привилегией).

Чтобы программно добавить привилегии к учетной записи пользователя, начните с этого: http://support.microsoft.com/kb/132958

...