昨天使用到API函数NetUserAdd, 虽然注意到它涉及的结构USER_INFO_1的成员有LPWSTR(WCHAR *、wchar_t *),但是尝试了多种方法后仍然不能成功的添加用户,肯定是参数类型的问题。只恨自己平时忽视了这些字符编码规则的问题。问题解决后,总结了一下解决经验和方法。
1。要将USER_INFO_1的成员填充完整。示例如下,具体参数参考MSDN。
uiAdd.usri1_name = name;
uiAdd.usri1_password = L"123";
uiAdd.usri1_priv = USER_PRIV_USER;
uiAdd.usri1_comment = NULL;
uiAdd.usri1_flags = UF_SCRIPT;
uiAdd.usri1_home_dir = NULL;
//uiAdd.usri1_password_age = NULL; //NetUserAdd忽略USER_INFO_1的usri1_password_age成员
uiAdd.usri1_script_path = NULL;
retStatus = NetUserAdd(NULL,dwLevel,(LPBYTE)&uiAdd,NULL);
2。参数传递的时候要注意类型的转换。这里主要涉及的是char * 和LPWSTR(即WCHAR或wchar_t)的转换。
void do_NetUserAdd(const char * UserName)
{
USER_INFO_1 uiAdd;
wchar_t * name= new wchar_t[strlen(UserName)+1];
mbstowcs(name,UserName,strlen(UserName));
uiAdd.usri1_name = name;
...... //一下内容参考1
}
void main()
{
do_NetUserAdd("TestUser");
}