레지스트리 백업 및 복원

면책 조항 :이 문서는 블로거 원본입니다, 추적 에 의해-SA의 CC 4.0 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요.
이 링크 : https://blog.csdn.net/yujinlong312/article/details/102720960
BOOL EnableTargetPriv(LPTSTR lpszPrivilege)
{
	HANDLE hToken = NULL;
	TOKEN_PRIVILEGES tkp = { 0 };
	if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
		return FALSE;
	}
	if (!LookupPrivilegeValue(NULL, lpszPrivilege, &tkp.Privileges[0].Luid)) {
		CloseHandle(hToken);
		return FALSE;
	}
	tkp.PrivilegeCount = 1;
	tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;


	if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) {
		CloseHandle(hToken);
		return FALSE;
	}
	return TRUE;
}


void CRegtestDlg::OnBnClickedButtonBackup()
{
	// TODO: 在此添加控件通知处理程序代码
	CString filestr;
	CTime t = CTime::GetCurrentTime();
	filestr = t.Format("%Y%m%d%H%M%S");
	filestr += ".bin";
	HKEY hKey = NULL;
	TCHAR *lpszSubKey = _T("SYSTEM\\ControlSet001\\services\\DevaCfg");
	EnableTargetPriv(SE_BACKUP_NAME);
	LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSubKey, 0, KEY_ALL_ACCESS, &hKey);
	if (lRet == ERROR_SUCCESS) {
		lRet = RegSaveKey(hKey, _T("D:\\RegBackup\\")+filestr, NULL);
		RegCloseKey(hKey);
	}
}


void CRegtestDlg::OnBnClickedButtonRestore()
{
	// TODO: 在此添加控件通知处理程序代码
	CString filePath;
	CFileDialog fileDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "(*.bin)|*.bin|所有类型(*.*)|*.*||", NULL);
	if (fileDlg.DoModal() == IDOK)
	{
		filePath = fileDlg.GetPathName();
	}
	HKEY hKey = NULL;
	TCHAR *lpszSubKey = _T("SYSTEM\\ControlSet001\\services\\DevaCfg");
	EnableTargetPriv(SE_RESTORE_NAME);
	LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSubKey, 0, KEY_ALL_ACCESS, &hKey);
	if (lRet == ERROR_SUCCESS) {
		LPCTSTR lpszFile = filePath;
		lRet = RegRestoreKey(hKey, filePath, REG_FORCE_RESTORE);
		RegCloseKey(hKey);
	}
}

추천

출처blog.csdn.net/yujinlong312/article/details/102720960