RegQueryValue读取键值返回2号异常

RegQueryValue读取键值返回2号错误
先出代码
C/C++ code
/******************************************************************** 
函数名称:        ReadRegString
功能说明:    读取注册表一个字段
=========================================
参数说明:        HKEY hKey                    主键值
参数说明:        LPCTSTR szSubKey        子路径
参数说明:        LPCTSTR szKeyName    子名称
---------------------------------  
返回类型:        CString                            返回文本型
---------------------------------
文件作者:        King.Sollyu 
*********************************************************************/
CString ReadRegString(HKEY hKey,LPCTSTR szSubKey,LPCTSTR szKeyName)
{
    HKEY hKeyHander = NULL ; 
    int nRet =  RegOpenKeyEx(hKey,szSubKey,NULL,KEY_ALL_ACCESS,&hKeyHander);
    if  ( nRet != ERROR_SUCCESS)
    {
        CString str;
        str.Format(L"打开注册表 %s 表值错误",szSubKey);
        ShowError(str,nRet);
        return L"";
    }

    TCHAR   szData[1000];
    LONG   dwSize = 1000 ;  
    if  ((nRet = RegQueryValue(hKeyHander,szKeyName,szData,&dwSize)) != ERROR_SUCCESS)
    {
        CString str;
        str.Format(L"读取注册表 %s 表值错误",szKeyName);
        ShowError(str,nRet);
        return L"";
    }

    RegCloseKey(hKeyHander);
    CString strRet(szData);
    return strRet;
}


调用代码
C/C++ code
    CString strSubKeyPath = L"" , strKeyName = RegKey[dwIndex].strKeyName;
    strSubKeyPath.Format(L"CLSID\\%s",strKeyName);
    RegKey[dwIndex].keyInfo.strKeyName = ReadRegString(HKEY_CLASSES_ROOT,strSubKeyPath,L"");
    RegKey[dwIndex].keyInfo.strInfoTip     = ReadRegString(HKEY_CLASSES_ROOT,strSubKeyPath,L"InfoTip");



RegKey = "HKEY_CLASSES_ROOT\CLSID\{AD04E3AB-F7B8-4F06-AC4A-D4901324CBAA}"

问题读取 L"" 这个时可以正确,可是读取 L"InfoTip" 就返回错误为2。这是为什么啊。请大神指点啊。




------解决方案--------------------
KEY_ALL_ACCESS
换成
KEY_EXECUTE

看看
------解决方案--------------------
2 The system cannot find the file specified. ERROR_FILE_NOT_FOUND 

------解决方案--------------------
改成KEY_QUERY_VALUE就行了,你申请的权限太大

C/C++ code

DWORD TestReadkey(__out LPWSTR lpData,__in HKEY hPreKey,__in LPCWSTR lpKeyName,__in LPCWSTR lpValueName,__in DWORD dwDataLen)
{
    DWORD dwRetCode = 0;
    HKEY hKey = NULL;
    __try
    {
        dwRetCode = RegOpenKeyExW(hPreKey, lpKeyName, 0, 
            KEY_WOW64_32KEY|KEY_QUERY_VALUE,&hKey);
        if (ERROR_SUCCESS != dwRetCode)
        {
            SetLastError(dwRetCode);
            DisplayErrorW(__FUNCTIONW__,L"RegOpenKeyEx",dwRetCode);
            __leave;
        }

        dwRetCode = RegQueryValueExW(hKey,lpValueName,NULL,NULL,(LPBYTE)lpData,&dwDataLen);
        if (ERROR_SUCCESS != dwRetCode)
        {
            SetLastError(dwRetCode);
            DisplayErrorW(__FUNCTIONW__,L"RegQueryValueEx",dwRetCode);
            __leave;
        }
    }
    __finally
    {
        if (NULL != hKey)
        {
            RegCloseKey(hKey);
            hKey = NULL;
        }
    }
    return dwRetCode;
}