CLUSPROP_BUFFER_HELPER unión (clusapi.h)
Se usa para compilar o analizar una lista de propiedades o una lista de valores.
Sintaxis
typedef union CLUSPROP_BUFFER_HELPER {
BYTE *pb;
WORD *pw;
DWORD *pdw;
LONG *pl;
LPWSTR psz;
PCLUSPROP_LIST pList;
PCLUSPROP_SYNTAX pSyntax;
PCLUSPROP_PROPERTY_NAME pName;
PCLUSPROP_VALUE pValue;
PCLUSPROP_BINARY pBinaryValue;
PCLUSPROP_WORD pWordValue;
PCLUSPROP_DWORD pDwordValue;
PCLUSPROP_LONG pLongValue;
PCLUSPROP_ULARGE_INTEGER pULargeIntegerValue;
PCLUSPROP_LARGE_INTEGER pLargeIntegerValue;
PCLUSPROP_SZ pStringValue;
PCLUSPROP_MULTI_SZ pMultiSzValue;
PCLUSPROP_SECURITY_DESCRIPTOR pSecurityDescriptor;
PCLUSPROP_RESOURCE_CLASS pResourceClassValue;
PCLUSPROP_RESOURCE_CLASS_INFO pResourceClassInfoValue;
PCLUSPROP_DISK_SIGNATURE pDiskSignatureValue;
PCLUSPROP_SCSI_ADDRESS pScsiAddressValue;
PCLUSPROP_DISK_NUMBER pDiskNumberValue;
PCLUSPROP_PARTITION_INFO pPartitionInfoValue;
PCLUSPROP_REQUIRED_DEPENDENCY pRequiredDependencyValue;
PCLUSPROP_PARTITION_INFO_EX pPartitionInfoValueEx;
PCLUSPROP_PARTITION_INFO_EX2 pPartitionInfoValueEx2;
PCLUSPROP_FILETIME pFileTimeValue;
} CLUSPROP_BUFFER_HELPER, *PCLUSPROP_BUFFER_HELPER;
Miembros
pb
Puntero a un búfer que contiene una matriz de bytes.
pw
Puntero a un búfer que contiene una matriz de valores de WORD .
pdw
Puntero a un búfer que contiene una matriz de valores DWORD .
pl
Puntero a un búfer que contiene una matriz de valores largos firmados.
psz
Puntero a un búfer que contiene un valor de cadena Unicode terminado en NULL.
pList
Puntero a una estructura CLUSPROP_LIST que describe el principio de una lista de propiedades.
pSyntax
Puntero a una estructura de CLUSPROP_SYNTAX que describe el formato y el tipo de un valor.
pName
Puntero a una estructura CLUSPROP_PROPERTY_NAME que contiene un valor de nombre de propiedad.
pValue
Puntero a una estructura de CLUSPROP_VALUE que describe el formato, el tipo y la longitud de un valor de datos.
pBinaryValue
Puntero a una estructura de CLUSPROP_BINARY que contiene un valor de datos binarios.
pWordValue
Puntero a una estructura CLUSPROP_WORD que contiene un valor numérico.
pDwordValue
Puntero a una estructura de CLUSPROP_DWORD que contiene un valor numérico.
pLongValue
Puntero a una estructura de CLUSPROP_LONG que contiene un valor largo con signo.
pULargeIntegerValue
Puntero a una estructura de CLUSPROP_ULARGE_INTEGER que contiene un valor entero grande sin signo.
pLargeIntegerValue
Puntero a una estructura CLUSPROP_LARGE_INTEGER que contiene un valor entero grande.
pStringValue
Puntero a una estructura CLUSPROP_SZ que contiene un valor de cadena Unicode terminado en NULL.
pMultiSzValue
Puntero a una estructura de CLUSPROP_MULTI_SZ que contiene varios valores de cadena Unicode terminados en null.
pSecurityDescriptor
Puntero a una estructura de CLUSPROP_SECURITY_DESCRIPTOR que contiene un descriptor de seguridad.
pResourceClassValue
Puntero a una estructura CLUSPROP_RESOURCE_CLASS que contiene un valor de clase de recurso.
pResourceClassInfoValue
Puntero a una estructura CLUSPROP_RESOURCE_CLASS_INFO que contiene un valor de información de clase de recurso.
pDiskSignatureValue
Puntero a una estructura de CLUSPROP_DISK_SIGNATURE que contiene un valor de firma de disco.
pScsiAddressValue
Puntero a una estructura de CLUSPROP_SCSI_ADDRESS que contiene un valor de dirección SCSI .
pDiskNumberValue
Puntero a una estructura de CLUSPROP_DISK_NUMBER que contiene un valor de número de disco.
pPartitionInfoValue
Puntero a una estructura de CLUSPROP_PARTITION_INFO que contiene un valor de información de partición.
pRequiredDependencyValue
Puntero a una estructura de CLUSPROP_REQUIRED_DEPENDENCY que contiene un valor de dependencia de recursos.
pPartitionInfoValueEx
Puntero a una estructura de CLUSPROP_PARTITION_INFO_EX que contiene un valor de información de partición.
pPartitionInfoValueEx2
Puntero a una estructura CLUSPROP_PARTITION_INFO_EX2 que contiene un valor de información de partición.
Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2 y Windows Server 2008: Este miembro no está disponible antes de Windows Server 2016.
pFileTimeValue
Puntero a una estructura de CLUSPROP_FILETIME que contiene un valor de fecha y hora.
Comentarios
La estructura de CLUSPROP_BUFFER_HELPER es útil para trabajar con listas de propiedades y valores. Las aplicaciones pueden usar un puntero de CLUSPROP_BUFFER_HELPER genérico para avanzar por desplazamientos a través de las entradas de una lista de propiedades o una lista de valores, recuperando o estableciendo valores sin tener que convertir al tipo de datos adecuado.
También se puede usar una estructura alternativa, RESUTIL_PROPERTY_ITEM, para trabajar con varias propiedades.
Tenga cuidado al hacer referencia a valores enteros grandes en estructuras alineadas con DWORD, como listas de valores, listas de propiedades y bloques de parámetros. Para los sistemas basados en Itanium de Windows Server, un valor entero grande alineado de forma natural siempre comienza en una dirección que termina en 0 o 8h. La alineación DWORD puede provocar que los valores grandes comiencen por límites no alineados (direcciones que terminan en 4h o C), lo que provocará un error de alineación cuando se lean o escriban los datos. Puede evitar errores de alineación controlando las partes altas y bajas de valores grandes por separado, o mediante variables locales, que se garantiza que estén alineadas de forma natural.
Ejemplos
Además del ejemplo siguiente, vea Creating Property Lists, Parsing Property Lists, Creating Value Lists y Parsing a Value List.
//////////////////////////////////////////////////////////////////////
//
// HOW TO USE CLUSPROP_BUFFER HELPER
//
// (1) Position cbh to the next read or write location.
// (2) Read or write data using an appropriate pointer.
// (3) Check position within buffer.
//
// Repeat (1)(2)(3)
//
//////////////////////////////////////////////////////////////////////
void ClusDocEx_UsingCBH()
{
LPVOID lp = LocalAlloc( LPTR, 100 ); // It is important for cbh
// to know the allocated
// size.
CLUSPROP_BUFFER_HELPER cbh;
// ( 1 )
//
// Position cbh. The pb member is convenient for
// targeting single bytes.
//
cbh.pb = (LPBYTE) lp;
//
// The pb member points to the first byte of lp.
//
// lp -----> 0 0 0 0 0 0 0 0 0 0 0 ... 0
//
// cbh.pb-->|-|
//
//
// Note what happens when different cbh pointer types are used:
//
// lp -----> 0 0 0 0 0 0 0 0 0 0 0 0 ... 0
//
// cbh.pdw -->|-------|
// cbh.psz -->|-|
// cbh.pValue -->|---------------|
// cbh.pValue->Syntax.dw-->|-------|
// cbh.pValue->cbLength -->|-------|
//
//
// The configuration of bytes that will be affected by a read
// or write operation depends on the type of pointer used.
//
// ( 2 )
//
// Read or write data to the present location. Note how the
// structure pointers let you "reach over" intervening members.
//
cbh.pValue->Syntax.dw = CLUSPROP_SYNTAX_LIST_VALUE_DWORD;
cbh.pValue->cbLength = sizeof( DWORD );
cbh.pDwordValue->dw = 0x0000EEEEL;
//
// Result: lp ----->| syntax | length | value | 0 0 0 0 ... 0
//
// ( 3 )
//
// Check your remaining space. Be sure you have room to advance
// cbh past the current data and perform a read operation on the
// next value.
//
DWORD cbPosition = cbh.pb - (LPBYTE) lp;
DWORD cbAdvance = ClusDocEx_ListEntrySize( sizeof( DWORD ) ); // See "ClusDocEx.h"
if( ( cbPosition + cbAdvance + sizeof( DWORD ) ) > 100 )
{
// handle the fact that there's more data than the reported size of the buffer
}
//
// Repeat ( 1 ), ( 2 ), and ( 3 ) for the next value:
//
// Position cbh
cbh.pb += cbAdvance;
// Write next entry
cbh.pStringValue->Syntax.dw = CLUSPROP_SYNTAX_LIST_VALUE_SZ;
cbh.pStringValue->cbLength = ( lstrlenW( L"String Value" ) + 1 ) * sizeof( WCHAR );
StringCchCopyW( cbh.pStringValue->sz, cbh.pStringValue->cbLength, L"String Value" );
// Check space
cbPosition = cbh.pb - (LPBYTE) lp;
cbAdvance = ClusDocEx_ListEntrySize( cbh.pStringValue->cbLength );
if( ( cbPosition + cbAdvance + sizeof( DWORD ) ) > 100 )
{
//
}
//
// Repeat ( 1 ), ( 2 ), and ( 3 ) until all values have been written or read.
//
cbh.pb = NULL;
LocalFree( lp );
}
Requisitos
Cliente mínimo compatible | No se admite ninguno |
Servidor mínimo compatible | Windows Server 2008 Enterprise, Windows Server 2008 Datacenter |
Encabezado | clusapi.h |