ADsEncodeBinaryData 函数 (adshlp.h)

ADsEncodeBinaryData 函数将 BLOB) (二进制大型对象转换为适合嵌入到搜索筛选器中的 Unicode 格式。

语法

HRESULT ADsEncodeBinaryData(
  [in]  PBYTE  pbSrcData,
  [in]  DWORD  dwSrcLen,
  [out] LPWSTR *ppszDestData
);

参数

[in] pbSrcData

类型: PBYTE

要转换的 BLOB。

[in] dwSrcLen

类型:DWORD

BLOB 的大小(以字节为单位)。

[out] ppszDestData

类型: LPWSTR*

指向以 null 结尾的 Unicode 字符串的指针,该字符串接收转换后的数据。

返回值

类型: HRESULT

此方法支持标准返回值以及以下值。

注解

在 ADSI 中,搜索筛选器必须是 Unicode 字符串。 有时,筛选器包含通常由数据不透明的 BLOB 表示的数据。 例如,你可能希望在搜索筛选器中包含对象安全标识符,该筛选器是二进制数据。 在这种情况下,必须先调用 ADsEncodeBinaryData 函数,将二进制数据转换为 Unicode 字符串格式。 当不再需要数据时,调用 FreeADsMem 函数以释放转换后的 Unicode 字符串;即 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
标头 adshlp.h
Library Activeds.lib
DLL Activeds.dll;AdsLdpc.dll

另请参阅

ADSI 错误代码

ADSI 函数

FreeADsMem