Hi!
I have a Problem to Access / Read the Regestry via Windows API under Windows 7 64 Bit
Under Windows 7 32 Bit there is no Problem...
Here is the code that works under 32 Bit without Problems:
MOVE SPACES TO REG-KEY-ERGEBNIS. MOVE SPACES TO KEY-AUFRUF.
STRING REG-KEY-HAUPTKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF END-STRING.
MOVE KEY-AUFRUF TO SUBKEY.
CALL WINAPI REGOPENKEYEX USING BY VALUE HKEY BY REFERENCE SUBKEY BY VALUE 0 BY VALUE KEY-QUERY-VALUE BY REFERENCE HKEYRESULT RETURNING RC END-CALL.
MOVE 256 TO VALUEDATA-LEN. MOVE LOW-Values TO VALUEDATA.
IF REG-KEY-SUBKEY EQUAL TO SPACES MOVE LOW-Values TO VALUENAME ELSE MOVE SPACES TO KEY-AUFRUF STRING REG-KEY-SUBKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF MOVE KEY-AUFRUF TO VALUENAME END-IF.
CALL WINAPI REGQUERYVALUEEX USING BY VALUE HKEYRESULT BY REFERENCE VALUENAME BY VALUE NULLPTR BY REFERENCE VALUETYPE BY REFERENCE VALUEDATA BY REFERENCE VALUEDATA-LEN RETURNING RC END-CALL.
IF RC EQUAL TO ZEROES STRING VALUEDATA DELIMITED BY X"00" INTO REG-KEY-ERGEBNIS END-IF.
MOVE RC TO REG-KEY-ERGEBNIS-CODE.
CALL WINAPI REGCLOSEKEY USING BY VALUE HKEY RETURNING RC END-CALL.
#64BitWindowsAccessRegistryThe copy and past Looks not good here is a nother code...
MOVE SPACES TO REG-KEY-ERGEBNIS.
MOVE SPACES TO KEY-AUFRUF.
STRING REG-KEY-HAUPTKEY DELIMITED BY " "
X"00" DELIMITED BY SIZE
INTO KEY-AUFRUF
END-STRING.
MOVE KEY-AUFRUF TO SUBKEY.
CALL WINAPI REGOPENKEYEX USING
BY VALUE HKEY
BY REFERENCE SUBKEY
BY VALUE 0
BY VALUE KEY-QUERY-VALUE
BY REFERENCE HKEYRESULT
RETURNING RC
END-CALL.
MOVE 256 TO VALUEDATA-LEN.
MOVE LOW-Values TO VALUEDATA.
IF REG-KEY-SUBKEY EQUAL TO SPACES
MOVE LOW-Values TO VALUENAME
ELSE
MOVE SPACES TO KEY-AUFRUF
STRING REG-KEY-SUBKEY DELIMITED BY " "
X"00" DELIMITED BY SIZE
INTO KEY-AUFRUF
MOVE KEY-AUFRUF TO VALUENAME
END-IF.
CALL WINAPI REGQUERYVALUEEX USING
BY VALUE HKEYRESULT
BY REFERENCE VALUENAME
BY VALUE NULLPTR
BY REFERENCE VALUETYPE
BY REFERENCE VALUEDATA
BY REFERENCE VALUEDATA-LEN
RETURNING RC
END-CALL.
IF RC EQUAL TO ZEROES
STRING VALUEDATA DELIMITED BY X"00"
INTO REG-KEY-ERGEBNIS
END-IF.
MOVE RC TO REG-KEY-ERGEBNIS-CODE.
CALL WINAPI REGCLOSEKEY USING
BY VALUE HKEY
RETURNING RC
END-CALL.
Hi!
I have a Problem to Access / Read the Regestry via Windows API under Windows 7 64 Bit
Under Windows 7 32 Bit there is no Problem...
Here is the code that works under 32 Bit without Problems:
MOVE SPACES TO REG-KEY-ERGEBNIS. MOVE SPACES TO KEY-AUFRUF.
STRING REG-KEY-HAUPTKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF END-STRING.
MOVE KEY-AUFRUF TO SUBKEY.
CALL WINAPI REGOPENKEYEX USING BY VALUE HKEY BY REFERENCE SUBKEY BY VALUE 0 BY VALUE KEY-QUERY-VALUE BY REFERENCE HKEYRESULT RETURNING RC END-CALL.
MOVE 256 TO VALUEDATA-LEN. MOVE LOW-Values TO VALUEDATA.
IF REG-KEY-SUBKEY EQUAL TO SPACES MOVE LOW-Values TO VALUENAME ELSE MOVE SPACES TO KEY-AUFRUF STRING REG-KEY-SUBKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF MOVE KEY-AUFRUF TO VALUENAME END-IF.
CALL WINAPI REGQUERYVALUEEX USING BY VALUE HKEYRESULT BY REFERENCE VALUENAME BY VALUE NULLPTR BY REFERENCE VALUETYPE BY REFERENCE VALUEDATA BY REFERENCE VALUEDATA-LEN RETURNING RC END-CALL.
IF RC EQUAL TO ZEROES STRING VALUEDATA DELIMITED BY X"00" INTO REG-KEY-ERGEBNIS END-IF.
MOVE RC TO REG-KEY-ERGEBNIS-CODE.
CALL WINAPI REGCLOSEKEY USING BY VALUE HKEY RETURNING RC END-CALL.
#64BitWindowsAccessRegistryHave anyone an idea or a sample for 64 bit?
Hi!
I have a Problem to Access / Read the Regestry via Windows API under Windows 7 64 Bit
Under Windows 7 32 Bit there is no Problem...
Here is the code that works under 32 Bit without Problems:
MOVE SPACES TO REG-KEY-ERGEBNIS. MOVE SPACES TO KEY-AUFRUF.
STRING REG-KEY-HAUPTKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF END-STRING.
MOVE KEY-AUFRUF TO SUBKEY.
CALL WINAPI REGOPENKEYEX USING BY VALUE HKEY BY REFERENCE SUBKEY BY VALUE 0 BY VALUE KEY-QUERY-VALUE BY REFERENCE HKEYRESULT RETURNING RC END-CALL.
MOVE 256 TO VALUEDATA-LEN. MOVE LOW-Values TO VALUEDATA.
IF REG-KEY-SUBKEY EQUAL TO SPACES MOVE LOW-Values TO VALUENAME ELSE MOVE SPACES TO KEY-AUFRUF STRING REG-KEY-SUBKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF MOVE KEY-AUFRUF TO VALUENAME END-IF.
CALL WINAPI REGQUERYVALUEEX USING BY VALUE HKEYRESULT BY REFERENCE VALUENAME BY VALUE NULLPTR BY REFERENCE VALUETYPE BY REFERENCE VALUEDATA BY REFERENCE VALUEDATA-LEN RETURNING RC END-CALL.
IF RC EQUAL TO ZEROES STRING VALUEDATA DELIMITED BY X"00" INTO REG-KEY-ERGEBNIS END-IF.
MOVE RC TO REG-KEY-ERGEBNIS-CODE.
CALL WINAPI REGCLOSEKEY USING BY VALUE HKEY RETURNING RC END-CALL.
#64BitWindowsAccessRegistryHi Bernd,
Can you please provide some more detail here?
Your example does not actually show which registry key you are trying to access, nor do you state what the error actually is that is being returned?
Is this a 32-bit native application running under Windows 7 64-bit?
Are you trying to access a 64-bit registry entry?
I found a good post explaining some of the potential problems and solutions with trying to access a 64-bit registry entry from a 32-bit application here:
Thanks.
Hi!
I have a Problem to Access / Read the Regestry via Windows API under Windows 7 64 Bit
Under Windows 7 32 Bit there is no Problem...
Here is the code that works under 32 Bit without Problems:
MOVE SPACES TO REG-KEY-ERGEBNIS. MOVE SPACES TO KEY-AUFRUF.
STRING REG-KEY-HAUPTKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF END-STRING.
MOVE KEY-AUFRUF TO SUBKEY.
CALL WINAPI REGOPENKEYEX USING BY VALUE HKEY BY REFERENCE SUBKEY BY VALUE 0 BY VALUE KEY-QUERY-VALUE BY REFERENCE HKEYRESULT RETURNING RC END-CALL.
MOVE 256 TO VALUEDATA-LEN. MOVE LOW-Values TO VALUEDATA.
IF REG-KEY-SUBKEY EQUAL TO SPACES MOVE LOW-Values TO VALUENAME ELSE MOVE SPACES TO KEY-AUFRUF STRING REG-KEY-SUBKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF MOVE KEY-AUFRUF TO VALUENAME END-IF.
CALL WINAPI REGQUERYVALUEEX USING BY VALUE HKEYRESULT BY REFERENCE VALUENAME BY VALUE NULLPTR BY REFERENCE VALUETYPE BY REFERENCE VALUEDATA BY REFERENCE VALUEDATA-LEN RETURNING RC END-CALL.
IF RC EQUAL TO ZEROES STRING VALUEDATA DELIMITED BY X"00" INTO REG-KEY-ERGEBNIS END-IF.
MOVE RC TO REG-KEY-ERGEBNIS-CODE.
CALL WINAPI REGCLOSEKEY USING BY VALUE HKEY RETURNING RC END-CALL.
#64BitWindowsAccessRegistryCan I send you a zip file?
Hi!
I have a Problem to Access / Read the Regestry via Windows API under Windows 7 64 Bit
Under Windows 7 32 Bit there is no Problem...
Here is the code that works under 32 Bit without Problems:
MOVE SPACES TO REG-KEY-ERGEBNIS. MOVE SPACES TO KEY-AUFRUF.
STRING REG-KEY-HAUPTKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF END-STRING.
MOVE KEY-AUFRUF TO SUBKEY.
CALL WINAPI REGOPENKEYEX USING BY VALUE HKEY BY REFERENCE SUBKEY BY VALUE 0 BY VALUE KEY-QUERY-VALUE BY REFERENCE HKEYRESULT RETURNING RC END-CALL.
MOVE 256 TO VALUEDATA-LEN. MOVE LOW-Values TO VALUEDATA.
IF REG-KEY-SUBKEY EQUAL TO SPACES MOVE LOW-Values TO VALUENAME ELSE MOVE SPACES TO KEY-AUFRUF STRING REG-KEY-SUBKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF MOVE KEY-AUFRUF TO VALUENAME END-IF.
CALL WINAPI REGQUERYVALUEEX USING BY VALUE HKEYRESULT BY REFERENCE VALUENAME BY VALUE NULLPTR BY REFERENCE VALUETYPE BY REFERENCE VALUEDATA BY REFERENCE VALUEDATA-LEN RETURNING RC END-CALL.
IF RC EQUAL TO ZEROES STRING VALUEDATA DELIMITED BY X"00" INTO REG-KEY-ERGEBNIS END-IF.
MOVE RC TO REG-KEY-ERGEBNIS-CODE.
CALL WINAPI REGCLOSEKEY USING BY VALUE HKEY RETURNING RC END-CALL.
#64BitWindowsAccessRegistryCan I send you a zip file?
Hi!
I have a Problem to Access / Read the Regestry via Windows API under Windows 7 64 Bit
Under Windows 7 32 Bit there is no Problem...
Here is the code that works under 32 Bit without Problems:
MOVE SPACES TO REG-KEY-ERGEBNIS. MOVE SPACES TO KEY-AUFRUF.
STRING REG-KEY-HAUPTKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF END-STRING.
MOVE KEY-AUFRUF TO SUBKEY.
CALL WINAPI REGOPENKEYEX USING BY VALUE HKEY BY REFERENCE SUBKEY BY VALUE 0 BY VALUE KEY-QUERY-VALUE BY REFERENCE HKEYRESULT RETURNING RC END-CALL.
MOVE 256 TO VALUEDATA-LEN. MOVE LOW-Values TO VALUEDATA.
IF REG-KEY-SUBKEY EQUAL TO SPACES MOVE LOW-Values TO VALUENAME ELSE MOVE SPACES TO KEY-AUFRUF STRING REG-KEY-SUBKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF MOVE KEY-AUFRUF TO VALUENAME END-IF.
CALL WINAPI REGQUERYVALUEEX USING BY VALUE HKEYRESULT BY REFERENCE VALUENAME BY VALUE NULLPTR BY REFERENCE VALUETYPE BY REFERENCE VALUEDATA BY REFERENCE VALUEDATA-LEN RETURNING RC END-CALL.
IF RC EQUAL TO ZEROES STRING VALUEDATA DELIMITED BY X"00" INTO REG-KEY-ERGEBNIS END-IF.
MOVE RC TO REG-KEY-ERGEBNIS-CODE.
CALL WINAPI REGCLOSEKEY USING BY VALUE HKEY RETURNING RC END-CALL.
#64BitWindowsAccessRegistryYes, please send to chris.glazier@microfocus.com.
You may have to rename it to .txt or .docx or it may be stripped by our e-mail filter...
Hi!
I have a Problem to Access / Read the Regestry via Windows API under Windows 7 64 Bit
Under Windows 7 32 Bit there is no Problem...
Here is the code that works under 32 Bit without Problems:
MOVE SPACES TO REG-KEY-ERGEBNIS. MOVE SPACES TO KEY-AUFRUF.
STRING REG-KEY-HAUPTKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF END-STRING.
MOVE KEY-AUFRUF TO SUBKEY.
CALL WINAPI REGOPENKEYEX USING BY VALUE HKEY BY REFERENCE SUBKEY BY VALUE 0 BY VALUE KEY-QUERY-VALUE BY REFERENCE HKEYRESULT RETURNING RC END-CALL.
MOVE 256 TO VALUEDATA-LEN. MOVE LOW-Values TO VALUEDATA.
IF REG-KEY-SUBKEY EQUAL TO SPACES MOVE LOW-Values TO VALUENAME ELSE MOVE SPACES TO KEY-AUFRUF STRING REG-KEY-SUBKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF MOVE KEY-AUFRUF TO VALUENAME END-IF.
CALL WINAPI REGQUERYVALUEEX USING BY VALUE HKEYRESULT BY REFERENCE VALUENAME BY VALUE NULLPTR BY REFERENCE VALUETYPE BY REFERENCE VALUEDATA BY REFERENCE VALUEDATA-LEN RETURNING RC END-CALL.
IF RC EQUAL TO ZEROES STRING VALUEDATA DELIMITED BY X"00" INTO REG-KEY-ERGEBNIS END-IF.
MOVE RC TO REG-KEY-ERGEBNIS-CODE.
CALL WINAPI REGCLOSEKEY USING BY VALUE HKEY RETURNING RC END-CALL.
#64BitWindowsAccessRegistryYes, I received the zip file. Thank you.
I tested your example with default values which are trying to open the key HKLM with subkey of:
System\\CurrentControlSet\\Services\\....
This fails with a rc = 2.
Why is there the āā¦ā at the end of the subkey name?
If I remove the āā¦.ā then it opens successfully.
Also, if you wish to open a key under Software\\ when running a 32-bit application under Windows 64 then you need to use an additional flag to tell it to use either the 32-bit registry hive or the 64-bit registry hive.
This is covered in the article link that I previously referenced:
78 KEY-WOW64-32KEY value h'0200'.
78 KEY-WOW64-64KEY value h'0100'.
01 open-flags pic s9(9) comp-5.
compute open-flags = key-query-value b-or KEY-WOW64-64KEY
CALL WINAPI REGOPENKEYEX USING
BY VALUE HKEY
BY REFERENCE SUBKEY
BY VALUE 0
BY VALUE open-flags
BY REFERENCE HKEYRESULT
RETURNING RC
END-CALL.
Hi!
I have a Problem to Access / Read the Regestry via Windows API under Windows 7 64 Bit
Under Windows 7 32 Bit there is no Problem...
Here is the code that works under 32 Bit without Problems:
MOVE SPACES TO REG-KEY-ERGEBNIS. MOVE SPACES TO KEY-AUFRUF.
STRING REG-KEY-HAUPTKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF END-STRING.
MOVE KEY-AUFRUF TO SUBKEY.
CALL WINAPI REGOPENKEYEX USING BY VALUE HKEY BY REFERENCE SUBKEY BY VALUE 0 BY VALUE KEY-QUERY-VALUE BY REFERENCE HKEYRESULT RETURNING RC END-CALL.
MOVE 256 TO VALUEDATA-LEN. MOVE LOW-Values TO VALUEDATA.
IF REG-KEY-SUBKEY EQUAL TO SPACES MOVE LOW-Values TO VALUENAME ELSE MOVE SPACES TO KEY-AUFRUF STRING REG-KEY-SUBKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF MOVE KEY-AUFRUF TO VALUENAME END-IF.
CALL WINAPI REGQUERYVALUEEX USING BY VALUE HKEYRESULT BY REFERENCE VALUENAME BY VALUE NULLPTR BY REFERENCE VALUETYPE BY REFERENCE VALUEDATA BY REFERENCE VALUEDATA-LEN RETURNING RC END-CALL.
IF RC EQUAL TO ZEROES STRING VALUEDATA DELIMITED BY X"00" INTO REG-KEY-ERGEBNIS END-IF.
MOVE RC TO REG-KEY-ERGEBNIS-CODE.
CALL WINAPI REGCLOSEKEY USING BY VALUE HKEY RETURNING RC END-CALL.
#64BitWindowsAccessRegistryThats it!!!
Great!
Now at last:
This call give you the Windows Version back:
CALL WINAPI "GetVersion" RETURNING DWVERSIONINFO.
So far so good !
But how can I find out is it 32/64Bit Windows
Best Regards
Bernd
Hi!
I have a Problem to Access / Read the Regestry via Windows API under Windows 7 64 Bit
Under Windows 7 32 Bit there is no Problem...
Here is the code that works under 32 Bit without Problems:
MOVE SPACES TO REG-KEY-ERGEBNIS. MOVE SPACES TO KEY-AUFRUF.
STRING REG-KEY-HAUPTKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF END-STRING.
MOVE KEY-AUFRUF TO SUBKEY.
CALL WINAPI REGOPENKEYEX USING BY VALUE HKEY BY REFERENCE SUBKEY BY VALUE 0 BY VALUE KEY-QUERY-VALUE BY REFERENCE HKEYRESULT RETURNING RC END-CALL.
MOVE 256 TO VALUEDATA-LEN. MOVE LOW-Values TO VALUEDATA.
IF REG-KEY-SUBKEY EQUAL TO SPACES MOVE LOW-Values TO VALUENAME ELSE MOVE SPACES TO KEY-AUFRUF STRING REG-KEY-SUBKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF MOVE KEY-AUFRUF TO VALUENAME END-IF.
CALL WINAPI REGQUERYVALUEEX USING BY VALUE HKEYRESULT BY REFERENCE VALUENAME BY VALUE NULLPTR BY REFERENCE VALUETYPE BY REFERENCE VALUEDATA BY REFERENCE VALUEDATA-LEN RETURNING RC END-CALL.
IF RC EQUAL TO ZEROES STRING VALUEDATA DELIMITED BY X"00" INTO REG-KEY-ERGEBNIS END-IF.
MOVE RC TO REG-KEY-ERGEBNIS-CODE.
CALL WINAPI REGCLOSEKEY USING BY VALUE HKEY RETURNING RC END-CALL.
#64BitWindowsAccessRegistryThats it!!!
Great!
Now at last:
This call give you the Windows Version back:
CALL WINAPI "GetVersion" RETURNING DWVERSIONINFO.
So far so good !
But how can I find out is it 32/64Bit Windows
Best Regards
Bernd
Hi!
I have a Problem to Access / Read the Regestry via Windows API under Windows 7 64 Bit
Under Windows 7 32 Bit there is no Problem...
Here is the code that works under 32 Bit without Problems:
MOVE SPACES TO REG-KEY-ERGEBNIS. MOVE SPACES TO KEY-AUFRUF.
STRING REG-KEY-HAUPTKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF END-STRING.
MOVE KEY-AUFRUF TO SUBKEY.
CALL WINAPI REGOPENKEYEX USING BY VALUE HKEY BY REFERENCE SUBKEY BY VALUE 0 BY VALUE KEY-QUERY-VALUE BY REFERENCE HKEYRESULT RETURNING RC END-CALL.
MOVE 256 TO VALUEDATA-LEN. MOVE LOW-Values TO VALUEDATA.
IF REG-KEY-SUBKEY EQUAL TO SPACES MOVE LOW-Values TO VALUENAME ELSE MOVE SPACES TO KEY-AUFRUF STRING REG-KEY-SUBKEY DELIMITED BY " " X"00" DELIMITED BY SIZE INTO KEY-AUFRUF MOVE KEY-AUFRUF TO VALUENAME END-IF.
CALL WINAPI REGQUERYVALUEEX USING BY VALUE HKEYRESULT BY REFERENCE VALUENAME BY VALUE NULLPTR BY REFERENCE VALUETYPE BY REFERENCE VALUEDATA BY REFERENCE VALUEDATA-LEN RETURNING RC END-CALL.
IF RC EQUAL TO ZEROES STRING VALUEDATA DELIMITED BY X"00" INTO REG-KEY-ERGEBNIS END-IF.
MOVE RC TO REG-KEY-ERGEBNIS-CODE.
CALL WINAPI REGCLOSEKEY USING BY VALUE HKEY RETURNING RC END-CALL.
#64BitWindowsAccessRegistryPlease see the response to a previous post that I made regarding this issue:
community.microfocus.com/.../10005.aspx
Thanks.