用代码设置Minidump的注册表项

原创 2007年09月24日 11:59:00

今天实在无聊,写了一个超级没有技术含量的代码:(

晒晒吧o(∩_∩)o...

 int SetMinidump(int debuglevel)
{
 HKEY hKEY;
 DWORD ret;
 DWORD value;
 char* szvalue = NULL;


 LPCTSTR data_Set = "SYSTEM//CurrentControlSet//Control//CrashControl";

 ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_WRITE, &hKEY);
 if(ret != ERROR_SUCCESS)
 {
  PrintDebugInfo(debuglevel,"[SetMinidump] Open Register DataSet Error, Return");
  return 0;
 }
 else
 {
  PrintDebugInfo(debuglevel,"[SetMinidump] Open Register DataSet              [OK]");
 }

 //是否自动重启
 //0x00: 不自动重启  0x01: 自动重启   
 value = 0;
 ret = RegSetValueEx(hKEY, "AutoReboot", NULL, REG_DWORD, (LPBYTE)&value, 4);
 if(ret != ERROR_SUCCESS)
 {
  RegCloseKey(hKEY);
  PrintDebugInfo(debuglevel,"[SetMinidump] Set CrashControl AutoReboot Error, Return");
  return 0;
 }
 else
 {  PrintDebugInfo(debuglevel,"[SetMinidump] Set CrashControl AutoReboot        [OK]");

 }

 //设置dump类型:
 //  0x00:不记录    0x01:记录小转储64K   0x02:核心转储  0x03: 完全转储
 value = 3;
 ret = RegSetValueEx(hKEY, "CrashDumpEnabled", NULL, REG_DWORD, (LPBYTE)&value, 4);
 if(ret != ERROR_SUCCESS)
 {
  RegCloseKey(hKEY);
  PrintDebugInfo(debuglevel,"[SetMinidump] Set CrashControl CrashDumpEnabled Error, Return");
  return 0;
 }
 else
 {
  PrintDebugInfo(debuglevel,"[SetMinidump] Set CrashControl CrashDumpEnabled  [OK]");
 }

 //设置dump文件名
 szvalue = "%SystemRoot%//MEMORY.DMP";
 value = strlen(szvalue);
 ret = RegSetValueEx(hKEY, "DumpFile", NULL, REG_EXPAND_SZ, (LPBYTE)szvalue, value);
 if(ret != ERROR_SUCCESS)
 {
  RegCloseKey(hKEY);
  PrintDebugInfo(debuglevel,"[SetMinidump] Set CrashControl DumpFile Error, Return");
  return 0;
 }
 else
 { 
  PrintDebugInfo(debuglevel,"[SetMinidump] Set CrashControl DumpFile          [OK]");
 }


 //设置是否记录Minidump
 //0x00:不记录minidump   0x01:记录minidump
 value = 1;
 ret = RegSetValueEx(hKEY, "LogEvent", NULL, REG_DWORD, (LPBYTE)&value, 4);
 if(ret != ERROR_SUCCESS)
 {
  RegCloseKey(hKEY);
  PrintDebugInfo(debuglevel,"[SetMinidump] Set CrashControl LogEvent Error, Return");
  return 0;
 }
 else
 { 
  PrintDebugInfo(debuglevel,"[SetMinidump] Set CrashControl LogEvent          [OK]");
 }

 //设置Minidump目录
    szvalue = "%SystemRoot%//Minidump";
 value = strlen(szvalue);
 ret = RegSetValueEx(hKEY, "MinidumpDir", NULL, REG_EXPAND_SZ, (LPBYTE)szvalue, value);
 if(ret != ERROR_SUCCESS)
 {
  RegCloseKey(hKEY);
  PrintDebugInfo(debuglevel,"[SetMinidump] Set CrashControl MinidumpDir Error, Return");
  return 0;
 }
 else
 { 
  PrintDebugInfo(debuglevel,"[SetMinidump] Set CrashControl MinidumpDir       [OK]");
 }
 //设置是否覆盖
 //0x00:不覆盖   0x01:覆盖
 value = 1;
 ret = RegSetValueEx(hKEY, "Overwrite", NULL, REG_DWORD, (LPBYTE)&value, 4);
 if(ret != ERROR_SUCCESS)
 {
  RegCloseKey(hKEY);
  PrintDebugInfo(debuglevel,"[SetMinidump] Set CrashControl Overwrite Error, Return");
  return 0;
 }
 else
 {
  PrintDebugInfo(debuglevel,"[SetMinidump] Set CrashControl Overwrite         [OK]");
 }

 //设置是否发送告警
 //0x00:不发送   0x01:发送
 value = 1;
 ret = RegSetValueEx(hKEY, "SendAlert", NULL, REG_DWORD, (LPBYTE)&value, 4);
 if(ret != ERROR_SUCCESS)
 {
  RegCloseKey(hKEY);
  PrintDebugInfo(debuglevel,"[SetMinidump] Set CrashControl SendAlert Error, Return");
  return 0;
 }
 else
 {
  PrintDebugInfo(debuglevel,"[SetMinidump] Set CrashControl SendAlert         [OK]");
 }


 RegCloseKey(hKEY);
 return 1;
}

void PrintDebugInfo(int level,char *fmt, ...)
{
 if(level == 0)
 {
  return;
 }
 
 char out[1024];
 va_list body;
 va_start(body, fmt);
 vsprintf(out, fmt, body);     // 译注:格式化输入的字符串 fmtt
 va_end(body);                 //       到输出字符串 ou
 OutputDebugString(out);       // 译注:输出格式化后的字符串到调试器
}

 

写那么多代码,没啥用,不如写个reg文件来得实惠

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/CrashControl]
"AutoReboot"=dword:00000000
"CrashDumpEnabled"=dword:00000003
"DumpFile"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,/
  74,00,25,00,5c,00,4d,00,45,00,4d,00,4f,00,52,00,59,00,2e,00,44,00,4d,00,50,/
  00,00,00
"LogEvent"=dword:00000001
"MinidumpDir"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,/
  00,74,00,25,00,5c,00,4d,00,69,00,6e,00,69,00,64,00,75,00,6d,00,70,00,00,00
"Overwrite"=dword:00000001
"SendAlert"=dword:00000001

 

写注册表设置开机启动的代码

[cpp] view plaincopyprint? void CSetDlg::OnBnClickedSetSet()  {      // TODO: 在此添加控件通知处理程序代码 ...

C/C++枚举注册表某项下的所有子项【代码示例】

/*  * 版权:  * 文件名称:RegEnumKey.c  * 摘要:枚举注册表下的所有子项   * 当前版本:  * 作者:烈风  * 完成日期:  */ # include # incl...
  • lhyhr
  • lhyhr
  • 2014年11月17日 13:47
  • 1567

代码实现操作拥有TrustedInstaller权限的注册表项

前段时间要做一项工作,需要tong'guo'dai'ma

C/C++新建注册表项【代码示例】

使用Windows API 函数中的T函数来实现对注册表某项下的所有子项进行枚举。
  • lhyhr
  • lhyhr
  • 2014年11月17日 18:03
  • 1996

【代码备忘】VC设置电脑环境变量、注册表操作

欢迎加入C/C++ QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611  【设置电脑环境变量】 设置电脑环境变量很简单,因为window而言,环境...
  • xinmuba
  • xinmuba
  • 2014年04月21日 09:05
  • 1080

vs2008中,调试minidump的设置

网上有很多相关文章,不过不是外文的就是不够清晰。我还是自己记录一下吧。 一、 首先是被dump的工程,一定要有以下的设置,缺一不可: C/C++/General/Debug Information...

vs2008中,调试minidump的设置(转)

转自: http://blog.csdn.net/genesisbible/article/details/6302864 网上有很多相关文章,不过不是外文的就是不够清晰。我还是自己记录一下吧。...

注册表中一些与用户登录和屏保相关的设置项

以下给出一个reg文件,可以清除某些讨厌的设置(例如某些公司预装的操作系统针对所谓的“信息安全”进行的设置),主要包括用户登入时不需要按ctrl+alt+del,不显示legalnotice,登入界面...

设置注册表键值的代码资源

  • 2010年07月01日 13:38
  • 62KB
  • 下载

WinCE文件系统及注册表项设置(HIVE-basedRegistry和RAM-based Registry设置方法)

HIVE-basedRegistry和RAM-based Registry设置方法 一、硬件平台 友善之臂Tiny6410开发板(7寸) 二、软件平台 VS2005、PB6.0R3,安装方法在...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用代码设置Minidump的注册表项
举报原因:
原因补充:

(最多只允许输入30个字)