private unsafe static bool ArePrivilegesEnabled(this AccessToken token, bool all, Privilege[] privileges) { if (privileges == null || privileges.Length == 0) { return(true); } byte * buffer = stackalloc byte[sizeof(PrivilegeSet) + (sizeof(LuidAndAttributes) * (privileges.Length - 1))]; PrivilegeSet *set = (PrivilegeSet *)buffer; set->Control = all ? PRIVILEGE_SET_ALL_NECESSARY : 0; set->PrivilegeCount = (uint)privileges.Length; Span <LuidAndAttributes> luids = new Span <LuidAndAttributes>(&set->Privilege, privileges.Length); for (int i = 0; i < privileges.Length; i++) { luids[i] = LookupPrivilegeValue(privileges[i]); } if (!Imports.PrivilegeCheck(token, set, out Boolean32 result)) { throw Error.GetExceptionForLastError(); } return(result); }
public unsafe static extern Boolean32 PrivilegeCheck( AccessToken ClientToken, PrivilegeSet *RequiredPrivileges, out Boolean32 pfResult);
public static unsafe extern IntBoolean PrivilegeCheck( AccessToken ClientToken, PrivilegeSet *RequiredPrivileges, out IntBoolean pfResult);