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

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...