Я пытаюсь заменить файл куста реестра с помощью RegReplaceKey()
(новый файл создается с помощью RegSaveKey()
API), но возвращается с «файл уже существует» ошибка. Если я сначала попытаюсь удалить исходный файл куста, произойдет сбой с ошибкой «файл используется» .
Я назначил соответствующие права (SeBackupPrivilege
и SeRestorePrivilege
), пользователь - администратор, но не повезло.
У кого-нибудь есть идеи, что может быть не так? Вот код:
...
// Setting privileges here, everything goes okay
nret := RegOpenKey(HKEY_LOCAL_MACHINE, 'system', hk);
if nret = 0 then
begin
RegFlushKey(hk);
if FileExists('C:\WINDOWS\system32\config\testhive') then
DeleteFile('C:\WINDOWS\system32\config\testhive');
nret := RegSaveKey(hk, 'C:\WINDOWS\system32\config\testhive', nil);
if nret <> 0 then
MessageBox(0, pchar(SysErrorMessage(nret)), '', 0);
// no errors so far, new file is created
SeqNr := StartRestore('Before Registry Optimization');
if FileExists('C:\WINDOWS\system32\config\system') then
begin
FileSetAttr('C:\WINDOWS\system32\config\system', 0);
if not DeleteFile('C:\WINDOWS\system32\config\system') then
MessageBox(0, pchar(SysErrorMessage(GetLastError)), '', 0);
// error: file is in use
end;
nret := RegReplaceKey(hk, nil, 'C:\WINDOWS\system32\config\testhive', 'C:\WINDOWS\system32\config\system');
if nret <> 0 then
MessageBox(0, pchar(SysErrorMessage(nret)), '', 0);
// error: file already exists
if SeqNr <> 0 then
EndRestore(SeqNr);
RegCloseKey(hk);
end;