当前位置:   article > 正文

windows7 下WOW6432Node和dump文件生成问题

wow6432node

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这个坑

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/191358
推荐阅读
相关标签
  

闽ICP备14008679号