搜索二进制数据

尽管 ADSI 搜索功能只支持搜索字符串数据,但也可以搜索二进制数据。 为此,请使用 ADsEncodeBinaryData函数将二进制数据转换为可用于搜索方法的字符串。 搜索二进制数据在搜索 GUID 或 SID 时特别有用,因为这些数据类型是以二进制数据存储的。

使用 ADsEncodeBinaryData 函数时,必须使用 FreeADsMem 函数来释放分配的内存。

下面的 C++ 代码示例展示了如何构建查询字符串,以搜索具有特定 objectGUID 值的对象。

LPWSTR pwszGuid = NULL;
LPWSTR pwszFormat = L"(objectGUID=%s)";
LPWSTR pwszSearch = NULL;
hr = ADsEncodeBinaryData((LPBYTE)pguid, sizeof(GUID), &pwszGuid);
if(FAILED(hr))
{
    goto cleanup;
}

pwszSearch = new WCHAR[lstrlenW(pwszFormat) + lstrlenW(pwszGuid) + 1];
if(NULL == pwszSearch)
{
    goto cleanup;
}
    
swprintf_s(pwszSearch, pwszFormat, pwszGuid);

// Use pwszSearch to perform a query for the object.

cleanup:    
if(pwszGuid)
{
    FreeADsMem(pwszGuid);
}
if(pwszSearch)
{
    delete pwszSearch;
}