[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct USER_INFO_0 { public string Username; } [DllImport("Netapi32.dll ")] extern static int NetUserEnum( [MarshalAs(UnmanagedType.LPWStr)] string servername, int level, int filter, out IntPtr bufptr, int prefmaxlen, out int entriesread, out int totalentries, out int resume_handle);
[DllImport("Netapi32.dll ")] extern static int NetApiBufferFree(IntPtr Buffer); public static List<string> GetSysUserNames() { int EntriesRead; int TotalEntries; int Resume; IntPtr bufPtr; List<string> temp = new List<string>();
NetUserEnum(null, 0, 2, out bufPtr, -1, out EntriesRead, out TotalEntries, out Resume); if (EntriesRead > 0) { USER_INFO_0[] Users = new USER_INFO_0[EntriesRead]; IntPtr iter = bufPtr; for (int i = 0; i < EntriesRead; i++) { Users[i] = (USER_INFO_0)Marshal.PtrToStructure(iter, typeof(USER_INFO_0)); iter = (IntPtr)((int)iter + Marshal.SizeOf(typeof(USER_INFO_0))); temp.Add(Users[i].Username); } NetApiBufferFree(bufPtr); } return temp; }