使用NetUserAdd API函数创建远程用户

http://apps.hi.baidu.com/share/detail/33407620

使用NetUserAdd编程创建远程用户
Windows API NetUserAdd()可以创建Windows用户,无论是本地还是远程的用户。

NET_API_STATUS NetUserAdd(
LMSTR servername,
DWORD level,
LPBYTE buf,
LPDWORD parm_err
);

servername
[in] Pointer to a constant string that specifies the DNS or NetBIOS name of the remote server on which the function is to execute. If this parameter is NULL, the local computer is used.

尽管MSDN如是说,但是有一个问题:如果当前的登录用户在远程机器上没有管理员的权限,创建远程用户会失败。例如:当前用户是主机A上的用户Administrator,希望能够创建主机B上一个新用户testB,显然用户HostA\Administrator并不是主机B上的Administrators组的用户,所以创建会因安全问题失败。我们必须提供Windows主机B上的具有管理员权限的用户名和口令,如HostB\Administrator,但即使如此NetUserAdd()该怎样告诉Windows呢?

我想过Impersonate等函数,但比如ImpersonateLogonUser()并不能模拟远程用户。在国外的网站上也找不到类似的例子,正在一筹莫展之时,突然想到了试试先让主机A与主机B建立一个网络连接,即调用WNetAddConnection2()建立一个网络映射,然后再调用NetUserAdd(),结果居然成功了!

代码如下:

NETRESOURCE nr;

memset(&nr,0,sizeof(nr));
   nr.dwType = RESOURCETYPE_DISK;
   nr.lpLocalName = "X:";
   nr.lpRemoteName = "\\\\sean01\\d$\\test";

DWORD dwRet = WNetAddConnection2(&nr,"password","sean01\\administrator",CONNECT_UPDATE_PROFILE);

USER_INFO_1 NewUser;

memset(&NewUser,0,sizeof(NewUser));

NewUser.usri1_name = L"UserTestOne"; // Allocates the username
   NewUser.usri1_password = L"abcd1234"; // allocates the password
   NewUser.usri1_priv = 1; // Sets the account type to USER_PRIV_USER
   NewUser.usri1_home_dir = NULL; // We didn‘t supply a Home Directory
   NewUser.usri1_comment = L"Create remote user"; // Comment on the User
   NewUser.usri1_script_path = NULL; // We didn‘t supply a Logon Script Path

dwRet = NetUserAdd(L"\\\\sean01" ,1 ,(LPBYTE)&NewUser, 0);
   if ( dwRet != 0 ) // If the call fails we get a non-zero value
   {
     MessageBox(NULL,"Error Adding User",NULL,NULL);
   }
   else
     MessageBox(NULL,"CreateUser ok",NULL,NULL);

尽管不是最好的办法,但可以使用。希望哪天可以知道怎样用NetUserAdd()就可以搞定。

http://www.cnblogs.com/-clq/archive/2012/02/23/2364559.html

时间: 2024-10-13 12:03:45

使用NetUserAdd API函数创建远程用户的相关文章

mysql创建远程用户并授权

今天需要在本地测试系统功能,因为本地没有数据库,就需要在程序里面连接远程数据库: 先用ssh登录远程服务器,用root连上数据库看看情况: mysql> select Host,User,Password from mysql.user; +----------------+------------------+-------------------------------------------+ | Host | User | Password | +----------------+---

VB.NET 章鱼哥出品--利用API函数AnimateWindow创建Popup提示窗口

当我们打开电脑上网时,是不是会经常看到桌面的右下角弹出一个小的新闻热点窗体,我们可以实现吗?当然可以,这篇文章就来给您掩饰怎么样来用代码实现.看吧,正写着呢弹出了一个. 一.主要用到的函数是API函数AnimateWindow.下面来简单的介绍一下这个函数的使用. 1 函数声明 '声明API函数AnimateWindow.该函数可以动态的操作窗体 Declare Function AnimateWindow Lib "user32" Alias "AnimateWindow&

C++实现VPN工具之常用API函数

RAS是Remote Access Service的缩写,意为:远程访问服务,主要用来配置企业的远程用户对企业内部网络访问,包括拨号访问和vpn方式.微软的所有Windows平台中都有RAS客户机,它允许我们将自己的计算机与另一个地方的远程计算机(其特色是一个远程访问服务器组件)相连,一般情况下,  RAS客户机利用连接了电话线的一个调制解调器,通过拨号的方式呼叫远程计算机.服务器这方面,必须有一项等候DUN连接的服务,RAS客户机和服务器之间的连接建立之后,网络协议堆栈(与所用的分帧协议有关)

linux API函数大全

还没有认真研读过,今晚在其他博客上找了比较久,今晚时间也不多了,等有空再细看 先复制先 获取当前执行路径:getcwd 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接  WNetAddConnection2 创建同一个网络资源的连接  WNetAddConnection3 创建同一个网络资源的连接  WNetCancelConnection 结束一个网络连接  WNetCancelConnection2 结束一个网络连接  WNetCloseEnum

使用 Codec Engine 的 API 函数(三)

本文翻译自TI的手册,该手册是学习GPP+DSP开发的金典文档,希望对各位入门有所帮助,有理解不当之处望请赐教. Codec Engine Application Developer User's Guide.pdf (Literature Number: SPRUE67D) <Codec Engine 应用开发使用手册>           http://blog.csdn.net/dyzok88/article/details/42154487<第一章 Codec Engine 概要

C++ Builder 全部API函数列表

1 其他类似API网站: 新版WIN32API大全:http://www.3http.com/book/win32api/000.htm 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseE

C#常用 API函数大全

常用Windows API1. API之网络函数WNetAddConnection 创建同一个网络资源的永久性连接WNetAddConnection2 创建同一个网络资源的连接WNetAddConnection3 创建同一个网络资源的连接WNetCancelConnection 结束一个网络连接WNetCancelConnection2 结束一个网络连接WNetCloseEnum 结束一次枚举操作WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接WNetDis

API函数

1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接 WNetDisconne

C API函数描述(O-R)

25.2.3.48. mysql_options() int mysql_options(MYSQL *mysql, enum mysql_option option, const char *arg) 描述 可用于设置额外的连接选项,并影响连接的行为.可多次调用该函数来设置数个选项. 应在mysql_init()之后.以及mysql_connect()或mysql_real_connect()之前调用mysql_options(). 选项参量指的是你打算设置的选项.Arg参量是选项的值.如果选