我需要使用Delphi创建新的Windows管理员用户。
谢谢。
谢谢。
您可以使用在JEDI Headers中声明的NetUserAdd和NetUserSetGroups函数。
参见此简单示例。
program ProjectAddNewUser;
{$APPTYPE CONSOLE}
uses
JclWin32,//Jedi Library
Windows,
SysUtils;
function CreateWinUser(const wServer, wUsername, wPassword, wGroup:WideString): Boolean;
var
Buf : USER_INFO_2;//Buf for the new user info
Err : NET_API_STATUS;
ParmErr : DWORD;
GrpUsrInfo: USER_INFO_0;//Buf for the group
wDummyStr : WideString;
begin
wDummyStr:='';
FillChar (Buf, SizeOf(USER_INFO_2), 0);
with Buf do
begin
usri2_name := PWideChar(wUsername);
usri2_full_name := PWideChar(wUsername);//You can add a more descriptive name here
usri2_password := PWideChar(wPassword);
usri2_comment := PWideChar(wDummyStr);
usri2_priv := USER_PRIV_USER;
usri2_flags := UF_SCRIPT OR UF_DONT_EXPIRE_PASSWD;
usri2_script_path := PWideChar(wDummyStr);
usri2_home_dir := PWideChar(wDummyStr);
usri2_acct_expires:= TIMEQ_FOREVER;
end;
GrpUsrInfo.usri0_name:=PWideChar(wGroup);
Err := NetUserAdd(PWideChar(wServer), 1, @Buf, @ParmErr);
Result := (Err = NERR_SUCCESS);
if Result then //NOw you must set the group for the new user
begin
Err := NetUserSetGroups(PWideChar(wServer),PWideChar(wGroup),0,@GrpUsrInfo,1);
Result := (Err = NERR_SUCCESS);
end;
end;
begin
if CreateWinUser('localhost', 'MyNewUser','ThePassword','MyWindowsGroup') then
Writeln('Ok')
else
Writeln('False');
Readln;
end.
GrpUserInfo:USER_INFO_0
变成了 LOCALGROUP_MEMBERS_INFO_3
。GrpUserInfo.usri0_name:=PWideChar(wGroup)
变成了 GrpUsrInfo.lgrmi3_domainandname := PWideChar(wUsername)
。并且 Err := NetUserSetGroups(PWideChar(wServer),PWideChar(wGroup),0,@GrpUsrInfo,1)
变成了 Err := NetLocalGroupAddMembers(PWideChar(wServer), PWideChar(wGroup), 3, @GrpUsrInfo, 1)
。 - James L.我认为你需要调用的API是NetUserAdd。
首先,检查Delphi是否提供了对此调用的包装器。如果没有,您将不得不自己编写。如果您不知道如何从Delphi进行Windows API调用,则需要进行更多的研究。