在Windows 7上创建 - 删除新用户帐户操作系统

问题描述:

我想在我的代码上创建和删除新用户。我设法使用“NetUser”类的“createUser()”函数创建,但是当我在创建标准用户的引用中设置选项时,它仍然创建为来宾帐户。有没有人知道我的问题是什么原因?在Windows 7上创建 - 删除新用户帐户操作系统

我使用这个代码:

//userinfo structure: 

ui.usri1_name = username; 
ui.usri1_password = password; 
ui.usri1_priv = USER_PRIV_USER; 
ui.usri1_home_dir = NULL; 
ui.usri1_comment = NULL; 
ui.usri1_flags = UF_SCRIPT; 
ui.usri1_script_path = NULL; 

//Creating user: 

DWORD dwLevel = 1; 
DWORD dwError = 0; 
NET_API_STATUS nStatus; 
nStatus = NetUserAdd(L"localhost",dwLevel,(LPBYTE)&ui,&dwError); 

这应该创建一个新的用户帐户是一个标准的用户帐户,但它始终是创建来宾用户帐户。这个函数在凭证提供者中运行,所以我不认为这个问题是关于权限的。有关NetUserAdd功能click的更多信息。

+1

我想我们需要更多的信息来帮助,也许也会看到一些代码。 – Rup

+0

可能是UAC问题。您可能想要检查程序是否以管理员身份运行。 –

+0

Eddited。谢谢 – kubudi

您必须将用户添加到名为“用户”的本地组。因此您可以使用NetLocalGroupAddMembers功能。

本地组用户的名称取决于安装的Windows版本的语言。为了获得本地组“用户”的名称,您可以使用CreateWellKnownSid(使用WinBuiltinUsersSid作为WellKnownSidType)和LookupAccountSid

这是我在Windows中创建一个帐户的示例。如果您想将此帐户添加到本地用户,那么您可以登录当前机器,因此需要调用NetLocalGroupAddMembers函数。作为本地组名称您应该只键入“用户”,但它在Windows的语言版本上有所不同。在波兰版本,它将是“Użytkownicy”等。 如果您想要在远程服务器上添加一个帐户,那么它需要调用NetGetDCName和驴第一个参数给它的服务器地址。然后在此示例中的其他函数中使用PDC。 请记住以管理员身份运行此代码(即使在调试时也是IDE)或者您将有访问被拒绝错误。

#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; 

// Get the name of the primary domain controller. 
// Be sure to free the returned buffer. 
// On local machine we don't need to do this 

    //err = NetGetDCName(NULL,     // local computer 
    //    NULL,     // 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(""); 
    user_info.usri1_flags = UF_SCRIPT; 
    user_info.usri1_script_path = TEXT(""); 

     //err = NetUserDel(NULL, L"NowyUse2r"); this will delete user 

    err = NetUserAdd(NULL/*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); 
    case ERROR_ACCESS_DENIED: 
    printf("ERROR_ACCESS_DENIED; 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(NULL, // 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(NULL,  // 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"", 
        L"NewUser", 
        L"SamplePswd", 
        L"Users"); 
    printf("NetSample returned %d\n", err); 
    return(0); 
}