Creating a Local Group and Adding a User
To create a new local group, call the NetLocalGroupAdd function. To add a user to that group, call the NetLocalGroupAddMembers function.
The following program allows you to create a user and a local group and add the user to the local group.
#ifndef UNICODE #define UNICODE #endif #include <windows.h> #include <lmcons.h> #include <lmaccess.h> #include <lmerr.h> #include <lmapibuf.h> #include <stdio.h> #include <stdlib.h> #pragma comment(lib, "netapi32.lib") NET_API_STATUS NetSample( LPWSTR lpszDomain, LPWSTR lpszUser, LPWSTR lpszPassword, LPWSTR lpszLocalGroup ) { USER_INFO_1 user_info; LOCALGROUP_INFO_1 localgroup_info; LOCALGROUP_MEMBERS_INFO_3 localgroup_members; LPWSTR lpszPrimaryDC = NULL; NET_API_STATUS err = 0; DWORD parm_err = 0; // First get the name of the primary domain controller. // Be sure to free the returned buffer. err = NetGetDCName( NULL, // local computer lpszDomain, // domain name (LPBYTE *) &lpszPrimaryDC ); // returned PDC if ( err != 0 ) { printf( "Error getting DC name: %d\n", err ); return( err ); } // Set up the USER_INFO_1 structure. user_info.usri1_name = lpszUser; user_info.usri1_password = lpszPassword; user_info.usri1_priv = USER_PRIV_USER; user_info.usri1_home_dir = TEXT(""); user_info.usri1_comment = TEXT("Sample User"); user_info.usri1_flags = UF_SCRIPT; user_info.usri1_script_path = TEXT(""); err = NetUserAdd( lpszPrimaryDC, // PDC name 1, // level (LPBYTE) &user_info, // input buffer &parm_err ); // parameter in error switch ( err ) { case 0: printf("User successfully created.\n"); break; case NERR_UserExists: printf("User already exists.\n"); err = 0; break; case ERROR_INVALID_PARAMETER: printf("Invalid parameter error adding user; parameter index = %d\n", parm_err); NetApiBufferFree( lpszPrimaryDC ); return( err ); default: printf("Error adding user: %d\n", err); NetApiBufferFree( lpszPrimaryDC ); return( err ); } // Set up the LOCALGROUP_INFO_1 structure. localgroup_info.lgrpi1_name = lpszLocalGroup; localgroup_info.lgrpi1_comment = TEXT("Sample local group."); err = NetLocalGroupAdd( lpszPrimaryDC, // PDC name 1, // level (LPBYTE) &localgroup_info, // input buffer &parm_err ); // parameter in error switch ( err ) { case 0: printf("Local group successfully created.\n"); break; case ERROR_ALIAS_EXISTS: printf("Local group already exists.\n"); err = 0; break; case ERROR_INVALID_PARAMETER: printf("Invalid parameter error adding local group; parameter index = %d\n", err, parm_err); NetApiBufferFree( lpszPrimaryDC ); return( err ); default: printf("Error adding local group: %d\n", err); NetApiBufferFree( lpszPrimaryDC ); return( err ); } // Now add the user to the local group. localgroup_members.lgrmi3_domainandname = lpszUser; err = NetLocalGroupAddMembers( lpszPrimaryDC, // PDC name lpszLocalGroup, // group name 3, // name (LPBYTE) &localgroup_members, // buffer 1 ); // count switch ( err ) { case 0: printf("User successfully added to local group.\n"); break; case ERROR_MEMBER_IN_ALIAS: printf("User already in local group.\n"); err = 0; break; default: printf("Error adding user to local group: %d\n", err); break; } NetApiBufferFree( lpszPrimaryDC ); return( err ); } int main() { NET_API_STATUS err = 0; printf( "Calling NetSample.\n" ); err = NetSample( L"SampleDomain", L"SampleUser", L"SamplePswd", L"SampleLG" ); printf( "NetSample returned %d\n", err ); return( 0 ); }
Send comments about this topic to Microsoft
Build date: 10/26/2012