![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение и загрузка ключей реестра [D6, WinXP]
Sting © (2004-07-08 23:01:00)Доброг времени суток.
У меня такая проблема.
Есть функции для работы с реестром SaveKey, LoadKey.
Но они не работают должным образом. Насколько я понял, в ХР необходимо получить соответствующие привилегии для их использования. Функция SaveKey сохраняет ветвь реестра в файл, если была установлена привилегия SeBackupPrivilege.
Однако LoadKey не восстанавливает информацию из созданного файла. Для ее восстановления я использую привилегию SeRestorePrivilege. Система выдает такое сообщение: "потребовалось восстановление одного из файлов данных системного рееста с помощью журнала или дополнительной копии. Восстановление произошло успешно." И в реестре никаких изменений не происходит.
Кто-нибудь может помочь с этим?
Sting (2004-07-09 03:05:00) [1]Установка привилегии:
function SetPrivilege(sPrivilegeName: string; bEnabled: boolean): boolean;
var
TPPrev,
TP: TTokenPrivileges;
Token: THandle;
dwRetLen: DWord;
begin
Result := False;
try
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token);
TP.PrivilegeCount := 1;
if (LookupPrivilegeValue(nil, PChar(sPrivilegeName),TP.Privileges[0].LUID)) then
begin
if (bEnabled) then
TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else TP.Privileges[0].Attributes := 0;
dwRetLen := 0;
Result := AdjustTokenPrivileges(Token, False, TP, SizeOf(TPPrev),
TPPrev, dwRetLen);
end;
finally
CloseHandle(Token);
end;
end;
Сохранаю так:
var
x : TRegistry;
key : string;
begin
SetPrivilege('SeBackupPrivilege', True);
key:='Некоторый ключ';
x:=tregistry.Create;
x.RootKey:=HKEY_LOCAL_MACHINE;
x.SaveKey(key,'c:\tmp1');
x.Free;
end;
Удаляю ключ. Пытаюсь восстановить так:
var
x : TRegistry;
key : string;
begin
SetPrivilege('SeRestorePrivilege', True);
key:='Некоторый ключ';
x:=tregistry.Create;
x.RootKey:=HKEY_LOCAL_MACHINE;
x.LoadKey(key,'c:\tmp1');
x.Free;
end;
И ничего не получается
Cobalt (2004-07-09 01:56:00) [2]Чё?!
Код давай!!!
:)