Wie ktoś <ort>morze</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!
- Rejestracja:około 21 lat
- Ostatnio:ponad 9 lat
- Postów:513
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.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.