internal ADPrincipal[] GetGroupMembers(string partitionDN, string groupDN, bool recursive)
        {
            this.Init();
            GetADGroupMemberRequest getADGroupMemberRequest = new GetADGroupMemberRequest();

            getADGroupMemberRequest.GroupDN     = groupDN;
            getADGroupMemberRequest.PartitionDN = partitionDN;
            getADGroupMemberRequest.Recursive   = recursive;
            GetADGroupMemberResponse aDGroupMember = this._acctMgmt.GetADGroupMember(this._sessionHandle, getADGroupMemberRequest);
            List <ADPrincipal>       aDPrincipals  = new List <ADPrincipal>();

            if (aDGroupMember.Members == null)
            {
                return(new ADPrincipal[0]);
            }
            else
            {
                ActiveDirectoryPrincipal[] members = aDGroupMember.Members;
                for (int i = 0; i < (int)members.Length; i++)
                {
                    ActiveDirectoryPrincipal activeDirectoryPrincipal = members[i];
                    ADPrincipal aDPrincipal = new ADPrincipal();
                    this.PopulateADPrincipalFromWebServiceData(activeDirectoryPrincipal, aDPrincipal);
                    aDPrincipals.Add(aDPrincipal);
                }
                return(aDPrincipals.ToArray());
            }
        }
 private void PopulateADPrincipalFromWebServiceData(ActiveDirectoryPrincipal inputWSPrincipal, ADPrincipal principalToPopulate)
 {
     principalToPopulate.SID            = new SecurityIdentifier(inputWSPrincipal.SID, 0);
     principalToPopulate.SamAccountName = inputWSPrincipal.SamAccountName;
     this.PopulateADObjectFromWebServiceData(inputWSPrincipal, principalToPopulate);
 }