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 のエラー チェックを追加しました。