public static void SetPrivilege(AccessTokenHandle handle, string privilege, bool enabled) { var newPrivs = new List <ATPrivilege>(); var attributes = (uint)(enabled ? Constants.SE_PRIVILEGE_ENABLED : Constants.SE_PRIVILEGE_DISABLED); newPrivs.Add(ATPrivilege.FromValues(privilege, attributes)); AccessTokenPrivileges.AdjustTokenPrivileges(handle, newPrivs); }
private void InnerEnablePrivileges() { foreach (var privName in Enum.GetNames(typeof(PrivilegeConstants))) { var privs = new List <ATPrivilege>(); privs.Add(ATPrivilege.CreateEnabled(privName)); try { AccessTokenPrivileges.AdjustTokenPrivileges(this.TokenHandle, privs); } catch { } } }
private void InnerElevateProcess(params PrivilegeConstants[] privs) { var hToken = AccessTokenHandle.GetCurrentProcessTokenHandle(); var privileges = AccessTokenPrivileges.FromTokenHandle(hToken); foreach (var priv in privs) { if (!privileges.IsPrivilegeEnabled(priv)) { //Due to current bug, i can only adjust one privilege at a time. var newPriv = new List <ATPrivilege>(); newPriv.Add(ATPrivilege.CreateEnabled(priv)); AccessTokenPrivileges.AdjustTokenPrivileges(hToken, newPriv); } } }
/// <summary> /// Retrieves all current thread privileges, and enables the /// ones that are possible. /// </summary> public static void SetAllPrivileges(AccessTokenHandle hToken, bool enabled) { foreach (var priv in Enum.GetNames(typeof(PrivilegeConstants))) { var attributes = enabled ? Constants.SE_PRIVILEGE_ENABLED : Constants.SE_PRIVILEGE_DISABLED; var newPriv = new List <ATPrivilege>(); newPriv.Add(ATPrivilege.FromValues(priv, (uint)attributes)); try { AccessTokenPrivileges.AdjustTokenPrivileges(hToken, newPriv); } catch { continue; } } }