完美解决XP无法定位程序输入点RegGetValue于动态链接库ADVAPI32.dll,XP,win7注册表读取问题

当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);
}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值