add current/selected user to a group

前端 未结 3 1860
梦毁少年i
梦毁少年i 2021-01-27 01:12

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

相关标签:
3条回答
  • 2021-01-27 01:23

    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.

    0 讨论(0)
  • 2021-01-27 01:24

    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.

    0 讨论(0)
  • 2021-01-27 01:38

    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.

    0 讨论(0)
提交回复
热议问题