使用RegSetValueEx修改注册表时遇到的问题(转)

使用RegSetValueEx修改注册表时遇到的问题(转)

原文转自 http://blog.csdn.net/tracyzhongcf/article/details/4076870

1、今天在使用RegSetValueEx时发现一个问题:

RegSetValueEx(hKey, TEXT("test"), 0, REG_SZ, (LPBYTE)TEXT("test.dll"), 256);

向注册表的某位置写了一个test,键值为test.dll

程序运行时,按理说会自动去加载我的test.dll。(因为我手动去修改机器上的注册表,添加此注册表项时,确实是能让系统加载test.dll了)。但是结果却是通过程序向注册表去写时,注册表确实写上了,可是系统没有加载我的dll。

原因:

256!!!

把程序改成:

TCHAR szTest[32];

wcsncpy(szTest, TEXT("test.dll"), 32);

int iLen = wcslen(szTest);

RegSetValueEx(hKey, TEXT("test"), 0, REG_SZ, (LPBYTE)szTest, sizeof(TCHAR)*iLen );

就可以了。

我们看一下RegSetValueEx中的参数:

LONG RegSetValueEx(

HKEY hKey,

LPCWSTR lpValueName,

DWORD Reserved,

DWORD dwType,

const BYTE* lpData,

DWORD cbData

);

cbData不能太大,否则很可能把lpData指向的内容之外的其他字符也写入注册表中。导致错误发生。

2、在我的项目中修改注册表后,界面上看起来修改成功了,但实际上未生效,重启电脑才生效,不知道为什么?

TCHAR value[32];

memset(value, 0, sizeof(value));

wcsncpy(value, TEXT("zh-CN"), 32);

int iLen = wcslen(value);

LONG ret = RegSetValueEx(hk, TEXT("LocaleName"),

NULL,

REG_SZ,

(const BYTE*)value, sizeof(TCHAR)*iLen

);

if (ret != ERROR_SUCCESS)

{

MSG_LOG("RegSetValueEx 失败");

}

memset(value, 0, sizeof(value));

wcsncpy(value, TEXT("00000804"), 32);

iLen = wcslen(value);

ret = RegSetValueEx(hk, TEXT("Locale"),

NULL,

REG_SZ,

(const BYTE*)value, sizeof(TCHAR)*iLen

);

if (ret != ERROR_SUCCESS)

{

MSG_LOG("RegSetValueEx 失败");

}

相关推荐

用友u8报价单
365bet滚球网

用友u8报价单

📅 07-20 👁️ 6338
陈孝萱詹仁雄为什么离婚
365bet线路检测

陈孝萱詹仁雄为什么离婚

📅 07-21 👁️ 1679
联通怎么查话费和流量 5种查询方法步骤
365bet体育在线主页

联通怎么查话费和流量 5种查询方法步骤

📅 07-10 👁️ 9885
申请微粒贷多久放款?
365bet线路检测

申请微粒贷多久放款?

📅 07-19 👁️ 2302
OpenWRT软件安装教程,安装的几种方法
365bet体育在线主页

OpenWRT软件安装教程,安装的几种方法

📅 07-05 👁️ 5389
深蓝色卫衣配什么颜色的裤子
365bet滚球网

深蓝色卫衣配什么颜色的裤子

📅 07-10 👁️ 8513
趣还钱app免费下载
365bet线路检测

趣还钱app免费下载

📅 07-24 👁️ 8350
京东有哪些会员专属的优惠活动?如何参加活动?
365bet体育在线主页

京东有哪些会员专属的优惠活动?如何参加活动?

📅 07-06 👁️ 5143