Не удается загрузить 64-битный ключ с помощью RegLoadKey в 32-битном сервисе

Мне нужно открыть и изменить ключ реестра пользователя из 32-разрядной службы (обратите внимание, что пользователь не вошел в систему в то время.) Я делаю следующее:

//For simplicity error checks are not shown
//I also made sure to enable the following privileges:
// SE_RESTORE_NAME, SE_BACKUP_NAME

//"ntuser.dat" = is the file OS uses to load user's profile
if(RegLoadKey(HKEY_LOCAL_MACHINE, L"Test123", L"C:\\Users\\UserA\\ntuser.dat") == ERROR_SUCCESS)
{
HKEY hKey;
DWORD dwRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
L"Test123\\Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\CurrentVersion\\TrayNotify"),
NULL, KEY_READ | KEY_WOW64_64KEY, &hKey);

//'dwRes' = is returned as 2, or ERROR_FILE_NOT_FOUND

RegUnLoadKey(HKEY_LOCAL_MACHINE, L"Test123");
}

Проблема в том, что Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify ключ не загружен, хотя я знаю, что он существует в реальном профиле пользователя. Я могу убедиться в этом, загрузив учетную запись пользователя и используя 64-битный regedit.

Я подозреваю, что это как-то связано с перенаправлением Wow64, но я не могу понять, что я делаю не так?

РЕДАКТИРОВАТЬ: Добавлена ​​проверка ошибок для первого API.

1

Решение

Я думаю, что понял. Два исправления к моему оригинальному коду:

  1. Во-первых, с Vista мне нужно загрузить Usrclass.dat файл для улья классов а не ntuser.dat, Это имеет смысл, потому что ntuser.dat является частью перемещаемого профиля пользователя и Classes\Local Settings не вписывается в картину хорошо. Так вот расположение Usrclass.dat файл, который содержит данные пользователя, не находящегося в роуминге (в основном COM, но также и некоторые другие настройки):

    % LocalAppData% \ Microsoft \ Windows \ Usrclass.dat

  2. Ключ, который нужно открыть после загрузки пользовательского улья:

    Test123 \ Локальные настройки \ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ TrayNotify

это потому что оригинал HKCU\Software\Classes перенаправлен на HKU\<UserSID>_Classes который хранится в Usrclass.dat файл.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]