15,466
社区成员
发帖
与我相关
我的任务
分享BOOL RestoreKey( HKEY hBootKey, LPCTSTR lpszKeyName, LPCTSTR lpszPath )
{
assert( hBootKey );
//assert( lpszKeyName );
assert( lpszPath );
BOOL bRet = FALSE;
//1. 申请备份权限
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if( !OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken) )
return FALSE;
LookupPrivilegeValue( NULL, SE_RESTORE_NAME, &tkp.Privileges[0].Luid );//申请SE_RESTORE_NAME 权限
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0 );
//2. Open key
HKEY hKey = NULL;
if ( ERROR_SUCCESS != RegOpenKeyEx(hBootKey, lpszKeyName, NULL, KEY_ALL_ACCESS, &hKey) )
return FALSE;
//3. Restore Key
/*if ( ERROR_SUCCESS != RegRestoreKey(hKey, lpszPath, FALSE) )
{
bRet = FALSE;
}*/
int nRet = RegRestoreKey( hKey, lpszPath, FALSE ); //返回5
if ( ERROR_SUCCESS != nRet )
{
bRet = FALSE;
}
else
bRet = TRUE;
RegCloseKey( hKey );
return bRet;
}