|
|
1.1 ! root 1: using System; ! 2: using System.ComponentModel; ! 3: using System.Runtime.InteropServices; ! 4: using System.Security.Principal; ! 5: ! 6: namespace CleanFlashCommon { ! 7: public class WinAPI { ! 8: ! 9: public static void AllowModifications() { ! 10: ModifyPrivilege(PrivilegeName.SeRestorePrivilege, true); ! 11: ModifyPrivilege(PrivilegeName.SeTakeOwnershipPrivilege, true); ! 12: } ! 13: ! 14: public static bool ModifyPrivilege(PrivilegeName privilege, bool enable) { ! 15: LUID luid; ! 16: ! 17: if (!LookupPrivilegeValue(null, privilege.ToString(), out luid)) { ! 18: throw new Win32Exception(); ! 19: } ! 20: ! 21: using (var identity = WindowsIdentity.GetCurrent(TokenAccessLevels.AdjustPrivileges | TokenAccessLevels.Query)) { ! 22: var newPriv = new TOKEN_PRIVILEGES(); ! 23: newPriv.Privileges = new LUID_AND_ATTRIBUTES[1]; ! 24: newPriv.PrivilegeCount = 1; ! 25: newPriv.Privileges[0].Luid = luid; ! 26: newPriv.Privileges[0].Attributes = enable ? SE_PRIVILEGE_ENABLED : 0; ! 27: ! 28: var prevPriv = new TOKEN_PRIVILEGES(); ! 29: prevPriv.Privileges = new LUID_AND_ATTRIBUTES[1]; ! 30: prevPriv.PrivilegeCount = 1; ! 31: uint returnedBytes; ! 32: ! 33: if (!AdjustTokenPrivileges(identity.Token, false, ref newPriv, (uint)Marshal.SizeOf(prevPriv), ref prevPriv, out returnedBytes)) { ! 34: throw new Win32Exception(); ! 35: } ! 36: ! 37: return prevPriv.PrivilegeCount == 0 ? enable /* didn't make a change */ : ((prevPriv.Privileges[0].Attributes & SE_PRIVILEGE_ENABLED) != 0); ! 38: } ! 39: } ! 40: ! 41: const uint SE_PRIVILEGE_ENABLED = 2; ! 42: ! 43: [DllImport("advapi32.dll", SetLastError = true)] ! 44: [return: MarshalAs(UnmanagedType.Bool)] ! 45: static extern bool AdjustTokenPrivileges(IntPtr TokenHandle, [MarshalAs(UnmanagedType.Bool)] bool DisableAllPrivileges, ref TOKEN_PRIVILEGES NewState, ! 46: UInt32 BufferLengthInBytes, ref TOKEN_PRIVILEGES PreviousState, out UInt32 ReturnLengthInBytes); ! 47: ! 48: [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Auto)] ! 49: [return: MarshalAs(UnmanagedType.Bool)] ! 50: static extern bool LookupPrivilegeValue(string lpSystemName, string lpName, out LUID lpLuid); ! 51: ! 52: struct TOKEN_PRIVILEGES { ! 53: public UInt32 PrivilegeCount; ! 54: [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1 /*ANYSIZE_ARRAY*/)] ! 55: public LUID_AND_ATTRIBUTES[] Privileges; ! 56: } ! 57: ! 58: [StructLayout(LayoutKind.Sequential)] ! 59: struct LUID_AND_ATTRIBUTES { ! 60: public LUID Luid; ! 61: public UInt32 Attributes; ! 62: } ! 63: ! 64: [StructLayout(LayoutKind.Sequential)] ! 65: struct LUID { ! 66: public uint LowPart; ! 67: public int HighPart; ! 68: } ! 69: } ! 70: ! 71: public enum PrivilegeName { ! 72: SeAssignPrimaryTokenPrivilege, ! 73: SeAuditPrivilege, ! 74: SeBackupPrivilege, ! 75: SeChangeNotifyPrivilege, ! 76: SeCreateGlobalPrivilege, ! 77: SeCreatePagefilePrivilege, ! 78: SeCreatePermanentPrivilege, ! 79: SeCreateSymbolicLinkPrivilege, ! 80: SeCreateTokenPrivilege, ! 81: SeDebugPrivilege, ! 82: SeEnableDelegationPrivilege, ! 83: SeImpersonatePrivilege, ! 84: SeIncreaseBasePriorityPrivilege, ! 85: SeIncreaseQuotaPrivilege, ! 86: SeIncreaseWorkingSetPrivilege, ! 87: SeLoadDriverPrivilege, ! 88: SeLockMemoryPrivilege, ! 89: SeMachineAccountPrivilege, ! 90: SeManageVolumePrivilege, ! 91: SeProfileSingleProcessPrivilege, ! 92: SeRelabelPrivilege, ! 93: SeRemoteShutdownPrivilege, ! 94: SeRestorePrivilege, ! 95: SeSecurityPrivilege, ! 96: SeShutdownPrivilege, ! 97: SeSyncAgentPrivilege, ! 98: SeSystemEnvironmentPrivilege, ! 99: SeSystemProfilePrivilege, ! 100: SeSystemtimePrivilege, ! 101: SeTakeOwnershipPrivilege, ! 102: SeTcbPrivilege, ! 103: SeTimeZonePrivilege, ! 104: SeTrustedCredManAccessPrivilege, ! 105: SeUndockPrivilege, ! 106: SeUnsolicitedInputPrivilege, ! 107: } ! 108: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.