用代码设置Minidump的注册表项

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

晒晒吧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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值