Zur Speicherung eines Registryschlüssels mittlels der Methode SaveKey müssen folgende Voraussetzungen erfüllt sein:
Das setzen der Rechte:
TOKEN_PRIVILEGES tkp;
HANDLE hToken;
if (!OpenProcessToken (GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
{
ShowMessage ("OpenProcessToken geht nicht");
return;
}
if(!LookupPrivilegeValue(NULL,SE_BACKUP_NAME,&tkp.Privileges[0].Luid))
{
ShowMessage ("LookupPrivilegeValue geht nicht");
return;
}
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES),NULL, NULL );
if(GetLastError()!= ERROR_SUCCESS)
{
ShowMessage ("AdjustTokenPrivileges geht nicht");
return;
}
Den Schlüssel speichern:
TRegistry * reg = new TRegistry();
DeleteFile("test.sav"); //Eine bestehende Datei löschen!!!!
if (reg->SaveKey("Software\\Analyser","test.sav"))
{
ShowMessage("Speicherung erfolgreich");
}
else
{
ShowMessage("Speicherung misslungen");
}
delete reg;
Zu beachten ist, dass SaveKey keine REG-Datei erzeugt. Vielmehr
kann die erzeugte Datei dazu genutzt werden, Schlüssel in der
Registrierung mit RestoreKey, ReplaceKey und LoadKey wieder
herzustellen.
REG-Dateien werden von dem Editor der Registry (regedit)
genutzt. Dieser verarbeitet REG-Dateien und die Dateiendung *.reg ist mit
diesem Programm verbunden. Da nun der Editor mit der Registry an sich nichts zu
tun hat, erzeugt SaveKey auch keine REG-Dateien
Zum einlesen des gespeicherten Schlüssel mittels RestoreKey müssen folgende Voraussetzungen erfüllt sein:
Das setzen der Rechte (Backup):
TOKEN_PRIVILEGES tkp;
HANDLE hToken;
if (!OpenProcessToken (GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
{
ShowMessage ("OpenProcessToken geht nicht");
return;
}
if(!LookupPrivilegeValue(NULL,SE_BACKUP_NAME,&tkp.Privileges[0].Luid))
{
ShowMessage ("LookupPrivilegeValue geht nicht");
return;
}
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES),NULL, NULL );
if(GetLastError()!= ERROR_SUCCESS)
{
ShowMessage ("AdjustTokenPrivileges geht nicht");
return;
}
Das setzen der Rechte (Restore):
if (!OpenProcessToken (GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
{
ShowMessage ("OpenProcessToken geht nicht");
return;
}
if(!LookupPrivilegeValue(NULL,SE_RESTORE_NAME,&tkp.Privileges[0].Luid))
{
ShowMessage ("LookupPrivilegeValue geht nicht");
return;
}
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES),NULL, NULL );
if(GetLastError()!= ERROR_SUCCESS)
{
ShowMessage ("AdjustTokenPrivileges geht nicht");
return;
}
(Wer weiss, wie man das in einem Schritt macht -> bitte melden)
Eine Dateiauswahlbox anzeigen:
OpenDialog1->Title="Profil importieren"; OpenDialog1->FilterIndex=2; OpenDialog1->FileName=""; if(!OpenDialog1->Execute()) return;
Schlüssel öffnen, erzeugen und einlesen. Wobei der zu erzeugende Schlüssel der Dateiname ist. Aus diesem Grunde darf dieser auch nicht verändert werden.
TRegistry *reg = new TRegistry();
String htext=ExtractFileName(OpenDialog1->FileName);
reg->OpenKey("Software\\PocketFTP\\Profile\\",false);
reg->CreateKey(htext);
if (reg->RestoreKey(htext,OpenDialog1->FileName)==true)
SetStatus("Import erfolgreich");
else
SetStatus("Import misslungen");
delete reg;