微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

winapi – 从Haskell访问64位注册表

我在 Haskell中有一个 Windows程序(因此是32位).我想访问注册表的64位视图. Windows API表示在KEY_WOW64_64KEY(0x200)中使用RegOpenKeyEx和OR. (我将 standard Haskell bindings用于Haskell平台附带的Windows API.)

在我的程序中,这最终是:

import qualified System.Win32.Registry as W32
  import qualified System.Win32.Types    as W32
  ...
      let kEY_WOW64_64KEY = 0x200 -- has no binding in the library currently
      let regSam = kEY_WOW64_64KEY .|. ... other flags
      bracket (W32.regOpenKeyEx rootCode kname regSam) W32.regCloseKey $\k -> ...

但是,我得到异常RegOpenKeyEx:无效参数(系统找不到指定的文件.)

检查Process Monitor中的调用显示以下输出

API调用以某种方式最终丢弃了标志并进入Wow6432Node子树.还说明了,尽管事件包含了RegOpenKey,我认为它实际上调用了RegOpenKeyEx,如事件的堆栈(以及绑定的错误消息)所示.

有什么建议?

谢谢!

解决方法

alternate registry view flags是:

KEY_WOW64_64KEY 0x0100  
KEY_WOW64_32KEY 0x0200

但你写道:

let kEY_WOW64_64KEY = 0x200

所以你实际上是在寻求32位视图.你需要写:

let kEY_WOW64_64KEY = 0x100

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐