home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / netds / winnt / netapi / netsmple / netsmple.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-10-05  |  5.2 KB  |  166 lines

  1.  
  2. /******************************************************************************\
  3. *       This is a part of the Microsoft Source Code Samples.
  4. *       Copyright (C) 1995-1997 Microsoft Corporation.
  5. *       All rights reserved. 
  6. *       This source code is only intended as a supplement to 
  7. *       Microsoft Development Tools and/or WinHelp documentation.
  8. *       See these sources for detailed information regarding the 
  9. *       Microsoft samples programs.
  10. \******************************************************************************/
  11.  
  12.  
  13. /*
  14.     Net API Example
  15.  
  16.     Create a user and a local group and add the user to the local group.
  17.  
  18.     This sample requires NT 3.51
  19. */
  20.  
  21. #define UNICODE 1
  22. #include <windows.h>
  23. #include <lmcons.h>
  24. #include <lmaccess.h>
  25. #include <lmerr.h>
  26. #include <lmapibuf.h>
  27. #include <stdio.h>
  28. #include <stdlib.h>
  29.  
  30. int _CRTAPI1 main( int cArgs, char *pArgs[] );
  31.  
  32. NET_API_STATUS NetSample( LPWSTR lpszDomain,
  33.                           LPWSTR lpszUser,
  34.                           LPWSTR lpszPassword,
  35.                           LPWSTR lpszLocalGroup )
  36. {
  37.  
  38.     USER_INFO_1               user_info;
  39.     LOCALGROUP_INFO_1         localgroup_info;
  40.     LOCALGROUP_MEMBERS_INFO_3 localgroup_members;
  41.     LPWSTR                    lpszPrimaryDC = NULL;
  42.     NET_API_STATUS            err = 0;
  43.     DWORD                     parm_err = 0;
  44.  
  45. /* First get the name of the Primary Domain Controller. */
  46. /* Be sure to free the returned buffer */
  47.  
  48.     err = NetGetDCName( NULL,                        /* Local Machine */
  49.                         lpszDomain,                  /* Domain Name */
  50.                         (LPBYTE *)&lpszPrimaryDC );  /* returned PDC */
  51.  
  52.     if ( err != 0 )
  53.     {
  54.         printf( "Error getting DC name: %d\n", err );
  55.         return( err );
  56.     }
  57.  
  58.  
  59. /* Set up the USER_INFO_1 struct */
  60.  
  61.     user_info.usri1_name = lpszUser;
  62.     user_info.usri1_password = lpszPassword;
  63.     user_info.usri1_priv = USER_PRIV_USER;
  64.     user_info.usri1_home_dir = TEXT("");
  65.     user_info.usri1_comment = TEXT("Sample User");
  66.     user_info.usri1_flags = UF_SCRIPT;
  67.     user_info.usri1_script_path = TEXT("");
  68.  
  69.     err = NetUserAdd( lpszPrimaryDC,       /* PDC name */
  70.                       1,                   /* level */
  71.                       (LPBYTE)&user_info,  /* input buffer */
  72.                       &parm_err );         /* parameter in error */
  73.  
  74.     switch ( err )
  75.     {
  76.     case 0:
  77.         printf("user successfully created.\n");
  78.         break;
  79.     case NERR_UserExists:
  80.         printf("user already exists.\n");
  81.         err = 0;
  82.         break;
  83.     case ERROR_INVALID_PARAMETER:
  84.         printf("Invalid Parameter Error adding user: Parameter Index = %d\n",
  85.                 parm_err);
  86.         NetApiBufferFree( lpszPrimaryDC );
  87.         return( err );
  88.     default:
  89.         printf("Error adding user: %d\n", err);
  90.         NetApiBufferFree( lpszPrimaryDC );
  91.         return( err );
  92.     }
  93.  
  94. /* Set up the LOCALGROUP_INFO_1 struct */
  95.  
  96.     localgroup_info.lgrpi1_name = lpszLocalGroup;
  97.     localgroup_info.lgrpi1_comment = TEXT("Sample Local group.");
  98.  
  99.     err = NetLocalGroupAdd( lpszPrimaryDC,              /* PDC name */
  100.                             1,                          /* level */
  101.                             (LPBYTE)&localgroup_info,   /* input buffer */
  102.                             &parm_err );                /* parm in error */
  103.  
  104.     switch ( err )
  105.     {
  106.     case 0:
  107.         printf("Local Group successfully created.\n");
  108.         break;
  109.     case ERROR_ALIAS_EXISTS:
  110.         printf("Local Group already exists.\n");
  111.         err = 0;
  112.         break;
  113.     case ERROR_INVALID_PARAMETER:
  114.         printf("Invalid Parameter Error adding Local Group: Parameter Index = %d\n",
  115.                 err, parm_err);
  116.         NetApiBufferFree( lpszPrimaryDC );
  117.         return( err );
  118.     default:
  119.         printf("Error adding Local Group: %d\n", err);
  120.         NetApiBufferFree( lpszPrimaryDC );
  121.         return( err );
  122.     }
  123.  
  124. /* Now add the user to the local group */
  125.  
  126.     localgroup_members.lgrmi3_domainandname = lpszUser;
  127.  
  128.     err = NetLocalGroupAddMembers( lpszPrimaryDC,        /* PDC name */
  129.                                    lpszLocalGroup,       /* group name */
  130.                                    3,                    /* passing in name */
  131.                                    (LPBYTE)&localgroup_members, /* Buffer */
  132.                                    1 );                  /* count passed in */
  133.  
  134.     switch ( err )
  135.     {
  136.     case 0:
  137.         printf("User successfully added to Local Group.\n");
  138.         break;
  139.     case ERROR_MEMBER_IN_ALIAS:
  140.         printf("User already in Local Group.\n");
  141.         err = 0;
  142.         break;
  143.     default:
  144.         printf("Error adding User to Local Group: %d\n", err);
  145.         break;
  146.     }
  147.  
  148.     NetApiBufferFree( lpszPrimaryDC );
  149.     return( err );
  150.  
  151. }
  152.  
  153. int _CRTAPI1 main( int    cArgs,
  154.                    char * pArgs[] )
  155. {
  156.     NET_API_STATUS err = 0;
  157.  
  158.     printf( "Calling NetSample.\n" );
  159.     err = NetSample( TEXT("SampleDomain"),
  160.                      TEXT("SampleUser"),
  161.                      TEXT("SamplePswd"),
  162.                      TEXT("SampleLG") );
  163.     printf( "NetSample returned %d\n", err );
  164.     return( 0 );
  165. }
  166.