Wie kann ich den 64-Bit-Registrierungsschlüssel von einem 32-Bit-Prozess lesen?

8

Ich habe den Wert des Schlüssels MachineGuid von HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography verwendet, um Hosts eindeutig zu identifizieren, aber bei 32-Bit-Prozessen, die auf 64-Bit-Computern ausgeführt werden, scheint der Wert zu fehlen. Ich denke, es wird unter Wow6432Node gesucht, wo es tatsächlich fehlt. Laut sollten Sie dies tun in der Lage sein, durch Hinzufügen eines Flags zum richtigen Schlüssel zu gelangen, aber unterhalb des Codes scheint der Job immer noch nicht zu funktionieren. Was vermisse ich?

%Vor%     
Stijn Sanders 02.02.2012, 22:34
quelle

4 Antworten

6

Ihr Code ist unnötig komplex, vor allem deshalb, weil Sie nicht die Vorteile der integrierten TRegistry -Klasse nutzen, die Sie vor allen Komplexitäten der Low-Level-Registry-API schützt. Betrachten Sie beispielsweise den folgenden Code:

%Vor%

Die Funktion ReadRegStr gibt den Zeichenfolgenwert Name vom Schlüssel Key relativ zum Stammschlüssel Root zurück. Wenn ein Fehler auftritt, z. B. wenn der Schlüssel oder Name nicht vorhanden ist oder wenn der Wert vom falschen Typ ist, wird eine Ausnahme ausgelöst.

Der Parameter View ist eine Aufzählung, mit der Sie problemlos auf systemeigene 32-Bit- oder 64-Bit-Ansichten der Registrierung zugreifen können. Beachten Sie, dass native für den laufenden Prozess nativ bedeutet. So wird es die 32-Bit-Ansicht für einen 32-Bit-Prozess und die 64-Bit-Ansicht für einen 64-Bit-Prozess sein. Diese Aufzählung spiegelt die entsprechende Definition in .net wider.

    
David Heffernan 03.02.2012, 09:28
quelle
10

Ich würde vorschlagen, dass Sie die Funktion IsWow64Process() verwenden, um zu wissen, wann Sie ein 32-Prozess auf einem 64-Bit-Betriebssystem ausführen, und dann nur die KEY_WOW64_64KEY -Flags in dieser bestimmten Bedingung anwenden. Wenn die App ein 32-Bit-Prozess in einem 32-Bit-Betriebssystem oder ein 64-Bit-Prozess in einem 64-Bit-Betriebssystem ist, werden die Flags nicht benötigt.

Zum Beispiel:

%Vor%     
Remy Lebeau 02.02.2012 23:03
quelle
4

In meiner Verwendung dieses Registrierungsschlüssels ging ich einen Schritt weiter. Wenn der Wert nicht existiert, habe ich ihn erstellt: nicht in HKEY_LOCAL_MACHINE, das würde eine Erhöhung erfordern, aber in HKEY_CURRENT_USER. Wer den dort eingeführten Schlüssel sieht, wird kaum erkennen, dass es sich um einen Dummy handelt.

%Vor%

Das ist ein guter Punkt von @Remy Lebeau - TeamB obwohl; Ich sollte den obigen Code entsprechend modifizieren.

    
SourceMaid 03.02.2012 00:41
quelle
0

Rufen Sie reg.exe mit diesem Pfad auf C: \ Windows \ sysnative \ reg.exe Zum Beispiel:

%Vor%

Quelle: Ссылка

    
JohnP2 28.03.2018 14:28
quelle