简体   繁体   中英

add current/selected user to a group

can anyone tell me how can I (programatically) add the current/selected user to a group (like power user, backup opetarors)

any function/info/code is welcomed

Here you an example using the 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.

Bye.

Well if all you want to do is add a user to a local group then you want the NetLocalGroupAddMembers API (to do it in C anyway).

As a simple example:

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);

The group name is just the textual name of the group on the system which you can determine programatically using something like:

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);
}

Adding to global group you will need to instead use the NetGroupAddUser API.

You can use the NetLocalGroupAddMembers function in the Windows API.

The JEDI API Library includes a Lan Manager Access API interface Unit , for use with Delphi.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM