Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

Восстановить пароль
Повторная активизация e-mail



Ответ
 
Опции темы
Старый 10.12.2017, 16:09   #1
zastylow
 
Регистрация: 08.03.2013
Сообщений: 6
Репутация: 10
По умолчанию Не удается программно предоставить привилегию 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, 16:20   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 10,508
Репутация: 1681

icq: 216409213
По умолчанию

Код:

TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES

__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 10.12.2017, 19:06   #3
zastylow
 
Регистрация: 08.03.2013
Сообщений: 6
Репутация: 10
По умолчанию

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка в AdjustTokenPrivileges helper999999 Общие вопросы Delphi 5 16.02.2015 22: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




02:03.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru