将当前/所选用户添加到组

时间:2009-10-18 07:43:43

标签: c delphi scripting

任何人都可以告诉我如何(以编程方式)将当前/所选用户添加到组(如高级用户,备份操作员)

欢迎任何函数/信息/代码

3 个答案:

答案 0 :(得分:2)

这是一个使用Jedi JCL

的示例
program Delphi_AdduserToGroup;

{$APPTYPE CONSOLE}

uses
  Windows,
  JclWin32,
  SysUtils;


Procedure AddUsertoGroup(aUser,aGroup:PWideChar);
var
  GroupMembersInfo : PLocalGroupMembersInfo3;
  ResInt           : Integer;
begin
  GetMem(GroupMembersInfo,sizeof(TLocalGroupMembersInfo3));
  try
    //Writeln(aUser+'->'+aGroup);
    GroupMembersInfo^.lgrmi3_domainandname   :=aUser;
    ResInt:=NetLocalGroupAddMembers(nil,aGroup,3,pointer(GroupMembersInfo),1);
    case ResInt of
    NERR_Success         : Writeln('User added to group '+aGroup);
    ERROR_ACCESS_DENIED  : Writeln('The user does not have access to the requested information.');
    ERROR_NO_SUCH_MEMBER : Writeln('One or more of the members specified do not exist. Therefore, no new members were added.');
    ERROR_MEMBER_IN_ALIAS: Writeln('One or more of the members specified were already members of the local group. No new members were added.');
    ERROR_INVALID_MEMBER : Writeln('One or more of the members cannot be added because their account type is invalid. No new members were added.');
    else
     Writeln('Error '+IntToStr(ResInt));
    end;
  finally
    FreeMem(GroupMembersInfo);
  end;
end;


begin
  try
     AddUsertoGroup('myuser','Administrators');
     Readln;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

再见。

答案 1 :(得分:1)

如果您只想将用户添加到本地组,那么您需要NetLocalGroupAddMembers API(无论如何都要在C中执行)。

举个简单的例子:

LOCALGROUP_MEMBERS_INFO_3 member[1];

// Add using fully qualified name, could also use SID with LOCALGROUP_MEMBERS_INFO_0
member[0].lgrmi3_domainandname = L"MAIN\\username";

status = NetLocalGroupAddMembers(NULL, L"Power Users", 3, (LPBYTE)member, 1);

组名只是系统上组的文本名称,您可以使用以下方式以编程方式确定:

PLOCALGROUP_INFO_0 groups = NULL;
DWORD dwCount = 0;
DWORD dwTotalCount = 0;

NET_API_STATUS status = NetLocalGroupEnum(NULL, 0, (LPBYTE*)&groups, MAX_PREFERRED_LENGTH, &dwCount, &dwTotalCount, NULL);

if(status == NERR_Success)
{
    for(DWORD i = 0; i < dwCount; i++)
    {
        printf("%ls\n", groups[i].lgrpi0_name);
    }
    NetApiBufferFree(groups);
}
else
{
    printf("Error %d\n", status);
}

添加到全局组,您需要使用NetGroupAddUser API。

答案 2 :(得分:0)

您可以使用Windows API中的NetLocalGroupAddMembers功能。

JEDI API Library包含Lan Manager Access API interface Unit,用于Delphi。