Друзья, подскажите, в чем проблема! В общем, я в Висте работаю с реестром. Запись в реестр рпоисходит на УРА, без проблем. Когда же начинаю читать записанные данные — такая лажа получается!!!! Вот код чтения из реестра строки:
HKEY hKey;
char sz[MAX_PATH];
char szPath[MAX_PATH];
DWORD dwSize;
LONG lRet;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T(key_way), 0, KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS)
return "";
sz[sizeof(sz)-1] = '\0';
dwSize = MAX_PATH;
lRet = RegQueryValueEx(hKey, _T(item_name), NULL, NULL, (LPBYTE)sz, &dwSize);
if (lRet != ERROR_SUCCESS || sz[sizeof(sz)-1] != '\0')
return "";
MessageBox(NULL,sz,"ilock - sz2",MB_OK | MB_SYSTEMMODAL);
ExpandEnvironmentStrings(sz, szPath, sizeof(szPath));
RegCloseKey(hKey);
return szPath;
В Висте всегд возвращается одна и таже строка, в то время как значение ключа изменяется периодически... Узнал, что проблема может быть в том, что в Висте все ключи в Юникоде. Попробовал использовать юникод версию — нифига, вообще не может получить значение ключа. Что делать?
M>Друзья, подскажите, в чем проблема! В общем, я в Висте работаю с реестром. Запись в реестр рпоисходит на УРА, без проблем. Когда же начинаю читать записанные данные — такая лажа получается!!!! Вот код чтения из реестра строки:
Для 32 битных приложений ветка HKLM является CopyOnWrite.
Т.е. читаете вы из HKLM, но при попытке писать вас перенаправляют в другое место.
Точно такое-же поведение и при работе с файлами/каталогами в Program Files.
http://download.microsoft.com/download/5/6/a/56a0ed11-e073-42f9-932b-38acd478f46d/WindowsVistaUACDevReqs.doc
Virtualization
Important
Virtualization is implemented to improve application compatibility problems for applications running as a standard user on Windows Vista. Developers must not rely on virtualization being present in subsequent versions of Windows.
Prior to Windows Vista, many applications were typically run by administrators. As a result, applications could freely read and write system files and registry keys. If standard users ran these applications, they would fail due to insufficient access. Windows Vista improves application compatibility for standard users by redirecting writes (and subsequent file or registry operations) to a per-user location within the user’s profile. For example, if an application attempts to write to C:\Program Files\Contoso\Settings.ini, and the user does not have permissions to write to that directory, the write will get redirected to C:\Users\Username\AppData\Local\VirtualStore\Program Files\contoso\settings.ini. For the registry, if an application attempts to write to HKEY_LOCAL_MACHINE\Software\Contoso\ it will automatically get redirected to HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\Software\Contoso or HKEY_USERS\UserSID_Classes\VirtualStore\Machine\Software\Contoso.