Имперсонация и SetPriorityClass

Тема в разделе "WASM.WIN32", создана пользователем Maveric, 31 мар 2006.

  1. Maveric

    Maveric New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2004
    Сообщения:
    90
    Приложение использует имперсонацию для получения определённых привелегий. Но есть момент который мне не очень понятен.

    Если выполнить



    SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);



    до



    ImpersonateLoggedOnUser(g_hToken);



    то всё нормально, а если наоборот, то не получается установить REALTIME_PRIORITY_CLASS.

    Имперсоная происходит на юзера из группы "Администраторы", перед этим включается привелегия SeIncreaseBasePriorityPrivilege для юзера на которого переключаюсь. Система XP+SP2.

    Почему так ?
     
  2. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    А имперсонацию ты производишь в главном потоке? Если да, то лучше кинь приложение, посмотрим.

    Имперсоная происходит на юзера из группы "Администраторы", перед этим включается привелегия SeIncreaseBasePriorityPrivilege для юзера на которого переключаюсь.

    Не понял как ты можешь активировать привилегию для пользователя, на которого ещё не имперсонировался. Попробуй в отладчике посмотри GetLastError. Для этой цели удобнее будет OllyDbg.
     
  3. Maveric

    Maveric New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2004
    Сообщения:
    90
    имперсонация происходит в главном потоке


    Код (Text):
    1.  
    2. HANDLE      g_hToken = NULL;
    3. ...
    4. if(!LogonUser("user", NULL, "password", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &g_hToken))
    5.     {
    6.         DWORD   dwError = GetLastError();
    7.         MessageBox(NULL, "LogonUser error", "Ошибка", MB_OK | MB_ICONSTOP | MB_TOPMOST);
    8.         return FALSE;
    9.     }
    10.  
    11. // ModifyPrivilege в зависимости от второго параметра (TRUE/FALSE)включает/выключат привилегию для g_hToken
    12. if(ModifyPrivilege("SeBackupPrivilege", TRUE) != ERROR_SUCCESS)
    13.     {
    14.         MessageBox(NULL, "ModifyPrivilege(SeBackupPrivilege)", "Внимание", MB_OK | MB_ICONWARNING | MB_TOPMOST);
    15.         return FALSE;
    16.     }
    17.     if(ModifyPrivilege("SeRestorePrivilege", TRUE) != ERROR_SUCCESS)
    18.     {
    19.         MessageBox(NULL, "ModifyPrivilege(SeRestorePrivilege)", "Внимание", MB_OK | MB_ICONWARNING | MB_TOPMOST);
    20.         return FALSE;
    21.     }
    22.     if(ModifyPrivilege("SeSystemtimePrivilege", TRUE) != ERROR_SUCCESS)
    23.     {
    24.         MessageBox(NULL, "ModifyPrivilege(SeSystemtimePrivilege)", "Внимание", MB_OK | MB_ICONWARNING | MB_TOPMOST);
    25.         return FALSE;
    26.     }
    27.     if(ModifyPrivilege("SeIncreaseBasePriorityPrivilege", TRUE) != ERROR_SUCCESS)
    28.     {
    29.         MessageBox(NULL, "ModifyPrivilege(SeIncreaseBasePriorityPrivilege)", "Внимание", MB_OK | MB_ICONWARNING | MB_TOPMOST);
    30.         return FALSE;
    31.     }
    32.     if(!ImpersonateLoggedOnUser(g_hToken))
    33.     {
    34.         MessageBox(NULL, "ImpersonateLoggedOnUser error", "Ошибка", MB_OK | MB_ICONSTOP  | MB_TOPMOST);
    35.         return FALSE;
    36.     }
    37.  




    Насчёт GetLastError... так никакого error-а и нет... Система не даёт выставить приоритет выше ABOVE_NORMAL_PRIORITY_CLASS. Если попробую выставить REALTIME_PRIORITY_CLASS, то всё пройдёт без ошибок, но GetPriorityClass вернёт ABOVE_NORMAL_PRIORITY_CLASS;
     
  4. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    HIGH_PRIORITY_CLASS выставить нельзя?

    Проверь так же из под taskmgr'а или другого диспетчера задач.
     
  5. Maveric

    Maveric New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2004
    Сообщения:
    90
    Попутался я... HIGH_PRIORITY_CLASS как раз можно... Если точнее, то можно выставить все, кроме REALTIME_PRIORITY_CLASS. Из под taskmgr'a можно любой.
     
  6. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    Нашёл что-нить? Уже который день пытаюсь найти проблему, но не получается. Может задать вопрос самой microsoft?