public static Boolean IsAdmin(string sGroup, string sUsername) { IntPtr groupInfoPtr, currentStructPtr = IntPtr.Zero; int entriesRead = 0; int totalEntries = 0; int ret = NetLocalGroupGetMembers(null, sGroup, 2, out groupInfoPtr, -1, out entriesRead, out totalEntries, IntPtr.Zero); if (ret == 0) { LOCALGROUP_MEMBERS_INFO_1[] sMembers = new LOCALGROUP_MEMBERS_INFO_1[entriesRead]; IntPtr iterPtr = groupInfoPtr; //string[] sSplit = new string[entriesRead]; for (int i = 0; i < entriesRead; i++) { sMembers[i] = (LOCALGROUP_MEMBERS_INFO_1)Marshal.PtrToStructure(iterPtr, typeof(LOCALGROUP_MEMBERS_INFO_1)); iterPtr = (IntPtr)((int)iterPtr + Marshal.SizeOf(typeof(LOCALGROUP_MEMBERS_INFO_1))); //if (sMembers[i].sName.Contains(sUsername)) //sSplit[i] = sMembers[i].sName.Split('\\')[1]; //if(string.Equals(sSplit[i], sUsername, StringComparison.CurrentCultureIgnoreCase)) if (string.Equals(sMembers[i].sName.Split('\\')[1], sUsername, StringComparison.CurrentCultureIgnoreCase)) { return(true); } } } return(false); }
internal static extern NET_API_STATUS NetLocalGroupGetMembers( string servername, string localgroupname, int level, ref LOCALGROUP_MEMBERS_INFO_1 bufptr, int prefmaxlen, ref int entriesread, ref int totalentries, ref IntPtr resumehandle);