I try to use RegLoadKey with HKEY_LOCAL_MACHINE hive, but it returns ERROR_ACCESS_DENIED ,
the code below works for HKEY_CURRENT_USER hive , i couldnt figure out why it didnt for also HKEY_LOCAL_MACHINE
although i am setting privilige defined as msdn ( http://msdn2.microsoft.com/en-us/library/ms724889.aspx )
Can you help me ?
HKEY hive ;
LONG lReturn ;
char sFileName[12] = “c:\test.dat”;
SetPrivilege(SE_BACKUP_NAME,TRUE);
SetPrivilege(SE_RESTORE_NAME,TRUE);
RegOpenKeyEx(HKEY_LOCAL_MACHINE, “”,0,KEY_READ, &hHive);
RegSaveKey(hHive,sFileName,NULL);
lReturn = RegLoadKey(HKEY_LOCAL_MACHINE,“newhklm\”,sFileName);
// lReturn becomes 5L which means ERROR_ACCESS_DENIED
My privilige function :
BOOL SetPrivilege(LPCTSTR lpszPrivilege, BOOL bEnablePrivilege)
{
TOKEN_PRIVILEGES tp;
LUID luid;
HANDLE hToken;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
if ( !LookupPrivilegeValue(NULL, lpszPrivilege, &luid) )
return FALSE;
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if (bEnablePrivilege)
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
tp.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(hToken, FALSE, &tp, 0, (PTOKEN_PRIVILEGES) NULL, 0);
return ( (GetLastError()!=ERROR_SUCCESS)?FALSE:TRUE);
}