• win7 64位注册表操作兼容问题解决


    在win7 和 win 2008 的64位 机器上取注册表键值时, 发现键值存在,在调用RegQueryValueEx的时候总是查询失败,返回了2,一直以为是权限的问题,将其提升到debug还是不行,网络上也有朋友说创建.mainfest的文件提升权限,后面在MSDN网上也找到相关说明。不过还是失败。把这个程序放到xp下和win7 32下均能正常得到读取出来的值.于是就想会不会是64位OS的问题呢?最后还是在微软最新MSDN在线找到了答案。原来是在64位OS下操作注册表必须注意设置一个值。首先在文件头定义:

    #define KEY_WOW64_64KEY 256    // 兼容64位主机

    然后将RegOpenKeyEx的参数加上

    KEY_ALL_ACCESS|KEY_WOW64_64KEY,   // 所有访问权限

    至此问题解决了,机器上的MSDN是2001年的,看来太老了。多看看官方的MSDN文档吧。另外提供分享一个判断机器是64为还是32位的的函数:

    // 返回值:TRUE说明是64位否则为32位OS
    typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
    LPFN_ISWOW64PROCESS fnIsWow64Process;
    BOOL IsWow64()
    {
        BOOL bIsWow64 = FALSE;
        fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
            GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
        if (NULL != fnIsWow64Process)
        {
            if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
            {
                // handle error
                AfxMessageBox("IsWow64 error!");
            }
        }
        return bIsWow64;
    }

    参考文档:
    [1]http://msdn.microsoft.com/en-us/library/aa384129%28v=VS.85%29.aspx

  • 相关阅读:
    Gym 100801D Distribution in Metagonia (数学思维题)
    Gym 100801E Easy Arithmetic (思维题)
    GNOME编辑器--gedit 构建基本脚本
    linux默认编辑器 sublime
    su和su-命令的本质区别
    #ifdef #ifndef使用
    linux 安装软件程序
    linux命令行与shell脚本编程大全---更多bash shell命令
    预处理语句--#define、#error和#warning
    FW开发代码规范---小任性(2)
  • 原文地址:https://www.cnblogs.com/qintangtao/p/2849026.html
Copyright © 2020-2023  润新知