Поделиться через


Функция 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

См. также раздел

Коды ошибок ADSI

Функции ADSI

FreeADsMem