Здравствуйте, 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
}
}