首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JAVA和JNA在64位Win 7上读取/写入windows注册表

使用JAVA和JNA在64位Win 7上读取/写入windows注册表
EN

Stack Overflow用户
提问于 2015-12-22 03:17:31
回答 2查看 896关注 0票数 6

我试图使用JAVA在64位Win7上读写windows注册表。

首先,我尝试了JDK 及其反射用法。这是一个很好的解决方案,但它只支持读取/写入REG_SZ类型(string)值。

不幸的是,我需要读/写REG_BINARY,所以放弃它。

其次,我尝试了JNI登记处。阅读是可以的,但写作通常会失败,因为写HKLM需要管理员的权限。我不知道如何在JAVA中获得管理员权限。

最后,我尝试了JNA (Java ),这是一个用于使用本机库的优秀项目,并通过Advapi32UtilAdvapi32在平台库(Advapi32Util)和Advapi32中支持Windows注册表。这是非常好和简单的使用。并且编写注册表不需要管理员权限。

但是,如何在WOW6432Node上的64位JVM中读写32位注册表(在Win7节点下)?

默认情况下,64位节点在64位JVM中进行读写,32位节点在32位JVM中进行读写。

但是在64位JVM中,我希望读/写32位节点(例如,HKLM->SOFTWARE->Wow6432Node->ODBC)。我怎么能这么做?

EN

回答 2

Stack Overflow用户

发布于 2015-12-23 07:19:01

我得到了答案:使用64位Windows:

  1. 访问HKLM->SOFTWARE->ODBC的32位JVM将被重定向到HKLM->SOFTWARE->Wow6432Node->ODBC
  2. 访问HKLM->SOFTWARE->ODBC的64位JVM将是HKLM->SOFTWARE->ODBC (这是64位注册表)。
  3. 允许32位或64位JVM访问HKLM->SOFTWARE->Wow6432Node->ODBC。(但在C++中,win32 exe不能直接访问HKLM->SOFTWARE->Wow6432Node->ODBC,应该使用wow64标志访问HKLM->SOFTWARE->ODBC )。
票数 1
EN

Stack Overflow用户

发布于 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:不支持此标志。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34407938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档