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

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

  1. 【API】API函数创建用户,添加到管理组

    1 学习目标 使用API添加用户可以绕过某些杀毒软件的限制. 2 编程思路 2.1 代码原理 使用NetUserAdd这个API添加普通权限的用户,NetLocalGroupAddMembers这个A ...

  2. MySQL创建远程用户并授权

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

  3. mysql创建远程用户

    grant all privileges on *.* to myuser@"%" identified by 'password'; 用root用户登陆,然后: grant al ...

  4. mysql 创建新用户、数据库、授权

    创建用户 1.登录mysql mysql -uroot -p 2.创建本地用户(2.3选其一) #use mysql;             //选择mysql数据库 #create user 'w ...

  5. MySQL学习(一)——创建新用户、数据库、授权

    一.创建用户 1.登录mysql mysql -u root -p 2.创建本地用户>/font> use mysql; //选择mysql数据库 create user 'test'@' ...

  6. 实现:API实现创建用户并且添加至管理员

    参考文章:https://www.cnblogs.com/17bdw/p/6790197.html#_label0 利用的API函数: 1.NetUserAdd 2.NetLocalGroupAddM ...

  7. 创建MySQL用户 赋予某指定库表的权限 flush privileges才能生效!!!!;@'localhost'授权本地,@'%'授权远程

    update ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value 建议使用GRANT语句进行授权,语句如下: gra ...

  8. mysql创建远程登陆用户并授权

    在创建安装微擎的过程中,针对第四步 创建远程登陆用户并授权        > grant all PRIVILEGES on database.* to root@'127.0.0.1'  id ...

  9. 【Azure Developer】使用Microsoft Graph API 批量创建用户,先后遇见的三个错误及解决办法

    问题描述 在先前的一篇博文中,介绍了如何使用Microsoft Graph API来创建Azure AD用户(博文参考:[Azure Developer]使用Microsoft Graph API 如 ...

随机推荐

  1. 晨曦之光 linux Crontab 使用(转)

    cron用法说明 cron的用法老是记不住,索性写下来备忘.下文内容大部分是根据<Cron Help Guide>翻译而来,有些部分是自己加上的. 全文如下: cron来源于希腊单词chr ...

  2. 读取一个文件,将其Base64编码,每76个字符加一个换行(转)

    echo chunk_split(base64_encode(file_get_contents('base64.txt'))); 例子 1 本例分隔每个字符,并添加 ".": & ...

  3. 利用systemtap学习Linux路由代码

    http://bbs.chinaunix.net/thread-4090162-1-1.html 一.为什么要这样做读kernel route子系统代码,当我弄懂了数据结构之间的关系以及控制流程后,心 ...

  4. ios从相册:摄像头中获取视频

    ios从相册/摄像头中获取视频 如何从相册中获取视频 使用的是一个和获取照片相同的类UIImagePickerController //相册中获取视频 - (IBAction)clickViedoOF ...

  5. IOS 播放动态Gif图片

    图片分为静态和动态两种,图片的格式有很多种,在开发中比较常见的是.png和.jpg的静态图片,但有的时候在App中需要播放动态图片,比如.gif格式的小表情头像,在IOS中并没有提供直接显示动态图片的 ...

  6. Android热门网络框架Volley详解

    .Volley简介 volley的英文意思为‘群发’.‘迸发’.Volley是2013年谷歌官方发布的一款Android平台上的网络通信库.Volley非常适合一些数据量不大,但需要频繁通信的网络操作 ...

  7. 15、SQL Server 触发器

    SQL Server 触发器 触发器是一种特殊的存储过程,只有当试图用数据操作语言DML来修改数据时才会触发,DML包含对视图和表的增.删.改. 触发器分为DML触发器和DDL触发器,其中DML触发器 ...

  8. 转 sqlserver字段描述相关操作sql

    可以自己查询系统表: SELECT o.name AS tableName, c.name AS columnName, p.[value] AS Description FROM sysproper ...

  9. c# try..... catch

    功能说明:在此例中,try 块包含对可能导致异常的ProcessString()方法的调用.catch子句包含仅在屏幕上显示消息的异常处理程序,当从ProcessString内部调用throw语句时, ...

  10. 借用Toad 生成表空间的使用量图示

    图示产生方法 图示(tablespace uage)如下