使用RegSetValueEx时要注意的一点问题

使用RegSetValueEx时要注意的一点问题

今天在使用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指向的内容之外的其他字符也写入注册表中。导致错误发生。

相关推荐

阴阳师辉夜姬怎么获取 辉夜姬获取方法
365cc彩票老版

阴阳师辉夜姬怎么获取 辉夜姬获取方法

📅 07-09 👁️ 2597
《英雄联盟》DWG战队介绍
365体育亚洲官方登录

《英雄联盟》DWG战队介绍

📅 06-29 👁️ 6754
身处安静的环境中,经常可以听到莫名的铃铛声,到底是什么在冥冥中召唤?