Función ADsEncodeBinaryData (adshlp.h)
La función ADsEncodeBinaryData convierte un objeto binario grande (BLOB) en el formato Unicode adecuado para insertarse en un filtro de búsqueda.
Sintaxis
HRESULT ADsEncodeBinaryData(
[in] PBYTE pbSrcData,
[in] DWORD dwSrcLen,
[out] LPWSTR *ppszDestData
);
Parámetros
[in] pbSrcData
Tipo: PBYTE
BLOB que se va a convertir.
[in] dwSrcLen
Tipo: DWORD
Tamaño, en bytes, del BLOB.
[out] ppszDestData
Tipo: LPWSTR*
Puntero a una cadena Unicode terminada en null que recibe los datos convertidos.
Valor devuelto
Tipo: HRESULT
Este método admite los valores devueltos estándar, así como los siguientes.
Comentarios
En ADSI, los filtros de búsqueda deben ser cadenas Unicode. A veces, un filtro contiene datos que normalmente se representan mediante un BLOB opaco de datos. Por ejemplo, puede incluir un identificador de seguridad de objeto en un filtro de búsqueda, que es de datos binarios. En este caso, primero debe llamar a la función ADsEncodeBinaryData para convertir los datos binarios al formato de cadena Unicode. Cuando los datos ya no sean necesarios, llame a la función FreeADsMem para liberar la cadena Unicode convertida; es decir, ppszDestData.
La función ADsEncodeBinaryData no codifica los valores de bytes que representan caracteres alfanuméricos. En su lugar, colocará el carácter en la cadena sin codificarlo. Esto da como resultado la cadena que contiene una combinación de caracteres codificados y sin codificar. Por ejemplo, si los datos binarios están 0x05|0x1A|0x1B|0x43|0x32, la cadena codificada contendrá "\05\1A\1BC2". Esto no tiene ningún efecto en el filtro y los filtros de búsqueda funcionarán correctamente con estos tipos de cadenas.
Ejemplos
En el ejemplo de código siguiente se muestra cómo usar esta función.
// 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 );
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista |
Servidor mínimo compatible | Windows Server 2008 |
Plataforma de destino | Windows |
Encabezado | adshlp.h |
Library | Activeds.lib |
Archivo DLL | Activeds.dll; AdsLdpc.dll |