在没有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());
}