Wie kann ich Lesen Sie die 64-bit-Registrierungsschlüssel von einem 32-bit-Prozess?

Habe ich mit der key-Wert MachineGuid aus HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography zur eindeutigen Identifizierung von hosts, sondern von 32-bit-Prozesse unter 64-bit-Computer, der Wert scheint zu fehlen. Ich denke, es ist die Suche unter Wow6432Node, wo es tatsächlich fehlt. Nach diese Sie sollte zu erhalten, können Sie die rechts-Taste durch das hinzufügen einer Flagge, sondern unter code immer noch nicht erscheinen, um die Arbeit zu tun. Was bin ich?

const
  KEY_WOW64_64KEY=$0100;
var
  r:HKEY;
  s:string;
  i,l:integer;
begin
  //use cryptography machineguid, keep a local copy of this in initialization?
  l:=40;
  if RegOpenKeyEx(HKEY_LOCAL_MACHINE,PChar('Software\Microsoft\Cryptography'),
    0,KEY_QUERY_VALUE,r)=ERROR_SUCCESS then
   begin
    SetLength(s,l);
    if RegQueryValue(r,'MachineGuid',PChar(s),l)=ERROR_SUCCESS then
     begin
      SetLength(s,l);
      RegCloseKey(r);
     end
    else
     begin
      //try from-32-to-64
      RegCloseKey(r);
      if RegOpenKeyEx(HKEY_LOCAL_MACHINE,PChar('Software\Microsoft\Cryptography'),
        0,KEY_QUERY_VALUE or KEY_WOW64_64KEY,r)=ERROR_SUCCESS then
       begin
        l:=40;
        if RegQueryValue(r,'MachineGuid',PChar(s),l)=ERROR_SUCCESS then
          SetLength(s,l)
        else
          l:=0;
        RegCloseKey(r);
       end;
     end;
   end;
  • Warum nutzen Sie nicht TRegistry? Auch Ihre Logik ist eine echte Sauerei. Sie möchten eine einzelne Funktion aufrufen, um den Wert Lesen. Nennen Sie es zweimal. Erste mal, übergeben Sie 0. Zweites mal passieren KEY_WOW64_64KEY. Nur anrufen zweite mal, wenn der erste mal ausfällt. Dies ist extract method refactoring.
  • Ich TRegistry verwendet werden, bevor, aber nicht wissen, Sie kann hinzufügen KEY_WOW64_64KEY über den Konstruktor mit parameter.
  • Sicher, es tut. Siehe meine Antwort. EDIT: Sieht aus wie Sie fand meine Antwort jetzt. Beachten Sie auch, dass Sie ändern können, die Access Immobilie jederzeit zu wechseln der Ansichten innerhalb einer bereits erstellten registry-Objekt.
Schreibe einen Kommentar