次の方法で共有


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