ホームページ > バックエンド開発 > C++ > 32 ビット アプリケーションから 64 ビットおよび 32 ビットのレジストリ キーにアクセスするにはどうすればよいですか?

32 ビット アプリケーションから 64 ビットおよび 32 ビットのレジストリ キーにアクセスするにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-16 19:07:10
オリジナル
537 人が閲覧しました

How to Access 64-Bit and 32-Bit Registry Keys from a 32-Bit Application?

32 ビット アプリケーションから 64 ビット レジストリへのアクセス

WOW64 (Windows 64 ビット上の Windows) のおかげで、32 ビット アプリケーションは 64 ビット レジストリにアクセスできます。 このサブシステムは、32 ビット環境内での 64 ビット アクセスを容易にします。

64 ビットのレジストリ キーへのアクセス

64 ビット レジストリにアクセスするには、RegistryView.Registry64 を使用します:

<code class="language-csharp">using Microsoft.Win32;

string value64 = string.Empty;
RegistryKey localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
localKey = localKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");
if (localKey != null)
{
    value64 = localKey.GetValue("RegisteredOrganization").ToString();
    localKey.Close();
}
Console.WriteLine($"RegisteredOrganization [64-bit]: {value64}");</code>
ログイン後にコピー

32 ビットのレジストリ キーへのアクセス

32 ビット レジストリにアクセスするには、RegistryView.Registry32 を使用します:

<code class="language-csharp">string value32 = string.Empty;
RegistryKey localKey32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
localKey32 = localKey32.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");
if (localKey32 != null)
{
    value32 = localKey32.GetValue("RegisteredOrganization").ToString();
    localKey32.Close();
}
Console.WriteLine($"RegisteredOrganization [32-bit]: {value32}");</code>
ログイン後にコピー

重要な考慮事項: WOW64、レジストリ パス、およびキー クエリ

  • 64 ビット Windows では、HKEY_LOCAL_MACHINESoftwareWow6432Node は 32 ビット アプリで使用される値を保持します。
  • WOW64 リダイレクトにより、32 ビット アプリケーションと 64 ビット アプリケーションの両方が予想どおりに HKEY_LOCAL_MACHINESoftware にアクセスします。
  • HKEY_LOCAL_MACHINESoftwareWow6432Node は、古い Windows バージョンおよび 32 ビット Windows 7 には存在しません。

64 ビットと 32 ビットの両方のレジストリから値を取得するには (SQL インスタンス名の取得などのシナリオに役立ちます)、ユニオン クエリを使用することをお勧めします。

<code class="language-csharp">public static IEnumerable<string> GetAllRegValueNames(string regPath, RegistryHive hive = RegistryHive.LocalMachine)
{
    var reg64 = GetRegValueNames(RegistryView.Registry64, regPath, hive);
    var reg32 = GetRegValueNames(RegistryView.Registry32, regPath, hive);
    var result = (reg64 != null && reg32 != null) ? reg64.Union(reg32) : (reg64 ?? reg32);
    return (result ?? new List<string>().AsEnumerable()).OrderBy(x => x);
}</code>
ログイン後にコピー

これにより、アプリケーションのアーキテクチャに関係なく、レジストリ値の統合ビューが提供されます。

以上が32 ビット アプリケーションから 64 ビットおよび 32 ビットのレジストリ キーにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート