大家好,我现在碰到了这样一个问题,我在管理员用户下可以读取注册表的键值,可以调用程序,但是在受限用户下却读不出来,进入异常处理。我单步跟踪了一下,的确读出来的值为空,我的两个主要的代码如下:regKey.Open(HKEY_LOCAL_MACHINE, MEDIA_PLAYER);
    
    regKey.Read(INSTALL_PATH_2, strPath);
    
    if (strPath == _T(""))
    {
        AfxMessageBox(_T("Sorry!You have not install this Software!"));
    }else
    {
        ::ShellExecute(this->m_hWnd, _T("open"), strPath, NULL, NULL, SW_NORMAL);
    }LONG CRegKey::Read(LPCTSTR pszKey, LPTSTR lpszValue)
{
    DWORD dwType = 0 ;
    DWORD dwSize =     MAX_PATH;    TCHAR acString[MAX_PATH + 1];
    memset( acString, 0, MAX_PATH + 1 );    LONG lReturn = RegQueryValueEx(m_hKey, (LPTSTR)pszKey, NULL,
        &dwType, (BYTE *) acString, &dwSize);
    if ( ERROR_SUCCESS == lReturn )
    {
        //lpszValue = (LPTSTR)acString;
        _tcscpy(lpszValue, acString);
    }    return lReturn;
}LONG CRegKey::Open (HKEY hKeyRoot, LPCTSTR pszPath)
{
    return RegOpenKeyEx (hKeyRoot, pszPath, 0L, KEY_ALL_ACCESS, &m_hKey);
}好像在open下就没好使(受限用户),我觉得读的权限任何用户都应该有啊!!不知道为什么了?谢谢各位高手给指点指点

解决方案 »

  1.   

    偶觉得受限用户下应该读不到的,要不windows把用户分为几个等级干什么
      

  2.   

    权限:BOOL ControlWindows()
    {
    HANDLE hToken;
    LUID Luid;
    BOOL bReturn = FALSE;
    DWORD dwError;
    TOKEN_PRIVILEGES NewPrivileges; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken))
    {
    dwError = GetLastError();
    if (dwError == ERROR_CALL_NOT_IMPLEMENTED) 
    return bReturn;
    } if (!LookupPrivilegeValue(NULL, /*添加你要的权限的名字*/, &Luid)) 
    {
    CloseHandle(hToken);
    return bReturn;
    } NewPrivileges.PrivilegeCount = 1;
    NewPrivileges.Privileges[0].Luid = Luid;
    NewPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; bReturn = AdjustTokenPrivileges(hToken, FALSE, &NewPrivileges, 0, NULL, NULL); CloseHandle(hToken); return bReturn;
    }