65,187
社区成员




HRESULT hr;
IDirectorySearch *pSearch;
if(namebuf == NULL)
return 0;
if(domain ==NULL)
return 0;
if(adname == NULL)
return 0;
if(password == NULL)
return 0;
CoInitialize(NULL);
char admainbuf[100] = {0};
strcpy(admainbuf,"LDAP://");
strcat(admainbuf,domain);
hr = ADsOpenObject(CComBSTR(admainbuf/*"LDAP://192.168.6.230"*/), //地址
CComBSTR(adname/*"tanzhenglian"*/), //用户
CComBSTR(password/*"1qaz!QAZ"*/), //密码
ADS_SECURE_AUTHENTICATION,
IID_IDirectorySearch,
(void**)&pSearch);
if(hr == 0x8007052e)//hr = 0x8007052e 登录失败: 未知的用户名或错误密码。
return -1;
if(hr == 0x8007203a)//hr = 0x8007203a 该服务器不可操作。
return -2;
if (FAILED(hr))
return 0;
ADS_SEARCHPREF_INFO prefInfo[1];
prefInfo[0].dwSearchPref = ADS_SEARCHPREF_SEARCH_SCOPE;
prefInfo[0].vValue.dwType = ADSTYPE_INTEGER;
prefInfo[0].vValue.Integer = 100;
hr = pSearch->SetSearchPreference( prefInfo, 1);
if (FAILED(hr))
{
pSearch->Release();
}
// LPWSTR pszSearchFilter = L"(&(objectClass=user)(objectCategory=person))";
LPWSTR pszSearchFilter = L"(&(objectClass=group))";
LPWSTR pszAttr[] = {L"sAMAccountName"};
ADS_SEARCH_HANDLE hSearch;
LPOLESTR pszColumn = NULL;
int iCount = 0;
DWORD x = 0;
DWORD dwCount= sizeof(pszAttr)/sizeof(LPWSTR);
hr = pSearch->ExecuteSearch(
pszSearchFilter,
pszAttr,
dwCount,
&hSearch
);
ADS_SEARCH_COLUMN col;
*count = 0;
if ( SUCCEEDED(hr) )
{
hr = pSearch->GetFirstRow(hSearch);
if (SUCCEEDED(hr))
{
while( hr != S_ADS_NOMORE_ROWS )
{
iCount++;
while( pSearch->GetNextColumnName( hSearch, &pszColumn ) != S_ADS_NOMORE_COLUMNS )
{
hr = pSearch->GetColumn( hSearch, pszColumn, &col );
if ( SUCCEEDED(hr) )
{
for (x = 0; x< col.dwNumValues; x++)
{
namebuf[*count] = new wchar_t[256];
wcscpy(namebuf[*count],col.pADsValues[x].CaseIgnoreString);
//查找到用户组 如何获取组中的 所有用户?
(*count)++;
}
}
pSearch->FreeColumn( &col );
}
FreeADsMem( pszColumn );
hr = pSearch->GetNextRow( hSearch);
}
}
}else
{
return 0;
}
CoUninitialize();