x64 Registry aus einer x86 Exe...

  • Hallo zusammen

    Ich versuche auf einem 64 Bit System einen Registryhive zu Berechtigen.

    Da ich schon unzähliche andere Actions im gleichen Setup mit subinacl erledigen konnte, würde ich gern auch den Rest mit diesem Tool abhandeln.

    Unter x86 geht auch alles, nur unter x64


    HKEY_LOCAL_MACHINE\SOFTWARE\Candle

    werden die Berechtigungen dann unter

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Candle

    geschrieben. Beide Hives existieren auch. Nun ist die Frage, wie kann ich aus einem 32 Bit AutoIt Aufruf mit subinacl den normalen x64 Hive erreichen?


    [autoit]

    RunWait('subinacl /keyreg "HKEY_LOCAL_MACHINE\Software\Candle" /grant="mydomain.com\myuser"=f')

    [/autoit]

    Das ganze geht dann aber in den Wow6432Node Hive ;(

    Experimente mit:

    [autoit]

    DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "int", 1)
    RunWait(@COMSPEC & " /k subinacl /keyreg " & "HKLM64\Software\Candle" & ' /grant="mydomain.com\myuser"=f')

    [/autoit]

    schlugen genauso fehl. Seht ihr noch einen weg, oder muss ich auf secedit oder anderes übergehen?

    Danke euch!

    Surfy

  • Wo hast du denn das her?
    Es gibt keine x86 und x64 Registry. Es ist ein und dieselbe.
    Nur die Pfade unterscheiden sich.
    Wenn du von 32Bit-Programmen auf die x64 Pfade der Registry zugreifen willst musst du (wie es eigentlich eindeutig in der Hilfe steht...) einfach das Suffix "64" hinter den Hauptschlüssel setzen.
    Also z.B.:

    [autoit]

    RegRead("HKLM64\SYSTEM\CurrentControlSet\Control", "CurrentUser")

    [/autoit]

    2 Mal editiert, zuletzt von AspirinJunkie (20. Oktober 2010 um 09:40)

  • Danke für eure Tips.

    Zum teil war mir das neu (zb dass "nur" der Pfad anders ist), aber zb das mit HKLM64 kannte ich schon.

    Jetzt stellt sich aber schnell die Frage - wieso ich mit

    [autoit]

    RunWait(@COMSPEC & " /k subinacl /keyreg " & "HKLM64\Software\Candle" & ' /grant="mydomain.com\myuser"=f')

    [/autoit]

    den 64Bit pfad nicht erreichen kann... Gut, Autoit Syntax.. Aber wie müsste das aussehen, damit ich auch in der Commandline (@Compspec) diesen Pfad erreichen kann?

    Danke euch,

    Surfy

  • Danke für eure Tips.

    Zum teil war mir das neu (zb dass "nur" der Pfad anders ist), aber zb das mit HKLM64 kannte ich schon.

    Jetzt stellt sich aber schnell die Frage - wieso ich mit

    [autoit]

    RunWait(@COMSPEC & " /k subinacl /keyreg " & "HKLM64\Software\Candle" & ' /grant="mydomain.com\myuser"=f')

    [/autoit]

    den 64Bit pfad nicht erreichen kann... Gut, Autoit Syntax.. Aber wie müsste das aussehen, damit ich auch in der Commandline (@Compspec) diesen Pfad erreichen kann?

    Danke euch,

    Surfy :S

  • Das Suffix "64" verstehen nur die AutoIt-Registry Funktionen (RegDelete, RegEnumKey, RegEnumVal, RegRead, RegWrite).
    Du rufst hingegen ein anderes Programm auf.
    Da du eigentlich nur den Pfad als String übergibst hast du nicht wirklich viele Möglichkeiten zu beeinflussen was das Programm dann daraus macht.
    Prinzipiell kann man diese Umleitung von Pfaden in einem Programm selbst abstellen (RegDisableReflectionKey) aber das muss das Programm schon selbst machen.
    Kurz: Keine Ahnung