Disclaimer: This article is a blogger original article, follow the CC 4.0 BY-SA copyright agreement, reproduced, please attach the original source link and this statement.
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);
}
}