Поделиться через


CLUSPROP_BUFFER_HELPER union (clusapi.h)

Используется для создания или анализа списка свойств или списка значений.

Синтаксис

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;

Члены

pb

Указатель на буфер, содержащий массив байтов.

pw

Указатель на буфер, содержащий массив значений WORD .

pdw

Указатель на буфер, содержащий массив значений DWORD .

pl

Указатель на буфер, содержащий массив подписанных длинных значений.

psz

Указатель на буфер, содержащий строковое значение Юникода, завершающееся null.

pList

Указатель на CLUSPROP_LIST структуру, описывающую начало списка свойств.

pSyntax

Указатель на структуру CLUSPROP_SYNTAX , описывающую формат и тип значения.

pName

Указатель на структуру CLUSPROP_PROPERTY_NAME , содержащую значение имени свойства.

pValue

Указатель на CLUSPROP_VALUE структуру, описывающую формат, тип и длину значения данных.

pBinaryValue

Указатель на структуру CLUSPROP_BINARY , содержащую двоичное значение данных.

pWordValue

Указатель на CLUSPROP_WORD структуру, содержащую числовое значение.

pDwordValue

Указатель на CLUSPROP_DWORD структуру, содержащую числовое значение.

pLongValue

Указатель на структуру CLUSPROP_LONG , содержащую длинное значение со знаком.

pULargeIntegerValue

Указатель на структуру CLUSPROP_ULARGE_INTEGER , содержащую большое целочисленное значение без знака.

pLargeIntegerValue

Указатель на структуру CLUSPROP_LARGE_INTEGER , содержащую большое целочисленное значение.

pStringValue

Указатель на структуру CLUSPROP_SZ , содержащую строковое значение Юникода, завершающееся null.

pMultiSzValue

Указатель на структуру CLUSPROP_MULTI_SZ , содержащую несколько строковых значений Юникода, завершаемых null.

pSecurityDescriptor

Указатель на структуру CLUSPROP_SECURITY_DESCRIPTOR , содержащую дескриптор безопасности.

pResourceClassValue

Указатель на структуру CLUSPROP_RESOURCE_CLASS , содержащую значение класса ресурсов.

pResourceClassInfoValue

Указатель на структуру CLUSPROP_RESOURCE_CLASS_INFO , содержащую значение сведений о классе ресурса.

pDiskSignatureValue

Указатель на структуру CLUSPROP_DISK_SIGNATURE , содержащую значение сигнатуры диска.

pScsiAddressValue

Указатель на структуру CLUSPROP_SCSI_ADDRESS , содержащую значение адреса SCSI .

pDiskNumberValue

Указатель на CLUSPROP_DISK_NUMBER структуру, содержащую значение номера диска.

pPartitionInfoValue

Указатель на структуру CLUSPROP_PARTITION_INFO , содержащую значение сведений о секции.

pRequiredDependencyValue

Указатель на структуру CLUSPROP_REQUIRED_DEPENDENCY , содержащую значение зависимости ресурса.

pPartitionInfoValueEx

Указатель на структуру CLUSPROP_PARTITION_INFO_EX , содержащую значение сведений о секции.

pPartitionInfoValueEx2

Указатель на структуру CLUSPROP_PARTITION_INFO_EX2 , содержащую значение сведений о секции.

Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2 и Windows Server 2008: Этот элемент недоступен до Windows Server 2016.

pFileTimeValue

Указатель на структуру CLUSPROP_FILETIME , содержащую значение даты и времени.

Комментарии

Структура CLUSPROP_BUFFER_HELPER полезна при работе со списками свойств и значений. Приложения могут использовать универсальный указатель CLUSPROP_BUFFER_HELPER для перемещения по смещению по записям списка свойств или списка значений, получения или задания значений без приведения к соответствующему типу данных.

Альтернативная структура , RESUTIL_PROPERTY_ITEM, также может использоваться для работы с несколькими свойствами.

Будьте внимательны при ссылке на большие целочисленные значения в структурах, выровненных по DWORD, таких как списки значений, списки свойств и блоки параметров. Для windows Server для систем на основе Itanium выровненное по естественным причинам большое целочисленное значение всегда начинается с адреса, заканчивающегося на 0 или 8 ч. Выравнивание DWORD может привести к тому, что большие значения начинаются на несровненных границах (адреса, заканчивающиеся на 4 ч или C), что приведет к сбою выравнивания при чтении или записи данных. Вы можете избежать ошибок выравнивания, обрабатывая высокие и низкие части больших значений по отдельности или используя локальные переменные, которые гарантированно будут выровнены естественным образом.

Примеры

В дополнение к следующему примеру см. статьи Создание списков свойств, Анализ списков свойств, Создание списков значений и Синтаксический анализ списка значений.

//////////////////////////////////////////////////////////////////////
//  
//    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 );
}

Требования

   
Минимальная версия клиента Ни одна версия не поддерживается
Минимальная версия сервера Windows Server 2008 Корпоративная, Windows Server 2008 Datacenter
Верхняя часть clusapi.h

См. также раздел

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