}//end of public static GetLUIDFromPrivilageName(Win32API.Privilege privilege) /// <summary> /// Checks Whether The Proccess Has A Specified Privilege /// </summary> /// <param name="privilege">Required Privilege</param> /// <param name="processTokenHandle">Token Handle of Process</param> public static Boolean HasPrivilege(Win32API.Privilege privilege, IntPtr processTokenHandle) { //Get the nessesary LUID for the required privilage Win32API.LUID _PrivLUID = GetLUIDFromPrivilageName(privilege); //did we get something valid? if (_PrivLUID.HighPart == 0) { return(false); } //get a list of privs Win32API.LUID_AND_ATTRIBUTES[] _Privs = GetPrivileges(processTokenHandle); //cycle through each privilage and dump out to screen foreach (var luidAndAttributes in _Privs) { if (luidAndAttributes.Luid.Equals(_PrivLUID)) { return(true); } }//end of foreach return(false); }
/// <summary> /// Resolves A Specified LUID Value Into The Apropriate Windows Privilege /// </summary> public static String GetPrivilegeName(Win32API.LUID luid) { try { StringBuilder _PrivilegeName = new StringBuilder(); //hold the length of the LuID Struct Int32 _NameLength = 0; //first method call is to get the _NameLength so we can allocate a buffer Win32API.LookupPrivilegeName(String.Empty, ref luid, _PrivilegeName, ref _NameLength); //make sure there is sufficient space in memory _PrivilegeName.EnsureCapacity(_NameLength); //look up the privilage name if (Win32API.LookupPrivilegeName(String.Empty, ref luid, _PrivilegeName, ref _NameLength)) { return(_PrivilegeName.ToString()); }//if (Win32API.LookupPrivilegeName(String.Empty, ref luid, _PrivilegeName, ref _NameLength)) } catch (Exception) { Console.WriteLine("## ERROR ## - Problem Getting Privilege Name!\nWin32 Error: '{0}', LUID '{1}'", Marshal.GetLastWin32Error(), luid); }//end of try-catch //default catch all return(String.Empty); }//end of public static String GetPrivilegeName(Win32API.LUID luid)
/// <summary> /// Gets The System LUID Value for The Specified Privilege /// </summary> /// <param name="privilege">Specified Privilege</param> /// <returns>Associated LUID Value</returns> public static Win32API.LUID GetLUIDFromPrivilageName(Win32API.Privilege privilege) { Win32API.LUID _LUID = new Win32API.LUID(); if (Win32API.LookupPrivilegeValue(String.Empty, privilege.ToString(), out _LUID) == false) { Console.WriteLine("## ERROR ## - Problem Resolving Privilage '{0}' To Its LUID!\nWin32 Error: '{1}'", privilege, Marshal.GetLastWin32Error()); return new Win32API.LUID(); } return _LUID; }
}//end of public static String GetPrivilegeName(Win32API.LUID luid) /// <summary> /// Gets The System LUID Value for The Specified Privilege /// </summary> /// <param name="privilege">Specified Privilege</param> /// <returns>Associated LUID Value</returns> public static Win32API.LUID GetLUIDFromPrivilageName(Win32API.Privilege privilege) { Win32API.LUID _LUID = new Win32API.LUID(); if (Win32API.LookupPrivilegeValue(String.Empty, privilege.ToString(), out _LUID) == false) { Console.WriteLine("## ERROR ## - Problem Resolving Privilage '{0}' To Its LUID!\nWin32 Error: '{1}'", privilege, Marshal.GetLastWin32Error()); return(new Win32API.LUID()); } return(_LUID); }//end of public static GetLUIDFromPrivilageName(Win32API.Privilege privilege)