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 |