Re: Реест и Vista
От: KoriBRand  
Дата: 06.05.10 11:20
Оценка: 1 (1)
Здравствуйте, Anton_86, Вы писали:

A_>Добрый день коллеги, есть следующий вопрос:

A_>При попытке записи из под Юзера в HKLM на ХР функции обваливаються с кодом 5 — доступ запрещен. На висте все успешно завершаеться, данные повторно даже читаються но в реестре не появляються. Вот у меня собственно вопрос, как убедиться в успешном сохранении данных в реестре в рамках одного процесса, ну или хотя бы узнать с какими привелегиями запущен текущий процесс (читай из под какого пользователя)?

В Висте скорее всего срабатывает виртуализация реестра. Чтобы писать в HKLM, нужен Elevated токен у процесса. Определяется его наличие как-то так.

// check Windows version
    OSVERSIONINFO VersionInfo;
    VersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    GetVersionEx(&VersionInfo);

    if (VersionInfo.dwMajorVersion >= 6)
    {
        // check if elevated on Vista and 7
        HANDLE Token;
        TOKEN_ELEVATION Elevation;      // Token type only available with Vista/7
        DWORD ReturnSize;

        if (!OpenProcessToken(GetCurrentProcess(), TOKEN_READ, &Token)  ||
            !GetTokenInformation(Token, TokenElevation, &Elevation, sizeof(Elevation), &ReturnSize))
            return 0;
        
        if (!Elevation.TokenIsElevated)
        {
            // process is not elevated
        }
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.