1

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

4

1 に答える 1

2

私はそれを手に入れたと思います。元のコードに対する 2 つの修正:

  1. まず、Vista 以降Usrclass.datでは、クラス ハイブのファイルをロードする必要がありますntuser.datntuser.datこれはユーザーのローミング プロファイルの一部でありClasses\Local Settings、全体像にうまく適合しないため、意味があります。したがって、Usrclass.dat非ローミング ユーザー データ (ほとんどが COM のものですが、その他の設定も含まれます) を含むファイルの場所は次のとおりです。

    %LocalAppData%\Microsoft\Windows\Usrclass.dat

  2. ユーザーハイブがロードされた後に開くキーは次のとおりです。

    Test123\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify

これは、元のファイルがファイルに保存されているものHKCU\Software\Classesにリダイレクトされるためです。HKU\<UserSID>_ClassesUsrclass.dat

于 2012-12-20T02:43:53.593 に答える