using System.Runtime.InteropServices;[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); private void button1_Click(object sender, EventArgs e) { int EntriesRead; int TotalEntries; int Resume; IntPtr bufPtr; 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))); textBox1.AppendText(Users[i].Username + "\r\n"); } NetApiBufferFree(bufPtr); } }
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); private void button1_Click(object sender, EventArgs e)
{
int EntriesRead;
int TotalEntries;
int Resume;
IntPtr bufPtr; 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)));
textBox1.AppendText(Users[i].Username + "\r\n");
}
NetApiBufferFree(bufPtr);
}
}