Windows — IDirectorySearch GetColumn не возвращает фактические данные (C ++)

Я пытаюсь прочитать некоторые значения атрибутов из Active Directory с помощью IDirectorySearch.
Когда я запускаю свою локальную программу, код работает нормально. Я пишу расширение IIS7 и мой код работает в w3wp.exe. Когда код запускается в w3wp.exe, метод ExecuteSearch находит то, что мне нужно, но GetColumn корректно возвращает только pszAttrName и dwADsType. В pADsValues ​​я вижу неправильные значения (или неинициализированные)

Код:

std::string strFromHex(BYTE* data, int length)
{
std::stringstream ss;

ss << std::hex;

for( size_t i=0;i != length; ++i )
ss << (size_t)data[i];

return ss.str();
}

std::string GetGUID()
{
std::string guid;
IDirectorySearch* dSearch;
hr = ADsOpenObject(L"LDAP://DOMEN", L"UserLogin", L"UserPass", ADS_SECURE_AUTHENTICATION, IID_IDirectorySearch, (void**)&dSearch);

if(FAILED(hr))
return guid;

LPWSTR searchFilter = L"(&(objectClass=user)(| (userPrincipalName=userLogin*)))";
LPWSTR att[] = { L"objectGUID" };
DWORD attCount = 1;
ADS_SEARCH_HANDLE hSearch;
ADS_SEARCH_COLUMN col;

hr = dSearch->ExecuteSearch( searchFilter, att, attCount, &hSearch);

if(FAILED(hr))
return guid;

hr = dSearch->GetFirstRow(hSearch);
while(S_OK == hr)
{
for(DWORD i = 0; i < attCount; i++)
{
hr = dSearch->GetColumn(hSearch, att[i], &col);
if(SUCCEEDED(hr))
{
if( col.dwADsType == ADSTYPE_OCTET_STRING )
guid = strFromHex( col.pADsValues[0].OctetString.lpValue, col.pADsValues[0].OctetString.dwLength );

dSearch->FreeColumn(&col);
}
}
hr = dSearch->GetNextRow(hSearch);
}
hr = dSearch->CloseSearchHandle(hSearch);

return guid;
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …