You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

78 lines
3.6 KiB

using System;
using System.Runtime.InteropServices;
using Microsoft.Win32.Security.Win32Structs;
namespace Microsoft.Win32.Security
{
using HANDLE = IntPtr;
using DWORD = UInt32;
using BOOL = Int32;
using LPVOID = IntPtr;
using PSID = IntPtr;
/// <summary>
/// Summary description for TokenPrivilege.
/// </summary>
public class TokenPrivilege
{
public const string SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege";
public const string SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege";
public const string SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege";
public const string SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege";
public const string SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege";
public const string SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege";
public const string SE_TCB_NAME = "SeTcbPrivilege";
public const string SE_SECURITY_NAME = "SeSecurityPrivilege";
public const string SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege";
public const string SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege";
public const string SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege";
public const string SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege";
public const string SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege";
public const string SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege";
public const string SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege";
public const string SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege";
public const string SE_BACKUP_NAME = "SeBackupPrivilege";
public const string SE_RESTORE_NAME = "SeRestorePrivilege";
public const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
public const string SE_DEBUG_NAME = "SeDebugPrivilege";
public const string SE_AUDIT_NAME = "SeAuditPrivilege";
public const string SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege";
public const string SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege";
public const string SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege";
public const string SE_UNDOCK_NAME = "SeUndockPrivilege";
public const string SE_SYNC_AGENT_NAME = "SeSyncAgentPrivilege";
public const string SE_ENABLE_DELEGATION_NAME = "SeEnableDelegationPrivilege";
public const string SE_MANAGE_VOLUME_NAME = "SeManageVolumePrivilege";
private readonly PrivilegeAttributes _attributes;
private readonly Luid _luid;
public TokenPrivilege(string systemName, string privilege, bool enabled)
{
LUID luid;
BOOL rc = Win32.LookupPrivilegeValue(systemName, privilege, out luid);
Win32.CheckCall(rc);
_luid = new Luid(luid);
_attributes = (enabled ? PrivilegeAttributes.Enabled : 0);
}
public TokenPrivilege(string privilege, bool enabled) :
this(null, privilege, enabled)
{
}
public unsafe byte[] GetNativeLUID_AND_ATTRIBUTES()
{
LUID_AND_ATTRIBUTES la;
la.Luid = _luid.GetNativeLUID();
la.Attributes = (uint) _attributes;
var res = new byte[Marshal.SizeOf(typeof (LUID_AND_ATTRIBUTES))];
fixed (byte* luida = res)
{
Marshal.StructureToPtr(la, (IntPtr) luida, false);
}
return res;
}
}
}