#include <windows.h>
#include <lm.h>
#include <stdio.h>
#pragma hdrstop

int main( void );

int main( void )
{
	wchar_t *server = L"\\\\BABYA"; // DC name here
	wchar_t *user = L"felixk"; // user to ask for

	DWORD rc, pref, got, total;
	GROUP_USERS_INFO_0 *buf;

	pref = 16; // start low, get more later
	buf = NULL; // important!

	do
	{
		pref *= 2; // bump buffer size
		printf( "Trying with prefmaxlen == %lu bytes\n", pref );
		if ( buf != NULL )
		{
			NetApiBufferFree( buf );
			buf = NULL; // important!
		}

		rc = NetUserGetGroups( server, user, 0, (LPBYTE *) &buf, pref, &got, &total );
	} while ( rc == NERR_BufTooSmall || rc == ERROR_MORE_DATA );

	if ( rc != 0 )
	{
		printf( "Duh! -- error %lu\n", rc );
		return 1;
	}

	for ( rc = 0; buf != NULL && rc < got; rc ++ )
	{
		printf( "%S\n", buf[rc].grui0_name ); // %S: cap-S toggles Unicode/ANSI
	}

	if ( buf != NULL )
		NetApiBufferFree( buf );

	return 0;
}

