/// <summary> /// return Datatable from container /// </summary> /// <param name="aDContainer"></param> public DataTable FillDataTableFromADContainer(DirectoryEntry aDContainer) { try { if (aDContainer == null) { return(null); } DataTable containerData = new DataTable(); containerData.Columns.Add("Property", typeof(string)); containerData.Columns.Add("Value", typeof(string)); foreach (object ADProperties in aDContainer.Properties.PropertyNames) { if (!(ADProperties.ToString().Contains("ms-Mcs-AdmPwdExpirationTime") | (ADProperties.ToString().Contains("ms-Mcs-AdmPwd")))) { IADsPropertyList oPropList = (aDContainer.NativeObject as IADsPropertyList); IADsPropertyEntry oPropEntry = (oPropList.GetPropertyItem(ADProperties.ToString(), (int)ADSTYPEENUM.ADSTYPE_UNKNOWN) as IADsPropertyEntry); int iADsType = oPropEntry.ADsType; string teste = PropertyToString(aDContainer, oPropEntry, iADsType); containerData.Rows.Add(ADProperties.ToString(), teste); // ListViewItem ListItem = new ListViewItem(ADProperties.ToString(), 0); //ListItem.SubItems.Add(PropertyToString(aDContainer, oPropEntry, iADsType)); } } return(containerData); } catch (System.Exception ex) { MessageBox.Show(ex.Message, "Error while populating the Datatable", MessageBoxButtons.OK, MessageBoxIcon.Error); return(null); } }
/// <summary> /// Populates the list from the container which was clicked on the treeview /// </summary> /// <param name="aDContainer"></param> public void FillListViewFromADContainer(ref ListView ctr_list, DirectoryEntry aDContainer) { //Fill the ListView Element try { if (aDContainer == null) { return; } ctr_list.Items.Clear(); foreach (object ADProperties in aDContainer.Properties.PropertyNames) { if (!(ADProperties.ToString().Contains("ms-Mcs-AdmPwdExpirationTime") | (ADProperties.ToString().Contains("ms-Mcs-AdmPwd")))) { IADsPropertyList oPropList = (aDContainer.NativeObject as IADsPropertyList); IADsPropertyEntry oPropEntry = (oPropList.GetPropertyItem(ADProperties.ToString(), (int)ADSTYPEENUM.ADSTYPE_UNKNOWN) as IADsPropertyEntry); int iADsType = oPropEntry.ADsType; ListViewItem ListItem = new ListViewItem(ADProperties.ToString(), 0); ListItem.SubItems.Add(PropertyToString(aDContainer, oPropEntry, iADsType)); ctr_list.Items.AddRange(new ListViewItem[] { ListItem }); } } } catch (System.Exception ex) { MessageBox.Show(ex.Message, "Error while populating the list", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// /// </summary> /// <param name="aEntry"></param> /// <param name="aPropEntry"></param> /// <param name="aADsType"></param> /// <returns></returns> public string PropertyToString(DirectoryEntry aEntry, IADsPropertyEntry aPropEntry, int aADsType) { List <string> alsValues = new List <string>(); ADSTYPEENUM oEnum = (ADSTYPEENUM)aADsType; try { foreach (IADsPropertyValue oPropValue in (object[])aPropEntry.Values) { switch (oEnum) { case ADSTYPEENUM.ADSTYPE_DN_STRING: alsValues.Add(oPropValue.DNString); break; case ADSTYPEENUM.ADSTYPE_CASE_EXACT_STRING: alsValues.Add(oPropValue.CaseExactString); break; case ADSTYPEENUM.ADSTYPE_CASE_IGNORE_STRING: alsValues.Add(oPropValue.CaseIgnoreString); break; case ADSTYPEENUM.ADSTYPE_PRINTABLE_STRING: alsValues.Add(oPropValue.PrintableString); break; case ADSTYPEENUM.ADSTYPE_NUMERIC_STRING: alsValues.Add(oPropValue.NumericString); break; case ADSTYPEENUM.ADSTYPE_BOOLEAN: alsValues.Add(oPropValue.Boolean.ToString()); break; case ADSTYPEENUM.ADSTYPE_INTEGER: if (aPropEntry.Name == "primaryGroupID") { alsValues.Add(oPropValue.Integer.ToString() + m_Delimiter + "(" + GetPrimaryGroup(aEntry, null) + ")"); } else { int iValue = oPropValue.Integer; alsValues.Add(iValue.ToString() + m_Delimiter + "(Hex: 0x" + iValue.ToString("X") + ")"); } break; case ADSTYPEENUM.ADSTYPE_UTC_TIME: alsValues.Add(oPropValue.UTCTime.ToString()); break; case ADSTYPEENUM.ADSTYPE_OCTET_STRING: // handle the objectSID if (aPropEntry.Name == "objectSid") { // alsValues.Add(oPropValue.OctetString.ToString()); StringBuilder sbSID = new StringBuilder(); byte[] usrSID = (byte[])oPropValue.OctetString; foreach (byte b in usrSID) { sbSID.AppendFormat("{0:x2}", b); } alsValues.Add(sbSID.ToString() + m_Delimiter + "(" + ObjectSidToString(usrSID) + ")"); } else if (aPropEntry.Name == "objectGUID") { StringBuilder sbGUID = new StringBuilder(); byte[] usrGUID = (byte[])oPropValue.OctetString; foreach (byte b in usrGUID) { sbGUID.AppendFormat("{0:x2}", b); } alsValues.Add(sbGUID.ToString() + m_Delimiter + "(CLSID-style: " + ObjectGUIDToStringGUID(sbGUID.ToString()) + ")"); } else { alsValues.Add("(OCTET_STRING not yet supported)"); } break; case ADSTYPEENUM.ADSTYPE_LARGE_INTEGER: try { Int64 iLargeInt = 0; IADsLargeInteger int64Val = (IADsLargeInteger)oPropValue.LargeInteger; iLargeInt = int64Val.HighPart * 4294967296 + int64Val.LowPart; // check for special cases string sPropName = aPropEntry.Name.ToLower(); if (sPropName == "accountexpires" || sPropName == "badpasswordtime" || sPropName == "creationtime" || sPropName == "lastlogoff" || sPropName == "lastlogon" || sPropName == "pwdlastset") { string sTimeString = ConvertLargeIntToDate(iLargeInt); alsValues.Add(sTimeString + m_Delimiter + iLargeInt.ToString()); } else { alsValues.Add(iLargeInt.ToString() + m_Delimiter + "(Hex: 0x" + iLargeInt.ToString("X") + ")"); } } catch (Exception) { // } break; case ADSTYPEENUM.ADSTYPE_CASEIGNORE_LIST: alsValues.Add("(CASEIGNORE_LIST not yet supported)"); break; case ADSTYPEENUM.ADSTYPE_PATH: alsValues.Add("(PATH not yet supported)"); break; case ADSTYPEENUM.ADSTYPE_INVALID: alsValues.Add("(invalid ADs type: " + aADsType.ToString() + ")"); break; case ADSTYPEENUM.ADSTYPE_PROV_SPECIFIC: alsValues.Add("(PROV_SPECIFIC not yet supported)"); break; case ADSTYPEENUM.ADSTYPE_OBJECT_CLASS: alsValues.Add("(OBJECT_CLASS not yet supported)"); break; case ADSTYPEENUM.ADSTYPE_OCTET_LIST: alsValues.Add("(OCTET_LIST not yet supported)"); break; case ADSTYPEENUM.ADSTYPE_POSTALADDRESS: alsValues.Add("(POSTALADDRESS not yet supported)"); break; case ADSTYPEENUM.ADSTYPE_TIMESTAMP: alsValues.Add("(TIMESTAMP not yet supported)"); break; case ADSTYPEENUM.ADSTYPE_BACKLINK: alsValues.Add("(BACKLINK not yet supported)"); break; case ADSTYPEENUM.ADSTYPE_TYPEDNAME: alsValues.Add("(TYPEDNAME not yet supported)"); break; case ADSTYPEENUM.ADSTYPE_HOLD: alsValues.Add("(HOLD not yet supported)"); break; case ADSTYPEENUM.ADSTYPE_NETADDRESS: alsValues.Add("(NETADDRESS not yet supported)"); break; case ADSTYPEENUM.ADSTYPE_REPLICAPOINTER: alsValues.Add("(REPLICAPOINTER not yet supported)"); break; case ADSTYPEENUM.ADSTYPE_FAXNUMBER: alsValues.Add("(FAXNUMBER not yet supported)"); break; case ADSTYPEENUM.ADSTYPE_EMAIL: alsValues.Add("(EMAIL not yet supported)"); break; case ADSTYPEENUM.ADSTYPE_NT_SECURITY_DESCRIPTOR: alsValues.Add(aADsType.ToString()); break; case ADSTYPEENUM.ADSTYPE_UNKNOWN: alsValues.Add("(unknown AD type: " + aADsType.ToString() + ")"); break; case ADSTYPEENUM.ADSTYPE_DN_WITH_BINARY: alsValues.Add("(DN_WITH_BINARY not yet supported)"); break; case ADSTYPEENUM.ADSTYPE_DN_WITH_STRING: alsValues.Add("(DN_WITH_STRING not yet supported)"); break; default: alsValues.Add("(unknown AD type: " + aADsType.ToString() + ")"); break; } } } catch { } if (alsValues.Count > 0) { StringBuilder oSB = new StringBuilder(alsValues[0].ToString()); for (int ix = 1; ix < alsValues.Count; ix++) { oSB.Append(m_Delimiter + alsValues[ix]); } return(oSB.ToString()); } else { return(string.Empty); } }