• windows7 下WOW6432Node和dump文件生成问题


    1,win7生成dump文件

    在win7下一直无法生成dump文件,发现需要在注册表

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting项目新建一个LocalDumps,于是使用以下代码

    1. const char* sub_key = "SOFTWARE\\Microsoft\\Windows\\Windows Error Reporting\\LocalDumps";
    2. HKEY hkey = NULL;
    3. LSTATUS res_ret = RegOpenKeyExA(HKEY_LOCAL_MACHINE, sub_key, 0, KEY_WRITE, &hkey);
    4. if (res_ret != ERROR_SUCCESS) {
    5. RegCreateKeyA(HKEY_LOCAL_MACHINE, sub_key, &hkey);
    6. }
    7. else
    8. {
    9. printf("ok");
    10. }
    11. RegCloseKey(hkey);

    代码没有报错,但是没找到LocalDumps,全注册表搜索,发现居然在

    HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\Windows Error Reporting下面新建了LocalDumps,因为win7是64位系统所以无法生成dump文件需要在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting下生成LocalDumps

    2,WOW6432Node机制

    64位版本Windows包含的默认64位版本注册表编辑器 (Regedit.exe) 可显示 64 位和 32 位的 注册表项。WOW64 注册表重定向器为32位程序提供了对应于32位程序注册表项的不同注册表项。在 64 位版本的注册表编辑器中,32 位注册表项显示在以下注册表项下:HKEY_LOCAL_MACHINE\Software\WOW6432Node

    64位程序操作的是

     32位程序操作的是:

     32位程序想操作64位的注册表需要如下代码:

    1. DWORD dwDisposition;
    2. const char* sub_key = "SOFTWARE\\Microsoft\\Windows\\Windows Error Reporting\\LocalDumps";
    3. HKEY hkey = NULL;
    4. LSTATUS res_ret = RegOpenKeyExA(HKEY_LOCAL_MACHINE, sub_key, 0, KEY_WRITE | KEY_WOW64_64KEY, &hkey);
    5. if (res_ret != ERROR_SUCCESS) {
    6. RegCreateKeyExA(HKEY_LOCAL_MACHINE, sub_key, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS | KEY_WOW64_64KEY, NULL, &hkey, &dwDisposition);
    7. }
    8. RegCloseKey(hkey);

    3,总结

    win7 64位系统 注册表有32位和64位程序操作的不同路径,小心WOW6432Node这个坑

  • 相关阅读:
    【数组】二分查找(减不减一,看初始化!)
    25.leetcode---只出现一次的数字(Java版)
    C++入门
    SSM整合(三)
    进程地址空间初识
    SpringCloud——服务注册——Consul
    设计模式之桥接模式(六)
    电磁场知识回顾——基本概念
    【Proteus仿真】【STM32单片机】汽车尾灯控制设计
    springboot系列(二十二):集成easypoi实现Excel文件的导入导出(准备篇)
  • 原文地址:https://blog.csdn.net/thehunters/article/details/127750191