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
Libérer: 2025-01-16 19:07:10
original
544 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal