使用RegSetValueEx时要注意的一点问题
2009-04-15 19:19
253 查看
今天在使用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中的参数:
cbData不能太大,否则很可能把lpData指向的内容之外的其他字符也写入注册表中。导致错误发生。
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指向的内容之外的其他字符也写入注册表中。导致错误发生。
相关文章推荐
- 关于strncpy和strcat组合使用时,需注意的一点问题
- 安装使用WDS时需要注意的一点问题
- Html使用自定义光标的一点需要注意的小问题。
- 有关ScrollView嵌套WebView使用时需要注意的一点小问题
- 使用GetWindowText需要注意的一点问题
- 使用qApp->quit();退出程序需要注意的一点问题
- eclipse不能自动更新的问题;js中的for in使用注意的一点
- firebug中的console.log()使用注意的问题
- 使用LIBSVM需要注意的几个问题
- [JavaScript]使用块级作用域声明对象时要注意的一个问题
- 使用Linq求和方法Sum计算集合中多个元素和时应该注意的性能问题
- 喜欢使用VMware的.net程序员要注意呀(Visual Studio启动不了的问题)
- 使用Spring框架管理Oracle数据库时注意问题
- 使用winsock2.h时注意的一个问题
- (转载)RegSetValueEx设置REG_SZ类型键值时要注意的问题
- Python中使用装饰器时需要注意的一些问题
- 在windows开发环境中,java代码中使用linux格式路径的方法需要注意的问题
- 使用Entity Framework时要注意的一些性能问题
- 使用android.widget.SimpleAdapter.ViewBinder的一点问题!