Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 从Haskell访问64位注册表_Winapi_Haskell_Registry - Fatal编程技术网

Winapi 从Haskell访问64位注册表

Winapi 从Haskell访问64位注册表,winapi,haskell,registry,Winapi,Haskell,Registry,我在Haskell中有一个Windows程序(因此是32位的)。我想访问注册表的64位视图。Windows API要求使用RegOpenKeyEx和to或inKEY\u WOW64\u 64KEY(0x200)。(我使用的是Haskell平台附带的Windows API。) 在我的程序中,结果是: import qualified System.Win32.Registry as W32 import qualified System.Win32.Types as W32 ..

我在Haskell中有一个Windows程序(因此是32位的)。我想访问注册表的64位视图。Windows API要求使用
RegOpenKeyEx
和to或in
KEY\u WOW64\u 64KEY
0x200
)。(我使用的是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:invalid参数(系统找不到指定的文件)。

检查呼叫进程监视器显示以下输出:

该API调用以某种方式结束,丢弃了该标志并进入
Wow6432Node
子树。还举例说明了,尽管事件暗指
RegOpenKey
,但我认为它确实在调用
RegOpenKeyEx
,如事件堆栈(以及绑定的错误消息)所示

有什么建议吗

谢谢

它们是:

但你写道:

let kEY_WOW64_64KEY = 0x200
因此,实际上您要求的是32位视图。你需要写:

let kEY_WOW64_64KEY = 0x100

完全正确这正是问题所在。谢谢。这个答案对细节的关注让人印象深刻。非常有用的共同编码自ghc 7.6.1以来,在Windows上以64位模式使用Haskell也是可能的。
let kEY_WOW64_64KEY = 0x100