union CLUSPROP_BUFFER_HELPER (clusapi.h)
Utilisé pour générer ou analyser une liste de propriétés ou une liste de valeurs.
Syntaxe
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;
Membres
pb
Pointeur vers une mémoire tampon contenant un tableau d’octets.
pw
Pointeur vers une mémoire tampon contenant un tableau de valeurs WORD .
pdw
Pointeur vers une mémoire tampon contenant un tableau de valeurs DWORD .
pl
Pointeur vers une mémoire tampon contenant un tableau de valeurs longues signées.
psz
Pointeur vers une mémoire tampon contenant une valeur de chaîne Unicode terminée par NULL.
pList
Pointeur vers une structure CLUSPROP_LIST décrivant le début d’une liste de propriétés.
pSyntax
Pointeur vers une structure CLUSPROP_SYNTAX décrivant le format et le type d’une valeur.
pName
Pointeur vers une structure CLUSPROP_PROPERTY_NAME contenant une valeur de nom de propriété.
pValue
Pointeur vers une structure de CLUSPROP_VALUE décrivant le format, le type et la longueur d’une valeur de données.
pBinaryValue
Pointeur vers une structure CLUSPROP_BINARY contenant une valeur de données binaires.
pWordValue
Pointeur vers une structure CLUSPROP_WORD contenant une valeur numérique.
pDwordValue
Pointeur vers une structure CLUSPROP_DWORD contenant une valeur numérique.
pLongValue
Pointeur vers une structure CLUSPROP_LONG contenant une valeur longue signée.
pULargeIntegerValue
Pointeur vers une structure CLUSPROP_ULARGE_INTEGER contenant une valeur entière non signée.
pLargeIntegerValue
Pointeur vers une structure CLUSPROP_LARGE_INTEGER contenant une grande valeur entière.
pStringValue
Pointeur vers une structure CLUSPROP_SZ contenant une valeur de chaîne Unicode terminée par NULL.
pMultiSzValue
Pointeur vers une structure CLUSPROP_MULTI_SZ contenant plusieurs valeurs de chaîne Unicode terminées par un caractère Null.
pSecurityDescriptor
Pointeur vers une structure CLUSPROP_SECURITY_DESCRIPTOR contenant un descripteur de sécurité.
pResourceClassValue
Pointeur vers une structure CLUSPROP_RESOURCE_CLASS contenant une valeur de classe de ressource.
pResourceClassInfoValue
Pointeur vers une structure CLUSPROP_RESOURCE_CLASS_INFO contenant une valeur d’informations de classe de ressource.
pDiskSignatureValue
Pointeur vers une structure CLUSPROP_DISK_SIGNATURE contenant une valeur de signature de disque.
pScsiAddressValue
Pointeur vers une structure CLUSPROP_SCSI_ADDRESS contenant une valeur d’adresse SCSI .
pDiskNumberValue
Pointeur vers une structure CLUSPROP_DISK_NUMBER contenant une valeur de numéro de disque.
pPartitionInfoValue
Pointeur vers une structure CLUSPROP_PARTITION_INFO contenant une valeur d’informations de partition.
pRequiredDependencyValue
Pointeur vers une structure de CLUSPROP_REQUIRED_DEPENDENCY contenant une valeur de dépendance de ressource.
pPartitionInfoValueEx
Pointeur vers une structure CLUSPROP_PARTITION_INFO_EX contenant une valeur d’informations de partition.
pPartitionInfoValueEx2
Pointeur vers une structure CLUSPROP_PARTITION_INFO_EX2 qui contient une valeur d’informations de partition.
Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2 et Windows Server 2008 : Ce membre n’est pas disponible avant Windows Server 2016.
pFileTimeValue
Pointeur vers une structure de CLUSPROP_FILETIME contenant une valeur de date/heure.
Notes
La structure CLUSPROP_BUFFER_HELPER est utile dans l’utilisation de listes de propriétés et de valeurs. Les applications peuvent utiliser un pointeur de CLUSPROP_BUFFER_HELPER générique pour avancer par décalages dans les entrées d’une liste de propriétés ou d’une liste de valeurs, en récupérant ou en définissant des valeurs sans avoir à effectuer un cast vers le type de données approprié.
Une autre structure, RESUTIL_PROPERTY_ITEM, peut également être utilisée pour travailler avec plusieurs propriétés.
Soyez prudent lorsque vous référencez des valeurs entières volumineuses dans des structures alignées sur DWORD, telles que des listes de valeurs, des listes de propriétés et des blocs de paramètres. Pour Windows Server pour les systèmes Itanium, une valeur entière importante alignée naturellement commence toujours sur une adresse se terminant par 0 ou 8h. L’alignement DWORD peut entraîner le début de valeurs volumineuses sur des limites non alignées (adresses se terminant par 4h ou C), ce qui provoque une erreur d’alignement lorsque les données sont lues ou écrites. Vous pouvez éviter les erreurs d’alignement en gérant séparément les parties haute et basse des valeurs importantes ou en utilisant des variables locales, qui sont garanties d’être alignées naturellement.
Exemples
En plus de l’exemple suivant, consultez Création de listes de propriétés, Analyse de listes de propriétés, Création de listes de valeurs et Analyse d’une liste de valeurs.
//////////////////////////////////////////////////////////////////////
//
// 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 );
}
Configuration requise
Client minimal pris en charge | Aucun pris en charge |
Serveur minimal pris en charge | Windows Server 2008 Entreprise, Windows Server 2008 Datacenter |
En-tête | clusapi.h |