Re[4]: OpenProcess-OpenProcessToken
От: DarkTranquillity  
Дата: 12.11.08 07:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>LUID seDebug;

А>TOKEN_PRIVILEGES tkp;
А>HANDLE hTokenCurr;

А>OpenProcessToken(GetCurrentProcess(),TOKEN_АDJUST_PRIVILEGES|TOKEN_QUERY,&hTokenCurr);


А>LookuptPrivilegeValue(NULL,SE_DEBUG_NAME,&seDebug);

А>tkp.PrivilegeCount=1;
А>tkp.Privileges[0].Luid=seDebug;
А>tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;

А>AdjustTokenPrivileges(hTokenCurr,FALSE,&tkp,sizeof tkp,NULL,NULL);


А>CloseHandle(hTokenCurr);


А>=====

А>GetLastError() для AdjustTokenPrivileges возвращает 6 (ERROR_INVALID_HANDLE) из под system, но под обычным не привилегированным пользователем все работает.

Неплохо бы проверять, что возвращают ВСЕ функции:

    if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken ))
    {
        ret = GetLastError();
        WriteLog(LOG_PATH, _T("LINE: %u\tError: %u"), __LINE__, ret);
        goto EXIT;
    }

    // Получим значение LUID привилегии по символическому названию
    state.PrivilegeCount = 1;
    if ( !LookupPrivilegeValue(NULL, SE_SECURITY_NAME, &state.Privileges[0].Luid ))
    {
        ret = GetLastError();
        WriteLog(LOG_PATH, _T("LINE: %u\tError: %u"), __LINE__, ret);
        goto EXIT;
    }

    // Запросим привилегию для нашего маркера
    state.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    if ( !AdjustTokenPrivileges( hToken, false, &state, sizeof(state), NULL, NULL ))
    {
        ret = GetLastError();
        WriteLog(LOG_PATH, _T("LINE: %u\tError: %u"), __LINE__, ret);
        goto EXIT;
    }


Это кусок кода для моих нужд, не стал переделывать, думаю, это не сложно — он работал под Local System.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.