在WinNT(2000、XP)要使用API RegSaveKey來Dump, 則行程必需要有SeBackupPrivilege的<br>Privilege,即使是用Administrator登入, 預設還是不會有此權限, 必需在程式中透過API來<br>調整, 相關的API有 OpenProcessToken、LookupPrivilegeValue、AdjustTokenPrivileges<br>等<br>procedure SetProcessTokenPrivileges(Enabled: boolean; const PrivilegeArray: array of string);<br> var<br> I: integer;<br> Token: THandle;<br> Privileges: PTokenPrivileges;<br>begin<br> if Win32Platform = VER_PLATFORM_WIN32_NT then begin<br> GetMem(Privileges, SizeOf(DWord)+SizeOf(TLUIDAndAttributes) * (High(PrivilegeArray)+1));<br> try<br> with Privileges^ do begin<br> PrivilegeCount := High(PrivilegeArray);<br> for I := 0 to PrivilegeCount do begin<br> if not LookupPrivilegeValue(nil, PChar(PrivilegeArray), Privileges.Luid) then RaiseLastWin32Error;<br> Privileges.Attributes := SE_PRIVILEGE_ENABLED;<br> end;<br> Inc(PrivilegeCount);<br> end;<br> if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token) then<br> RaiseLastWin32Error;<br> try<br> AdjustTokenPrivileges(Token, not Enabled, Privileges, 0, nil, nil);<br> finally<br> CloseHandle(Token);<br> end;<br> finally<br> FreeMem(Privileges);<br> end;<br> end;<br><br>在RegSaveKey前, 可以呼叫SetProcessTokenPrivileges(True, ['SeBackupPrivilege']);<br>如果要將Dump出來的資料Restore回Registry中, 則在Restore前要設定SeRestorePrivilege<br><br><br>