完美解决XP无法定位程序输入点RegGetValue于动态链接库ADVAPI32.dll,XP,win7注册表读取问题
来源:互联网 发布:php新闻发布系统登录 编辑:程序博客网 时间:2024/05/22 12:26
当C++程序调用REGGETVALUEW,并在XP运行时,出现无法定位程序输入点RegGetValue于动态链接库ADVAPI32.dll,这是由于XP版本中的动态链接库ADVAPI32.dll中别没有RegGetValue,微软官方的说明是:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724868(v=vs.85).aspx。为了代码能在XP,WIN7下都能完美运行,可以自己封装注册表的Read API,然后有关注册表读取都调用MyRegGetValueA ,就不用担心API是否存在已经XP,WIN7API版本不同的问题。本人尝试封装的API如下:
extern "C" LSTATUS MyRegGetValueA (HKEY hkey, LPCSTR lpSubKey, LPCSTR lpValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
{
typedef LSTATUS (WINAPI *REGGETVALUEA)(HKEY hkey, LPCSTR lpSubKey, LPCSTR lpValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData);
REGGETVALUEA LoadLibAddy;
LoadLibAddy = (REGGETVALUEA)GetProcAddress(GetModuleHandle(L"advapi32.dll"), "RegGetValueA");
DWORD type;
if (LoadLibAddy)
{
return LoadLibAddy(hkey, lpSubKey, lpValue, dwFlags, pdwType, pvData, pcbData);
}
else
{
if (dwFlags == RRF_RT_REG_SZ)
{
type = REG_SZ;
}
else if (dwFlags == RRF_RT_REG_DWORD)
{
type = REG_DWORD;
}
return RegQueryValueExA(hkey, lpValue, NULL, &type, (LPBYTE)pvData, pcbData);
}
}
extern "C" LSTATUS MyRegGetValueW (HKEY hkey, LPCWSTR lpSubKey, LPCWSTR lpValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
{
typedef LSTATUS (WINAPI *REGGETVALUEW)(HKEY hkey, LPCWSTR lpSubKey, LPCWSTR lpValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData);
REGGETVALUEW LoadLibAddy;
LoadLibAddy = (REGGETVALUEW)GetProcAddress(GetModuleHandle(L"advapi32.dll"), "RegGetValueW");
DWORD type;
if (LoadLibAddy)
{
return LoadLibAddy(hkey, lpSubKey, lpValue, dwFlags, pdwType, pvData, pcbData);
}
else
{
if (dwFlags == RRF_RT_REG_SZ)
{
type = REG_SZ;
}
else if (dwFlags == RRF_RT_REG_DWORD)
{
type = REG_DWORD;
}
return RegQueryValueExW(hkey, lpValue, NULL, &type, (LPBYTE)pvData, pcbData);
}
}
extern "C" LSTATUS MyRegGetValueA (HKEY hkey, LPCSTR lpSubKey, LPCSTR lpValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
{
typedef LSTATUS (WINAPI *REGGETVALUEA)(HKEY hkey, LPCSTR lpSubKey, LPCSTR lpValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData);
REGGETVALUEA LoadLibAddy;
LoadLibAddy = (REGGETVALUEA)GetProcAddress(GetModuleHandle(L"advapi32.dll"), "RegGetValueA");
DWORD type;
if (LoadLibAddy)
{
return LoadLibAddy(hkey, lpSubKey, lpValue, dwFlags, pdwType, pvData, pcbData);
}
else
{
if (dwFlags == RRF_RT_REG_SZ)
{
type = REG_SZ;
}
else if (dwFlags == RRF_RT_REG_DWORD)
{
type = REG_DWORD;
}
return RegQueryValueExA(hkey, lpValue, NULL, &type, (LPBYTE)pvData, pcbData);
}
}
extern "C" LSTATUS MyRegGetValueW (HKEY hkey, LPCWSTR lpSubKey, LPCWSTR lpValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
{
typedef LSTATUS (WINAPI *REGGETVALUEW)(HKEY hkey, LPCWSTR lpSubKey, LPCWSTR lpValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData);
REGGETVALUEW LoadLibAddy;
LoadLibAddy = (REGGETVALUEW)GetProcAddress(GetModuleHandle(L"advapi32.dll"), "RegGetValueW");
DWORD type;
if (LoadLibAddy)
{
return LoadLibAddy(hkey, lpSubKey, lpValue, dwFlags, pdwType, pvData, pcbData);
}
else
{
if (dwFlags == RRF_RT_REG_SZ)
{
type = REG_SZ;
}
else if (dwFlags == RRF_RT_REG_DWORD)
{
type = REG_DWORD;
}
return RegQueryValueExW(hkey, lpValue, NULL, &type, (LPBYTE)pvData, pcbData);
}
}
1 0
- 完美解决XP无法定位程序输入点RegGetValue于动态链接库ADVAPI32.dll,XP,win7注册表读取问题
- win2000启动时提示“无法定位程序输入点SaferCreateLevel于动态链接库ADVAPI32.dll上”怎么解决?
- 安装jdk8出现无法定位程序输入点regdeletekeyexa于动态链接库ADVAPI32.dll上
- 无法定位程序输入点RegSetKeyValueA 于动态链接库 ADVAPI32.dll上 解决方案
- xp 无法定位程序输入点 _wfopen_s 于动态链接库 msvcrt.dll 上
- 无法定位程序输入点strnlen于动态链接库msvcrt.dll上(Qt XP)
- 解决WIN7下安装飞信出现“无法定位程序输入点dwmhintdxupdate于动态链接库user32.dll”错误
- 解决无法定位程序输入点 _Z17qt_message_output9QtMsgTypePKc 于动态链接QtCore4.dll库上
- 解决“无法定位程序输入点于动态链接库XX.DLL上”的方法
- 解决-无法定位程序输入点 php_checkuid 于动态链接库 php5ts.dll
- 解决“无法定位程序输入点 _invalid_parameter_noinfo_noreturn于动态链接库MSVCR100.DLL”
- 解决无法定位程序输入点SymEnumSymbols于动态链接库dbghelp.dll
- 解决Windows2000下“无法定位程序输入点getaddrinfo于动态链接库ws2_32.dll上”的问题
- 关于“无法定位程序输入点getaddrinfo于动态链接库WS32_32.dll上”的问题
- win+VS2010+Qt 无法定位程序输入点 于动态链接库Qtcore4.dll等问题
- 关于“无法定位程序输入点getaddrinfo于动态链接库WS32_32.dll上”的问题
- win+VS2010+Qt 无法定位程序输入点 于动态链接库QtGuid4.dll问题
- win7安装QT时出现"无法定位程序输入点_except1于动态链接库MSVCR120.dll"时的解决办法
- Shell中脚本变量和函数变量的作用域
- DPI 深度报文检测
- Unsupervised Representation to Predict the Future of Patients from the Electronic Health Records
- spring boot 依赖注入
- Android三种播放视频的方式
- 完美解决XP无法定位程序输入点RegGetValue于动态链接库ADVAPI32.dll,XP,win7注册表读取问题
- 丰乐河电站调速发货
- 卖地和炒房一样都会上瘾的
- 机器学习通用框架
- 协议栈
- JavaWeb框架数据传输乱码问题解决
- 用化学绘图软件连接两个结构片段的方法
- 关于python "ImportError: cannot import name quotes_historical_yahoo" 问题
- 视觉SLAM实战(一):RGB-D SLAM V2