Registry und der Zugriff auf die MachineGuid variable

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Arby.

    Registry und der Zugriff auf die MachineGuid variable

    Hey Leute,

    seit gestern Abend hab ich folgendes Problem:
    Ich würde gerne im folgenden Baum: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\
    den folgenden Wert von meinem Windows 64-Bit auslesen (nicht verändern, nur lesen!): MachineGuid

    Ich hab natürlich schon gegoogelt und eine teilweise Antwort auf meine Frage bekommen. Ich kann mit der üblichen Methode (OpenSubKey und dann GetValue) nicht arbeiten, da das 64-Bit System mir einen Strich durch die Rechnung macht. Dies ist dadurch dass die 64-Bit Registry immer so etwas wie einen Fallback macht und zwar zur folgendem Baum: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\
    In diesem Unterbaum gibt es den Schlüssel MachineGuid jedoch nicht. Nun hab ich schon ein paar Ansätze probiert aber es gelingt mir einfach nicht diesen MachineGuid auf einem 64-Bit System auszulesen (und nur auszulesen!).

    Mein bisheriger Code ist folgender:

    VB.NET-Quellcode

    1. Dim Key22 As RegistryKey = Microsoft.Win32.RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)
    2. Key22 = Key22.OpenSubKey("SOFTWARE\Microsoft\Cryptography")
    3. Dim Key23 As String = Key22.GetValue("MachineGuid").ToString


    In der 2ten Zeile springt er aber leider wieder zurück zur Wow6432Node und kann dadurch den Wert des Schlüssels nicht lesen. Ich muss auch ehrlich gestehen dass ich nach dem lesen der MSDN Hilfe nicht wirklich weiss wie ich den OpenBaseKey Part (also die ersten beiden Zeilen) in eine Zeile kürzen kann. Hat da vielleicht jemand einen Tipp? Oder bin ich so richtig auf dem Holzweg?

    Vielen Dank jetzt schon mal für eure Hilfe und frohen (restlichen) Sonntag noch.
    cheers Kevin
    Hast Du mal mit dem RegEdit nachgeseten, ob es den Key MachineGuid bei Dir gibt?
    Bei mir gibt es ihn nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja klar gibt es den. Den müsste es auf jedem PC geben da er von Microsoft generiert. Er liegt hier:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography

    und dann ist da MachineGuid. Er liegt jedoch NICHT in:

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography
    cheers Kevin

    Springbok schrieb:

    Ja klar gibt es den.

    RodFromGermany schrieb:

    Bei mir gibt es ihn nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Springbok schrieb:

    MachineGuid
    OK, eigentlich nicht OK.
    So sehe ich den Key, aber wenn ich die vorhandenen Keys auslese, ist das Array leer. :S
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Springbok
    Du musst die Ziel - CPU auf x64 (64 bit) Stellen, denn sonst schaut VB in der 32bit Section der Registry. Und der Code :

    VB.NET-Quellcode

    1. Dim guidMachineGUID As Guid = New Guid(Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Cryptography").GetValue("MachineGuid").ToString())
    2. MessageBox.Show(guidMachineGUID.ToString())

    geht so

    MFG Tibiamicus

    Tibiamicus schrieb:

    geht so
    @Springbok:: halt nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ergänzend mal als Info, weil es da scheinbar noch Defizite gibt:

    Die Zielplattformen x86 und x64 sollten klar sein. Ersteres ist eine reine 32-Bit-Anwendung, letzteres eine reine 64-Bit-Anwendung. Wenn man mit einer 32-Bit-Anwendung auf einem 64-Bit-System auf die Registry zugreift, wirkt der "Fallback" auf den 32-Bit-Teil der Registry (wow6432node), denn beide Architekturen sind innerhalb eines Prozesses nicht vereinbar. Bei der Registry gibt es allerdings die Möglichkeit, diese Umleitung temporär auszuschalten, um auch aus 32-Bit-Anwendungen heraus zumindest Zugriff auf die 64-Bit-Registry zu bekommen.

    Wird als Zielsystem hingegen "Any CPU" gewählt, dann entsteht eine Anwendung, die sowohl unter 32-Bit als auch unter 64-Bit läuft, und zwar in der Konfiguration die dem jeweiligen System entspricht, auf dem sie ausgeführt wird, also 32-Bit auf 32-Bit-Windows und 64-Bit auf 64-Bit-Windows. Bei Registry-Zugriffen landet man dann ebenfalls automatisch in dem Teil, der der jeweiligen Prozessor-Architektur entspricht. Auf 32-Bit-Systemen sieht die Sache daher klar aus, auf 64-Bit-Systemen landet man somit "automatisch" im 64-Bit-Teil. Will man hier auch Werte aus der 32-Bit-Registry auslesen, muss man halt entsprechend in den wow6432node-Teil verzweigen, sollte dabei aber wie gesagt bedenken, dass es diesen Zweig nicht gibt, wenn die Anwendung auf 32-Bit-Systemen ausgeführt wird.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.