PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [WIN API] RegSaveKey


Format C:
07.11.2002, 02:30
Folgender Auszug aus dem Buch "Windows 2000 API Referenz"


// Key Anlegen
RegCreateKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\Test\\Test1", 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL,
&hKey, NULL );

RegSetValueEx(hKey, "Val", 0, REG_SZ, "ABC", 3);
RegCloseKey(hKey);


// Key Exportieren
RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\Test", 0, KEY_ALL_ACCESS, &hKey);

RegSaveKey(hKey, "datei.reg", NULL);

RegCloseKey(hKey);


Aber das Exportieren haut nicht hin. Es wird zwar einen Datei erzeugt steht jedoch nix drinn. (unter W2k)
Übrigens gibt die Funktion den wert 1314 zurück (ERROR_PRIVILEGE_NOT_HELD)

Im buch steht, der letzte Parrameter von RegSaveKey kann auf NULL gesetzt werden, damit die Standart Attribute der Datei genommen werden.

Unter Win98 stehen nur Müll in der Datei, kann auch nicht mehr zurückgeladen werden (mit RegLoadKey)


bei http://msdn.microsoft.com/default.asp fine ich auch kein Code Beispiel


Format C:
08.11.2002, 03:40
Jo.....ss geht nicht weil der Process das SE_BACKUP_NAME Privileg braucht, es geht jetzt

xOOn
09.11.2002, 20:18
das muesste muesste funken, ich habe das schon mal gemacht, nur musst du dir dazu erst die rechte holen und das dateiformat ist nicht reg sondern Registry Hives
---------------------------
save

try
{
TOKEN_PRIVILEGES tp;
HANDLE hToken;
LUID luid;
LONG rc;
HKEY x;
LPTSTR MachineName = NULL;
DWORD dwSubKeyIndex = 0;
DWORD dwDisposition;
char szSubKey[_MAX_FNAME];
DWORD dwSubKeyLength = _MAX_FNAME;
if(!OpenProcessToken (GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES,
&hToken))
throw ERR_GETRIGHTS ("Can't open the token to get the rights."
" (Saving)");

if(!LookupPrivilegeValue(MachineName, SE_BACKUP_NAME, &luid))
{
CloseHandle(hToken);
throw ERR_GETRIGHTS ("Can't lookup privileges to get the rights."
" (Saving)");
}

tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken, false, &tp, sizeof (TOKEN_PRIVILEGES), 0, 0);

if (GetLastError() != ERROR_SUCCESS)
{
CloseHandle(hToken);
throw ERR_GETRIGHTS ("Can't adjust the token to get the rights."
" (Saving)");
}

if (RegOpenKeyEx (GetHKEY (root), key.c_str (), 0, KEY_ALL_ACCESS, &x) !=
ERROR_SUCCESS)
{
string es = "Can't open the key \"";
es += GetHKEYString (root);
es += key;
es += "\" in the routine Save";
CloseHandle(hToken);
RegCloseKey (x);
throw ERR_CANT_OPEN (es);
}

if (RegSaveKey (x, filename.c_str (), 0) != ERROR_SUCCESS)
{
CloseHandle(hToken);
RegCloseKey (x);
throw ERR_SAVEHIVE ("Can't save the data into the hive file");
}

RegCloseKey (x);

AdjustTokenPrivileges(hToken, true, 0, 0, 0, 0);

CloseHandle(hToken);
}
catch (...)
{
throw ERR_UNKNOWN ("Unknown error while saving into a file");
}






load

try
{
HKEY x;
TOKEN_PRIVILEGES tp;
HANDLE hToken;
LUID luid;
LONG rc;
LPTSTR MachineName = NULL;
DWORD dwSubKeyIndex = 0;
char szSubKey [_MAX_FNAME];
DWORD dwSubKeyLength = _MAX_FNAME;

if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
throw ERR_GETRIGHTS ("Can't open the token to get the rights."
" (Loading)");

if(!LookupPrivilegeValue(MachineName, SE_RESTORE_NAME, &luid))
{
CloseHandle(hToken);
throw ERR_GETRIGHTS ("Can't lookup privileges to get the rights."
" (Loading)");
}

tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken, false, &tp, sizeof (TOKEN_PRIVILEGES), 0, 0);

if (GetLastError() != ERROR_SUCCESS)
{
CloseHandle(hToken);
throw ERR_GETRIGHTS ("Can't adjust the token to get the rights."
" (Loading)");
}

if (RegOpenKeyEx (GetHKEY (root), key.c_str (), 0, KEY_ALL_ACCESS, &x) !=
ERROR_SUCCESS)
{
string es = "Can't open the key \"";
es += GetHKEYString (root);
es += key;
es += "\" in the routine Load";
RegCloseKey (x);
CloseHandle(hToken);
throw ERR_CANT_OPEN (es);
}

if (RegRestoreKey (x, filename.c_str (), 0) != ERROR_SUCCESS)
{
RegCloseKey (x);
CloseHandle(hToken);
throw ERR_LOADHIVE ("Can't restore the data form the hive file");
}

RegCloseKey (x);
CloseHandle(hToken);
}
catch (...)
{
throw ERR_UNKNOWN ("Unknown error while loading a hive file");
}
}