Partager via


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

Voir aussi

CLUSPROP_BINARY

CLUSPROP_DISK_NUMBER

CLUSPROP_DISK_SIGNATURE

CLUSPROP_DWORD

CLUSPROP_LIST

CLUSPROP_MULTI_SZ

CLUSPROP_PARTITION_INFO

CLUSPROP_PROPERTY_NAME

CLUSPROP_REQUIRED_DEPENDENCY

CLUSPROP_RESOURCE_CLASS

CLUSPROP_RESOURCE_CLASS_INFO

CLUSPROP_SCSI_ADDRESS

CLUSPROP_SYNTAX

CLUSPROP_SZ

CLUSPROP_ULARGE_INTEGER

CLUSPROP_VALUE