KOPIA REJESTRU C++

0

Wie ktoś ort! jak zrobić następującą rzecz w C++ bilder:
Program po naciśnięciu przycisku wykona kopię zapasową rejestru. Nie potrzebuje gotowego rozwiązania ale propozycji jak rozwikłać ten problem!

0

Dwie metody. Albo kopia do pliku .reg albo kopia samych plików w których jest Rejestr.

0

Można na przykład tak

int main()
{
	HANDLE hAccessToken;
	TOKEN_PRIVILEGES tp;

	OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hAccessToken);
	LookupPrivilegeValue( NULL, SE_BACKUP_NAME, &tp.Privileges[0].Luid);
	tp.PrivilegeCount = 1;
	tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
	AdjustTokenPrivileges(hAccessToken, FALSE, &tp, sizeof(tp), NULL, NULL );
	CloseHandle(hAccessToken);

	Save(HKEY_LOCAL_MACHINE, L"HKEY_LOCAL_MACHINE", L"HARDWARE");
	Save(HKEY_LOCAL_MACHINE, L"HKEY_LOCAL_MACHINE", L"SAM");
	Save(HKEY_LOCAL_MACHINE, L"HKEY_LOCAL_MACHINE", L"SECURITY");
	Save(HKEY_LOCAL_MACHINE, L"HKEY_LOCAL_MACHINE", L"SOFTWARE");
	Save(HKEY_LOCAL_MACHINE, L"HKEY_LOCAL_MACHINE", L"SYSTEM");

	_wsystem(L"pause");
	return 0;
}


void Save(HKEY hkRoot, WCHAR *wszRoot, WCHAR *wszSubkey)
{
	wprintf(L"saving %s\\%s to c:\\%s\n", wszRoot, wszSubkey, wszSubkey);
	HKEY hk;
	UINT code;
	WCHAR msg[MAX_PATH];

	if (RegOpenKey(hkRoot, wszSubkey, &hk))
	{
		code = GetLastError();
		wprintf(L"failed to open key: ");
	}
	else
	{
		wsprintf(msg, L"c:\\%s", wszSubkey);
		code = RegSaveKey(hk, msg, 0);
		RegCloseKey(hk);

		if (code)
			wprintf("failed to save key: ");
	}
	FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|255, 0, code, 0, msg, MAX_PATH, 0);
	wprintf(L" - %s\n\n", msg);
}

Ps moja gałąź SOFTWARE ma 43MB a jej zapis trwa około 20 (!) sekund unieruchamiając wszystkie otwarte okna.
Zapisane pliki hive można przywrócić w razie potrzeby z konsoli odzyskiwania, zastępując nimi te z \system32\config.

1 użytkowników online, w tym zalogowanych: 0, gości: 1