Maison >développement back-end >C++ >Comment accéder aux clés de registre 64 bits et 32 ​​bits à partir d'une application 32 bits ?

Comment accéder aux clés de registre 64 bits et 32 ​​bits à partir d'une application 32 bits ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-16 19:07:10541parcourir

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

Accès au registre 64 bits à partir d'une application 32 bits

Grâce à WOW64 (Windows sur Windows 64 bits), les applications 32 bits peuvent accéder au registre 64 bits. Ce sous-système facilite l'accès 64 bits dans l'environnement 32 bits.

Accès à la clé de registre 64 bits

Utilisez RegistryView.Registry64 pour accéder au registre 64 bits :

<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>

Accès à la clé de registre 32 bits

Utilisez RegistryView.Registry32 pour accéder au registre 32 bits :

<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>

Considérations importantes : WOW64, chemins de registre et requêtes clés

  • Sous Windows 64 bits, HKEY_LOCAL_MACHINESoftwareWow6432Node contient les valeurs utilisées par les applications 32 bits.
  • Les applications 32 bits et 64 bits accèdent HKEY_LOCAL_MACHINESoftware comme prévu en raison de la redirection WOW64.
  • HKEY_LOCAL_MACHINESoftwareWow6432Node est absent dans les anciennes versions de Windows et dans Windows 7 32 bits.

Pour récupérer les valeurs des registres 64 bits et 32 ​​bits (utile pour des scénarios tels que la récupération de noms d'instance SQL), une requête union est recommandée :

<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>

Cela fournit une vue consolidée des valeurs de registre, quelle que soit l'architecture de l'application.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn