为何无法每次都成功写入注册表?

EricChan1986 2011-06-21 02:54:49
hi,all
我在win7+VS2008下写了一个修改注册表的程序,相关部分如下:

void SetRegValue(HKEY hk, TCHAR *szKey, TCHAR *szSubKey, TCHAR *szValue)
{
DWORD dwDisp, dwLength;
if(ERROR_SUCCESS == RegCreateKeyEx(hk, szKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hk, &dwDisp))
{
cout << "opened!" << endl;
RegCloseKey(hk);
}
dwLength = (DWORD)((lstrlen(szValue)+1)*sizeof(TCHAR));
if(ERROR_SUCCESS == RegSetValueEx(hk, szSubKey, 0, REG_SZ, (BYTE*)szValue, dwLength))
{
cout << "setted!" << endl;
RegCloseKey(hk);
}


}

当我运行该程序时,第一次能够修改注册表成功,但是当我把注册表恢复之后再运行该程序的时候,却往往不能成功修改注册表项,即使是用手动修改系统也会提示“写入新值时出错”。
请问这是为什么?有什么办法能在我的工程里解决么?
PS:我已将manifest的权限改为“requireAdministrator”。
...全文
159 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
EricChan1986 2011-06-21
  • 打赏
  • 举报
回复
第二次写入的时候也并不是所有的键都写入不成功,我想改.htm文件的关联程序,所以要修改HKEY_CURRENT_USER\Softerware\Microsoft\Windows\CurrentVersion\Explorer\FileExtends\.htm\UserChoice这个键下Prodid的值。
如果是写入方式不对的话,应该怎样写才能够修改UserChoice下的Progid的值呢?是写的地方有问题么?
这个程序里我改了很多地方,但是出问题的全部都是和UserChoice有关的键值。
oyljerry 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ericchan1986 的回复:]
查看所改键的权限时发现每次打开不成功的时候都是以一个不继承与current user的账号执行的操作。那么如何在工程中继承current user的权限呢?
[/Quote]
估计你的注册表写入的方式不对,造成注册表权限乱了,第二次就写入不了了.
RegCreateKeyEx()的 参数
http://msdn.microsoft.com/en-us/library/ms724844(v=vs.85).aspx

lpSecurityAttributes [in, optional]
A pointer to a SECURITY_ATTRIBUTES structure that determines whether the returned handle can be inherited by child processes. If lpSecurityAttributes is NULL, the handle cannot be inherited.

The lpSecurityDescriptor member of the structure specifies a security descriptor for the new key. If lpSecurityAttributes is NULL, the key gets a default security descriptor. The ACLs in a default security descriptor for a key are inherited from its direct parent key.

EricChan1986 2011-06-21
  • 打赏
  • 举报
回复
查看所改键的权限时发现每次打开不成功的时候都是以一个不继承与current user的账号执行的操作。那么如何在工程中继承current user的权限呢?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧