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);
}
}