Определение уровня UAC

Тема в разделе "WASM.WIN32", создана пользователем slesh, 30 окт 2011.

  1. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    Хотелось бы узнать, как можно определить текущий уровень UAC для процесса.
    Т.е. есть такая ситуация: Требуется записать кое какие данные в реестр.

    Сначала проверяется наличие прав админа (через UserInfo->usri1_priv & USER_PRIV_ADMIN), если они есть то идет попытка записи в HKLM, если нет прав админа или попытка записи в HKLM провалилась, то пишется в HKCU.

    Под XP всё норм. А вот под Win 7 начинаются проблемы, а именно:
    Даже при правах админа, нет доступа к HKLM из-за UAC. Но это не проблема, потому что всё равно запись идет потом в HKCU, но из-за попытки записи в HKLM без прав UAC после завершения программы выскакивает окно, что программа возможно работает не корректно так как ей требуются права админа.

    Именно по этому и хочется узнать как определить права которые есть в процесса и чтобы это не порождало того сообщения.
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Проще всего так: достать токен процесса чере OpenProcessToken(), запросить его elevation через GetTokenInformation() с классом TokenElevation или TokenElevationType, ну и дальше там всё понятно. Если правильно помню, то ещё можно так: извлекаешь SACL процесса через GetKernelObjectSecurity() с классом LABEL_SECURITY_INFORMATION, затем ищешь ACE типа SYSTEM_MANDATORY_LABEL_ACE_TYPE и проверяешь значение RID в записанном в него SID (см. здесь).
     
  3. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    Большое спасибо, помогло.
     
  4. Euler

    Euler New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2009
    Сообщения:
    56
    А можно ли как-то запросить повышение прав после запуска? SetTokenInformation(TokenElevationTypeFull) завершается ошибкой ERROR_INVALID_PARAMETER. Или может можно перезапустить себя с запросом на повышение привилегий?
     
  5. ziral2088

    ziral2088 New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    283
    ShellExecute + runas