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 |