下面是创建一个管理员(administrator)帐户的代码:
#pragma comment(lib, "Netapi32.lib")

#include <Windows.h>
#include <Lm.h>

int main(int argc, char* argv[])


{
//Create an ordinary account
NET_API_STATUS ret = 0;
DWORD dwErr = 0;
USER_INFO_1 oUserInfo;
ZeroMemory(&oUserInfo, sizeof(oUserInfo));
oUserInfo.usri1_name = L"NewUser";
oUserInfo.usri1_priv = USER_PRIV_USER;
oUserInfo.usri1_flags = UF_NORMAL_ACCOUNT;
ret = NetUserAdd(NULL, 1, (LPBYTE)(&oUserInfo), &dwErr);

//Add that accout into the administrators group
_LOCALGROUP_MEMBERS_INFO_3 oUser;
oUser.lgrmi3_domainandname = oUserInfo.usri1_name;
ret = NetLocalGroupAddMembers(NULL, L"Administrators", 3, (LPBYTE)(&oUser), 1);

return 0;
} 在实现这段代码之前,走了不少弯路。
1)NetUserAdd是除了用ASDI创建帐户外另一个选择。
2)Windows提供的几个将account加入到group的API,很相似,容易出错。
开始,我想都没想就用了“NetGroupAdd”来添加用户,当始终返回2220错误,找不到group。
然后猜测管理员组名可能不是“Administrators”,就想枚举系统中所有group,用
NetGroupEnum or NetQueryDisplayInformation函数,结果只能枚举到一个奇怪的group--“None”。
Code Project一个类似工程也是这样。郁闷啦。
在痛苦的找很多资料后,发现NetGroupAdd竟然是操纵global group,Local group是另一函数“
NetLocalGroupAdd”。相应的枚举函数是NetLocalGroupEnum。