Active Directory 查询与使用指南

在没有COM技能的情况下,使用Active Directory可能会显得有些困难。但是,通过本文介绍的简单类CNFCActiveDirBrowser,可以在几分钟内查询Active Directory并开始使用其信息。

CNFCActiveDirBrowser类提供了以下基本方法: bool OpenLDAP(); - 打开基础上下文。 bool Search(_bstr_t ldappath); - 进行搜索。 bool First(); bool Next(); bool Previous(); bool Last(); bool GetNextColumnName(_bstr_t& colname); _variant_t ColValue(_bstr_t colname); 可以通过以下方式使用Active Directory: br.OpenLDAP(); if (br.Search(_bstr_t(query))) { int x = 0; _bstr_t columnname; int ic = 0; while (br.GetNextColumnName(columnname)) { m_lst.InsertColumn(ic++, (LPSTR)columnname, LVCFMT_LEFT, 150); } do { char buf[_MAX_PATH]; LVCOLUMN col; col.mask = LVCF_TEXT; col.pszText = buf; col.cchTextMax = _MAX_PATH; for (int c = 0; m_lst.GetColumn(c, &col); c++) { _bstr_t colname(col.pszText); if (c == 0) m_lst.InsertItem(x, (LPSTR)_bstr_t(br.ColValue(colname)), 0); else m_lst.SetItemText(x, c, (LPSTR)_bstr_t(br.ColValue(colname))); } x++; } while (br.Next()); }

现在,可以使用GUID进行搜索: br.SearchGUID("{69B3EE5C-89DD-427c-8CC6-764E545ED0AB}"); 并遍历所有列的成员: short ColValue(DWORD index, _bstr_t colname, _variant_t& result);

接下来,将根据注释填充Microsoft在成员列中不显示的组成员。这些成员具有与当前组中的主要组ID相等的主要组令牌。感谢Kevin Stanush(SystemTools Software Inc.)为解释了这个问题。

现在,将从主类中检索主要组令牌: getprimaryGroupToken() 并使用相同的类填充具有此主要组令牌的用户,操作如下简单: CNFCActiveDirBrowser pryusers; pryusers.OpenLDAP(); s.Format("(&(objectCategory=user)(primaryGroupID=%s))", br.getprimaryGroupToken()); if (pryusers.Search(_bstr_t(s))) { do { m_tree.InsertItem((LPSTR)_bstr_t(pryusers.ColValue("cn")), 0, 0, membercol); } while (pryusers.Next()); }

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485