大家好,我现在碰到了这样一个问题,我在管理员用户下可以读取注册表的键值,可以调用程序,但是在受限用户下却读不出来,进入异常处理。我单步跟踪了一下,的确读出来的值为空,我的两个主要的代码如下: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下就没好使(受限用户),我觉得读的权限任何用户都应该有啊!!不知道为什么了?谢谢各位高手给指点指点
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下就没好使(受限用户),我觉得读的权限任何用户都应该有啊!!不知道为什么了?谢谢各位高手给指点指点
{
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;
}