|
[x]
Posted via EE Mobile
|
||
Search, ask, and monitor your questions on the go with EE Mobile. Visit Experts Exchange from your mobile device and never be out of touch again. |
||
| Question |
|
[x]
Attachment Details
|
||
|
[x]
The Solution Rating System
|
||
With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.
Your Input Matters If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support. Thank you! |
||
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: |
Procedure LoadKeyFromFile(Key,Failas:PChar);
const
SE_BACKUP_NAME = 'SeBackupPrivilege';
SE_RESTORE_NAME = 'SeRestorePrivilege';
var
MainKey: HKey;
TP, Prev: TTokenPrivileges;
RetLength: DWORD;
Token: THandle;
LUID: TLargeInteger;
Error: Cardinal;
begin
// enable restore privilege, must be done before trying to open a registry key with backup/restore option
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token) then
begin
if LookupPrivilegeValue(nil, SE_RESTORE_NAME, LUID) then
begin
TP.PrivilegeCount := 1;
TP.Privileges[0].Luid := LUID;
TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
if not AdjustTokenPrivileges(Token, False, TP, SizeOf(TTokenPrivileges), Prev, RetLength) then RaiseLastWin32Error;
if FileExists(Failas) then
begin
// note: Key must already exist!
if RegCreateKeyEx(HKEY_CURRENT_USER, Key, 0, nil, REG_OPTION_BACKUP_RESTORE,
KEY_WRITE, nil, MainKey, @Error) = ERROR_SUCCESS then
try
Error := RegRestoreKey(MainKey, Failas, 0);
if Error <> ERROR_SUCCESS then
begin
ShowMessage(SysErrorMessage(Error));
end;
finally
RegCloseKey(MainKey);
end;
end;
// Revoke all privileges this process holds (including backup)
AdjustTokenPrivileges(Token, True, TP, 0, Prev, RetLength);
// close handle to process token
CloseHandle(Token);
end;
end;
end;
|
Advertisement
| Hall of Fame |