19. FAQ o Win API

Q> How to create the user and to grant to it the rights? 
A>  
NET_API_STATUS UserAdd (LPSTR username)//(c) Serge Andyk 
{ 
//some used functions are described above 

USER_INFO_2 user_info; 

char compname [256]; 
wchar_t wcompname [256]; 
DWORD parm_err=0; 
LSA_HANDLE PolicyHandle; 

LPTSTR lpszSystemInfo;//ptr. to system info. string 
DWORD cchBuff = 256;//size of comp. or user name 
TCHAR tchBuffer2 [256];//buffer for concat'd. str. 
WCHAR wGroupNameAdd [20] =L "Administrators"; 
lpszSystemInfo = tchBuffer2; 
ZeroMemory (&user_info,sizeof (user_info)); 

    GetComputerName (lpszSystemInfo, &cchBuff); 
    strcpy (compname, "\\\\"); 
    strcat (compname, lpszSystemInfo); 

    mbstowcs (wcompname, compname, strlen (compname) +1); 
    mbstowcs (user_info.usri2_name, username, strlen (username) +1); 

 //------- we create the user------------// 

        user_info.usri2_password = L ""; 
        user_info.usri2_priv = USER_PRIV_USER; 
        user_info.usri2_flags = 

UF_SCRIPT|UF_PASSWD_CANT_CHANGE|UF_DONT_EXPIRE_PASSWD|UF_NORMAL_ACCOUNT; 

user_info.usri2_acct_expires=TIMEQ_FOREVER; 

 NetUserAdd (wcompname,//PDC name 
       2L,//level 
       (LPBYTE) &user_info,//input buffer 
       &parm_err);//parameter in error 

 GetAccountSid ( 
            NULL,//default lookup logic 
            username,//account to obtain SID 
            &pSid//buffer to allocate to contain resultant SID 
            );

 NetLocalGroupAddMember (0, wGroupNameAdd, pSid); 

 //--------- we grant to it some rights-----------// 

OpenPolicy ( 
     wcompname,//target machine 
     POLICY_ALL_ACCESS,    
     &PolicyHandle//resultant policy handle 
      );


SetPrivilegeOnAccount ( 
                    PolicyHandle,//policy handle 
                    pSid,//SID to grant privilege 
                    L "SeInteractiveLogonRight",//Unicode privilege 
                    TRUE//enable the privilege 
                    );

SetPrivilegeOnAccount ( 
                    PolicyHandle,            
                    pSid,                   
                    L "SeNetworkLogonRight", 
                    TRUE                    
                    );


LsaClose (PolicyHandle); 

return 0; 
}

2000 (c) DM