Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2017, 15:09   #1
zastylow
 
Регистрация: 08.03.2013
Сообщений: 6
По умолчанию Не удается программно предоставить привилегию SeTakeOwnershipPrivilege с помощью AdjustTokenPrivileges

Хочу программно предоставить привилегию SeTakeOwnershipPrivilege текущему процессу с помощью AdjustTokenPrivileges. AdjustTokenPrivileges возвращает FALSE, а GetLastError() - ERROR_INVALID_HANDLE. Подобных примеров везде навалом, но у меня не работает. Может что-то добавить нужно или что-то не так делаю, или это в принципе невозможно? Подскажите, если кто-то разбирался с этим вопросом.

Код:
BOOL CRegEditDlg::SetPrivilege(CString privilege_name, BOOL bEnablePrivilege)
{
    CString s;
    HANDLE hToken;
    LUID luid;
    DWORD RetLen = 0;
    HANDLE hProcess;

    size_t sz = sizeof(TOKEN_PRIVILEGES);

    PTOKEN_PRIVILEGES pPriv = (PTOKEN_PRIVILEGES)_alloca(sz);
    PTOKEN_PRIVILEGES pOldPrivs = (PTOKEN_PRIVILEGES)_alloca(sz);

    hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId());

    try
    {
        OpenProcessToken(hProcess, TOKEN_QUERY || TOKEN_ADJUST_PRIVILEGES, &hToken);

        if (LookupPrivilegeValue(NULL, privilege_name, &luid))
        {
            pPriv->PrivilegeCount = 1;
            pPriv->Privileges[0].Luid = luid;

            if (bEnablePrivilege)
                pPriv->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
            else
                pPriv->Privileges[0].Attributes = 0;

            if ( !AdjustTokenPrivileges(hToken,FALSE,pPriv,sz, pOldPrivs, &RetLen))
            { 
                s.Format(L"AdjustTokenPrivileges error: %u", GetLastError() ); 
                AfxMessageBox(s);
                return FALSE;
            } 
        }
    }
    catch (...)
    {
        try
        {
            CloseHandle(hToken);
        }
        catch (...)
        {
        }
    }

    return TRUE;
}
zastylow вне форума Ответить с цитированием
Старый 10.12.2017, 15:20   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,770
По умолчанию

Код:
TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES
p51x вне форума Ответить с цитированием
Старый 10.12.2017, 18:06   #3
zastylow
 
Регистрация: 08.03.2013
Сообщений: 6
По умолчанию

Большое спасибо! Заработало! Вот что значит свежий взгляд...
zastylow вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка в AdjustTokenPrivileges helper999999 Общие вопросы Delphi 5 16.02.2015 21:33
Как предоставить доступ к папке определенному пользователю программно? artemavd Общие вопросы Delphi 6 21.06.2012 01:51
предоставить небольшой проект содержаший среднее кол-во компонентов RAFGOBLIN Свободное общение 4 01.07.2009 15:18
При создании нового листа программно поставить на него защиту (с помощью VBA) Lis000iq Microsoft Office Excel 2 30.06.2009 18:41
Как программно назначить привилегию или писать в реестр через WinApi ? UnD)eaD)Snake Win Api 16 27.09.2007 20:20