internal static Boolean RegistryLoadSetPrivilege()
{
IntPtr _myToken;
SafeNativeMethods.TokPriv1Luid _tokenPrivileges = new SafeNativeMethods.TokPriv1Luid();
SafeNativeMethods.TokPriv1Luid _tokenPrivileges2 = new SafeNativeMethods.TokPriv1Luid();
SafeNativeMethods.LUID _restoreLuid;
SafeNativeMethods.LUID _backupLuid;
if (!SafeNativeMethods.OpenProcessToken(SafeNativeMethods.GetCurrentProcess(), SafeNativeMethods.TokenAccessRights.TOKEN_ADJUST_PRIVILEGES | SafeNativeMethods.TokenAccessRights.TOKEN_QUERY, out _myToken))
{
LibraryLogging.Error("SetPrivilege() OpenProcess Error: {0}", LastError());
return false;
}
if (!SafeNativeMethods.LookupPrivilegeValue(null, SafeNativeMethods.TokenAccessRights.SE_RESTORE_NAME, out _restoreLuid))
{
LibraryLogging.Error("SetPrivilege() LookupPrivilegeValue Error: {0}", LastError());
return false;
}
if (!SafeNativeMethods.LookupPrivilegeValue(null, SafeNativeMethods.TokenAccessRights.SE_BACKUP_NAME, out _backupLuid))
{
LibraryLogging.Error("SetPrivilege() LookupPrivilegeValue Error: {0}", LastError());
return false;
}
_tokenPrivileges.Attr = SafeNativeMethods.TokenAccessRights.SE_PRIVILEGE_ENABLED;
_tokenPrivileges.Luid = _restoreLuid;
_tokenPrivileges.Count = 1;
_tokenPrivileges2.Attr = SafeNativeMethods.TokenAccessRights.SE_PRIVILEGE_ENABLED;
_tokenPrivileges2.Luid = _backupLuid;
_tokenPrivileges2.Count = 1;
if (!SafeNativeMethods.AdjustTokenPrivileges(_myToken, false, ref _tokenPrivileges, 0, IntPtr.Zero, IntPtr.Zero))
{
LibraryLogging.Error("SetPrivilege() AdjustTokenPrivileges Error: {0}", LastError());
return false;
}
if (!SafeNativeMethods.AdjustTokenPrivileges(_myToken, false, ref _tokenPrivileges2, 0, IntPtr.Zero, IntPtr.Zero))
{
LibraryLogging.Error("SetPrivilege() AdjustTokenPrivileges Error: {0}", LastError());
return false;
}
if (!CloseHandle(_myToken))
{
LibraryLogging.Warn("Can't close handle _myToken");
}
SafeNativeMethods.RegistryLoadPrivilegeSet = true;
return true;
}