public static List <PrivilegeInfo> GetTokenPrivileges(SafeNativeHandle hToken) { using (SafeMemoryBuffer tokenInfo = GetTokenInformation(hToken, NativeHelpers.TokenInformationClass.TokenPrivileges)) { NativeHelpers.TOKEN_PRIVILEGES tokenPrivs = (NativeHelpers.TOKEN_PRIVILEGES)Marshal.PtrToStructure( tokenInfo.DangerousGetHandle(), typeof(NativeHelpers.TOKEN_PRIVILEGES)); NativeHelpers.LUID_AND_ATTRIBUTES[] luidAttrs = new NativeHelpers.LUID_AND_ATTRIBUTES[tokenPrivs.PrivilegeCount]; PtrToStructureArray(luidAttrs, IntPtr.Add(tokenInfo.DangerousGetHandle(), Marshal.SizeOf(tokenPrivs.PrivilegeCount))); return(luidAttrs.Select(la => new PrivilegeInfo(la)).ToList()); } }
internal PrivilegeInfo(NativeHelpers.LUID_AND_ATTRIBUTES la) { Name = TokenUtil.GetPrivilegeName(la.Luid); Attributes = (PrivilegeAttributes)la.Attributes; }