RegSaveKey,RegRestore |
|
nnn0918k
一般會員 發表:12 回覆:33 積分:14 註冊:2003-05-12 發送簡訊給我 |
以下是RegSaveKey..
http://www.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_20251935.html
http://www.coding-board.de/board/archive/topic/3577-1.html
function TReg.SaveKey(FileName: String): Integer; var hToken,lReturn: Cardinal; liLuid: Int64; tpNew: TTokenPrivileges; tpPrev: PTokenPrivileges; begin lReturn := SizeOf(TTokenPrivileges); OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES TOKEN_QUERY, hToken); LookupPrivilegeValue(nil, 'SeBackupPrivilege', liLuid); tpPrev := @tpNew; tpNew.PrivilegeCount := 1; tpNew.Privileges[0].luid := liLuid;; tpNew.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken,False,tpNew,SizeOf(TTokenPrivileges),tpPrev,lReturn); result := RegSaveKey(FCurrentKey,PChar(FileName),nil); AdjustTokenPrivileges(hToken,True,tpNew,SizeOf(TTokenPrivileges),tpPrev,lReturn); CloseHandle(hToken); end;火舞精靈 - 蘇 |
nnn0918k
一般會員 發表:12 回覆:33 積分:14 註冊:2003-05-12 發送簡訊給我 |
|
shaofu
高階會員 發表:5 回覆:136 積分:103 註冊:2003-01-07 發送簡訊給我 |
引言: 我RegSaveKey測試是成功,可是RegRestoreKey卻不行.. ERROR_ACCESS_DENIED 這個錯誤..請問怎解決啊.. 火舞精靈 - 蘇看起來是權限問題, 查了一下 MSDN, 裏面提到使用者需有 SE_RESTORE_NAME 的權限, 你有先用 administrator user 來試過了嗎 ? 你提供的 Link 裏面的文章有連到 MS 去: http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q128731& 有先試過了嗎? 發表人 - shaofu 於 2003/07/08 09:57:06 |
nnn0918k
一般會員 發表:12 回覆:33 積分:14 註冊:2003-05-12 發送簡訊給我 |
重開機後竟然行了@@..
重新整理一下.. 使用範例..
SaveKey(HKEY_LOCAL_MACHINE,'SOFTWARE\RegEditor','C:\RegEditor.reg');
RestoreKey(HKEY_LOCAL_MACHINE,'SOFTWARE\RegEditor','C:\RegEditor.reg');
//------------------------------------------------------------------------------ function RestoreKey(const RootKey: HKEY; const KeyPath: String; const FileName: String): Boolean; var RegRestore: TRegistry; hToken,lReturn: Cardinal; liLuid: Int64; tpNew: TTokenPrivileges; tpPrev: PTokenPrivileges; begin lReturn := SizeOf(TTokenPrivileges); OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES TOKEN_QUERY, hToken); LookupPrivilegeValue(nil, 'SeRestorePrivilege', liLuid); tpPrev := @tpNew; tpNew.PrivilegeCount := 1; tpNew.Privileges[0].luid := liLuid;; tpNew.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken,False,tpNew,SizeOf(TTokenPrivileges),tpPrev,lReturn); RegRestore := TRegistry.Create(KEY_ALL_ACCESS); RegRestore.RootKey := RootKey; result := RegRestore.RestoreKey(KeyPath,FileName); RegRestore.Free; AdjustTokenPrivileges(hToken,True,tpNew,SizeOf(TTokenPrivileges),tpPrev,lReturn); CloseHandle(hToken); end; //------------------------------------------------------------------------------ function SaveKey(const RootKey: HKEY; const KeyPath: String; const FileName: String): Boolean; var RegSave: TRegistry; hToken,lReturn: Cardinal; liLuid: Int64; tpNew: TTokenPrivileges; tpPrev: PTokenPrivileges; begin lReturn := SizeOf(TTokenPrivileges); OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES TOKEN_QUERY, hToken); LookupPrivilegeValue(nil, 'SeBackupPrivilege', liLuid); tpPrev := @tpNew; tpNew.PrivilegeCount := 1; tpNew.Privileges[0].luid := liLuid;; tpNew.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken,False,tpNew,SizeOf(TTokenPrivileges),tpPrev,lReturn); RegSave := TRegistry.Create(KEY_ALL_ACCESS); RegSave.RootKey := RootKey; result := RegSave.SaveKey(KeyPath,FileName); RegSave.Free; AdjustTokenPrivileges(hToken,True,tpNew,SizeOf(TTokenPrivileges),tpPrev,lReturn); CloseHandle(hToken); end;火舞精靈 - 蘇 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |