Функция ADsEncodeBinaryData (adshlp.h)
Функция ADsEncodeBinaryData преобразует большой двоичный объект (BLOB) в формат Юникода, подходящий для внедрения в фильтр поиска.
Синтаксис
HRESULT ADsEncodeBinaryData(
[in] PBYTE pbSrcData,
[in] DWORD dwSrcLen,
[out] LPWSTR *ppszDestData
);
Параметры
[in] pbSrcData
Тип: PBYTE
Преобразуемый BLOB-объект.
[in] dwSrcLen
Тип: DWORD
Размер большого двоичного объекта (в байтах).
[out] ppszDestData
Тип: LPWSTR*
Указатель на строку Юникода, завершающуюся значением NULL, которая получает преобразованные данные.
Возвращаемое значение
Тип: HRESULT
Этот метод поддерживает стандартные возвращаемые значения, а также следующие.
Комментарии
В ADSI фильтры поиска должны быть строками Юникода. Иногда фильтр содержит данные, которые обычно представлены непрозрачным большим двоичным объектом данных. Например, может потребоваться включить идентификатор безопасности объекта в фильтр поиска, который содержит двоичные данные. В этом случае необходимо сначала вызвать функцию ADsEncodeBinaryData , чтобы преобразовать двоичные данные в строковый формат Юникода. Если данные больше не требуются, вызовите функцию FreeADsMem , чтобы освободить преобразованную строку Юникода; то есть ppszDestData.
Функция ADsEncodeBinaryData не кодирует байтовые значения, представляющие буквенно-цифровые символы. Вместо этого он поместит символ в строку без кодирования. В результате строка содержит сочетание закодированных и незакодированных символов. Например, если двоичные данные 0x05|0x1A|0x1B|0x43|0x32, закодированная строка будет содержать "\05\1A\1BC2". Это не влияет на фильтр, и фильтры поиска будут правильно работать с этими типами строк.
Примеры
В следующем примере кода показано, как использовать эту функцию.
// Test binary values in filters and use
// a binary filter instead of a string filter in ExecuteSearch.
LPWSTR pszPrefix = L"objectSid=%s";
LPWSTR pszBinaryFilter = NULL;
LPWSTR pszDest = NULL;
HRESULT hr = S_OK;
BYTE column[] = {
0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x15, 0x00,
0x00, 0x00, 0x59, 0x51, 0xb8, 0x17, 0x66, 0x72, 0x5d, 0x25,
0x64, 0x63, 0x3b, 0x0b, 0x29, 0x99, 0x21, 0x00 };
DWORD dwSize = sizeof(column)/sizeof(BYTE);
hr = ADsEncodeBinaryData (
column,
dwSize,
&pszDest
);
if(hr==S_OK)
{
dwSize = wcslen(pszPrefix) + wcslen(pszDest) + 1;
pszBinaryFilter = new WCHAR[dwSize];
sprintf_s(pszBinaryFilter,pszPrefix,pszDest);
}
else
{
return hr;
}
// Perform the search with the pszDest as the filter string. Code omitted.
. . .
// Done with the search and free the converted string.
FreeADsMem( pszDest );
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista |
Минимальная версия сервера | Windows Server 2008 |
Целевая платформа | Windows |
Header | adshlp.h |
Библиотека | Activeds.lib |
DLL | Activeds.dll; AdsLdpc.dll |