none
Win7_32Bit/64Bit注册表重定向问题. RRS feed

  • 问题

  • HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Run\\            /* 64Bit的开机自动启动的路径 */

    HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\                                    /* 32Bit的开机自动启动的路径 */

    这两个路径会被自动重定向么 ???

     

    我用以下代码编译成X64代码, 结果注册表值还是被写到  "32Bit的路径" 下面去了 !    这是为什么呢 ?

    RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\"),KEY_WRITE,&UHkey)

    RegSetValueEx(UHkey,L"It Should not be here",0,REG_SZ,(CONST BYTE *)nodeValue,MAX_PATH);

    MSDN库里面对win7&vista的注册表重定向的说明, 貌似意思是:  系统会自动根据程序类型(是32还是64位)去把操作定位到32或者Wow6432Node下面去.

    但是我跑到路经下去看的时候, 发现Wow6432Node里面的Run下面没有, 结果被写到32位的那个Run下面去了.

     

    我在RegOpenKeyEx()的第三个参数上面添加了KEY_WOW64_64KEY属性, 发现结果依旧不是预期的.

    MSDN库里面说KEY_WOW64_64KEY属性可以让32Bit或者64Bit程序 都 写道Wow3264Node里面去的吖 !!!

    好奇怪 !!

     

    我的环境是 Win7 64Bit  + VS 2010,  编译成 X64 Release

    2011年5月11日 14:32

答案

  • 64位程序默认就是64位注册表视图,不需要用WOW就可以。但是写HKLM的话,需要以管理员模式运行程序。

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    • 已标记为答案 Rob Pan 2011年5月20日 2:15
    2011年5月12日 14:17
    版主

全部回复

  • 问题是64位系统系统启动的是64位的Explorer.exe,读取Run注册表的时候不需要注册表重定向。你的程序是32位但是需要写64位的自动启动的话,参考Accessing an Alternate Registry View



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年5月12日 0:49
    版主
  • Re ShengJiang,

              一个64位的程序, 往HK_LM下的SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\路径写键值, 默认是应该写到Wow3264Node下面那个里面去?  还是应该写到非Wow3264Node那个里面 ?

     

              那些"需要区分32还是64的注册表路径", 是 "只要程序是64位, 它就默认会被写到Wow3264Node里面去么" ??

              还是说, 我们必须在用RegOpenKeyEx()的时候, 在第二个参数里面明确的加上Wow3264Node, 才能打开对应64位的那一组路径 ?

    非常感谢!

    2011年5月12日 14:05
  • 64位程序默认就是64位注册表视图,不需要用WOW就可以。但是写HKLM的话,需要以管理员模式运行程序。

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    • 已标记为答案 Rob Pan 2011年5月20日 2:15
    2011年5月12日 14:17
    版主