我需要访问“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\USB”下的所有子键,使用RegOpenKeyEx访问的时候,发现有些键能打开,有些却不能,返回2,我查过,表示键值不存在,但键值其实是存在的。其他键用同样的方式都能顺利访问,非常不解。LONG ret = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SYSTEM\\ControlSet001\\Enum\\USB\\Vid_0a12&Pid_0001", 0, KEY_READ, &hkey);上面是我访问所用的代码。麻烦各位指点一二。

解决方案 »

  1.   


    //免费贡献一个函数给你参考:
    void EnumComPort(HKEY hKey, LPCTSTR cstrKey)
    {
    static HKEY hLastKey = hKey;
    LONG lResult;
    DWORD dwIndex =0;
    HKEY hCurKey = hKey;
    DWORD dwKeyType;
        DWORD dwKeyDataLength,dwKeyNameLen;
    LPBYTE pbbinKeyData = NULL;
    TCHAR *tcKeyName = NULL;
    TCHAR tcDataType[1024] = _T("");
    lResult = RegOpenKeyEx(hCurKey, cstrKey, 0, KEY_QUERY_VALUE, &hKey);
    if(lResult != ERROR_SUCCESS)
    return;
    DWORD lNoOfValues = 0; 
    DWORD lLongestKeyNameLen = 1;
    DWORD lLongestDataLen = 1;
    lResult = RegQueryInfoKey(hKey, NULL, NULL, NULL,NULL, NULL, NULL,&lNoOfValues, &lLongestKeyNameLen, &lLongestDataLen, NULL, NULL);
    if(lResult != ERROR_SUCCESS)    
    return;
    hLastKey = hKey;
    lLongestKeyNameLen++;
    lLongestDataLen++;
    tcKeyName = new TCHAR[lLongestKeyNameLen];
    pbbinKeyData = new BYTE[lLongestDataLen];
    CString cstrFinalData,cstrTemp;
    while(TRUE)
    {
    memset(pbbinKeyData, 0, lLongestDataLen);
    memset(tcKeyName, 0, lLongestKeyNameLen);
    dwKeyType = dwKeyDataLength = dwKeyNameLen = 0;
    dwKeyNameLen = lLongestKeyNameLen;
    dwKeyDataLength = lLongestDataLen;
    lResult = RegEnumValue(hKey, dwIndex, tcKeyName, &dwKeyNameLen, NULL, &dwKeyType, pbbinKeyData, &dwKeyDataLength);
    if(lResult == ERROR_NO_MORE_ITEMS)
    break; //(LPCTSTR)pbbinKeyData 这此处处理你的数据,
    dwIndex++;
    }
    RegCloseKey(hKey); 
    delete tcKeyName;
    delete pbbinKeyData;
    }
      

  2.   

    回复 miaolingshaohua的确有子键,但也不应该返回2,表示不存在的,而且其他类同的键都能顺利打开,在其他人的机器试过,发现他们的打开都返回0(同样的键),郁闷
      

  3.   

    你的操作系统是vista或win7吧
    请用管理员权限打开你生成的可执行文件
    否则无法读写注册表
    等接分