我试图使用JAVA在64位Win7上读写windows注册表。
首先,我尝试了JDK 及其反射用法。这是一个很好的解决方案,但它只支持读取/写入REG_SZ类型(string)值。
不幸的是,我需要读/写REG_BINARY,所以放弃它。
其次,我尝试了JNI登记处。阅读是可以的,但写作通常会失败,因为写HKLM需要管理员的权限。我不知道如何在JAVA中获得管理员权限。
最后,我尝试了JNA (Java ),这是一个用于使用本机库的优秀项目,并通过Advapi32Util和Advapi32在平台库(Advapi32Util)和Advapi32中支持Windows注册表。这是非常好和简单的使用。并且编写注册表不需要管理员权限。
但是,如何在WOW6432Node上的64位JVM中读写32位注册表(在Win7节点下)?
默认情况下,64位节点在64位JVM中进行读写,32位节点在32位JVM中进行读写。
但是在64位JVM中,我希望读/写32位节点(例如,HKLM->SOFTWARE->Wow6432Node->ODBC)。我怎么能这么做?
发布于 2015-12-23 07:19:01
我得到了答案:使用64位Windows:
HKLM->SOFTWARE->ODBC的32位JVM将被重定向到HKLM->SOFTWARE->Wow6432Node->ODBC。HKLM->SOFTWARE->ODBC的64位JVM将是HKLM->SOFTWARE->ODBC (这是64位注册表)。HKLM->SOFTWARE->Wow6432Node->ODBC。(但在C++中,win32 exe不能直接访问HKLM->SOFTWARE->Wow6432Node->ODBC,应该使用wow64标志访问HKLM->SOFTWARE->ODBC )。发布于 2019-07-16 07:12:07
JNA 5向Advapi32Util添加了新的方法,允许您指定samDesiredFlags,包括KEY_WOW64_32KEY或KEY_WOW64_64KEY。
PR在这里:https://github.com/java-native-access/jna/pull/1001
这里的注册表安全性和访问文档:https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry-key-security-and-access-rights
KEY_WOW64_32KEY (0x0200)表示64位Windows上的应用程序应该在32位注册表视图上操作.32位Windows忽略此标志.有关更多信息,请参见访问备用注册表视图。必须使用OR运算符与此表中查询或访问注册表值的其他标志组合此标志。Windows 2000:不支持此标志。 KEY_WOW64_64KEY (0x0100)表示64位Windows上的应用程序应该在64位注册表视图上操作.32位Windows忽略此标志.有关更多信息,请参见访问备用注册表视图。必须使用OR运算符与此表中查询或访问注册表值的其他标志组合此标志。Windows 2000:不支持此标志。
https://stackoverflow.com/questions/34407938
复制相似问题