加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

注册表遇到的坑

发布时间:2020-12-14 02:36:17 所属栏目:Windows 来源:网络整理
导读:注册表是个非常牛逼的东西。驱动与用户程序通信都用的这个玩意。但是呢有个地方要注意就是你的健值太大api给的大小往往不靠谱。要自己手动加大。 IResult = RegQueryInfoKey(IKey,NULL,numValues,maxLenValueName,maxLenValueData,NULL); 还有不要太小气直接
注册表是个非常牛逼的东西。驱动与用户程序通信都用的这个玩意。但是呢有个地方要注意就是你的健值太大api给的大小往往不靠谱。要自己手动加大。

IResult = RegQueryInfoKey(IKey,NULL,&numValues,&maxLenValueName,&maxLenValueData,NULL);


还有不要太小气直接搞个一万都行。值其实不大但是tmd设置1024都不行。


std::map <std::string,std::string> Fun_Enum_Process_By_Regedit()
{
    std::map <std::string,std::string> _Map;
    HKEY     hKey;                  
    long     IResult;   
    DWORD    numValues,maxLenValueName,maxLenValueData,lpType,lenValue;
    DWORD    lenData;                                                  
    HKEY     RootKey = HKEY_LOCAL_MACHINE;      
    LPCTSTR  lpSubKey = L"SYSTEMCurrentControlSetServiceshaidragon";
    HKEY     IKey = 0;
    wchar_t  *ValueName = new   wchar_t[1024];                          
    BYTE  *lpData = new  BYTE[1024];
    ZeroMemory(ValueName,sizeof(ValueName));
    ZeroMemory(lpData,sizeof(lpData));
    IResult = RegOpenKeyEx(RootKey,lpSubKey,KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE | KEY_READ,&IKey);
    if (ERROR_SUCCESS != IResult)
    { 
        goto end;
    }
    IResult = RegQueryInfoKey(IKey,NULL);
    if (ERROR_SUCCESS != IResult)
    { 
        goto end;
    }
    for (int i = 0; ERROR_SUCCESS == IResult,i < (int)numValues; i++)
    {
        lenValue = 1024;
        lenData = 4096; 
        IResult = RegEnumValueW(IKey,i,ValueName,&lenValue,&lpType,lpData,&lenData); 
        //lpData是俩字节的
        _Map[wstring2string(std::wstring(ValueName))] = wstring2string(std::wstring((wchar_t*)lpData));
        if (ERROR_SUCCESS == RegDeleteValue(IKey,ValueName)) {
            wprintf(L" 删除键值%s 成功!!!!n",ValueName);
        }
        ZeroMemory(ValueName,sizeof(ValueName));
        ZeroMemory(lpData,sizeof(lpData));
    } 
end: 
    delete  ValueName;
    delete   lpData;
    return _Map;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读