>백엔드 개발 >C++ >32비트 애플리케이션에서 64비트 및 32비트 레지스트리 키에 액세스하는 방법은 무엇입니까?

32비트 애플리케이션에서 64비트 및 32비트 레지스트리 키에 액세스하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-16 19:07:10589검색

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

32비트 애플리케이션에서 64비트 레지스트리에 액세스

WOW64(Windows on Windows 64비트) 덕분에 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.