hur.cn - 华软网

 热门搜索

修改注册表键值问题

  作者:未知    来源:网络    更新时间:2011/8/12
OS:windows7
环境:MFC

我像修改注册表里面的一个键值。
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\COM Name Arbiter里面的ComDB。类型为REG_BINARY.
现在值为3d 00 00 00 00 00 00 00 00 00 00.修改为00 00 00 00 00 00 00 00 00 00 00.

下面是我用的代码,修改不成功。程序方法错误,让debug。在strlen.asm文件的下面的地方出现中断点。
main_loop:
        mov     eax,dword ptr [ecx]     ; read 4 bytes

同志们,请帮忙看看那里出错了。
C++">
void CDSADlg::OnBnClickedButton3()
{
         SubKey = "SYSTEM\\ControlSet001\\Control\\COM Name Arbiter";
ValueName = "ComDB";
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,SubKey,0,KEY_WRITE,&rKey)==ERROR_SUCCESS)
{
if(RegSetValueEx(rKey,ValueName,NULL,REG_SZ,SetContent_S,
   CString(SetContent_S).GetLength())==ERROR_SUCCESS)
{
AfxMessageBox("修改成功");
RegCloseKey(rKey);
}

}
else
{
AfxMessageBox("不能打开注册表");

}
}

---华软 网友回答---
是不是没权限?你直接用regedit能否修改?
---华软网友回复---
HKEY_LOCAL_MACHINE一般当前用户无法修改的,权限不够
---华软网友回复---
REG_SZ
  REG_SZ

  在注册表中,REG_SZ,是一种字符串类型,代表一个简单的文本字符串,是最常见的一种数据类型。

  其中“SZ”是“String Zero”的缩写,匈牙利命名法,表示null结尾的字符串变量。

  注:REG_SZ型注册表值项没有长度限制。

原文出处: http://blog.csdn.net/jun_01/archive/2005/07/05/414959.aspx

假设szValue是一个TCHAR[] .

用以下语句,看起来很正常,但实际却有问题.   数据读取出来后后边有很多乱码.

RegSetValueEx(hKey, _T("Open"), 0, REG_SZ, (BYTE *)szValue, _tcslen(szValue) * sizeof(TCHAR) );

原来是注册表中存字符串数据也得带着那个0;
所以正确做法应该这样:
RegSetValueEx(hKey, _T("Open"), 0, REG_SZ, (BYTE *)szValue, (_tcslen(szValue) + 1) * sizeof(TCHAR));

这时候再看REG_SZ中的"SZ",似乎觉得这个名字起的很好.


---华软网友回复---
  class="deleted_message"> 该回复于2011-11-24 14:42:17被版主删除        
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。