共用方式為


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終止的 Unicode 字串值。

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

包含Null終止 Unicode 字串值的CLUSPROP_SZ結構的指標。

pMultiSzValue

包含多個 Null 終止 Unicode 字串值的 CLUSPROP_MULTI_SZ 結構的指標。

pSecurityDescriptor

包含安全性描述元 之CLUSPROP_SECURITY_DESCRIPTOR 結構的指標。

pResourceClassValue

包含資源類別值的 CLUSPROP_RESOURCE_CLASS 結構的指標。

pResourceClassInfoValue

包含資源類別資訊值的 CLUSPROP_RESOURCE_CLASS_INFO 結構的指標。

pDiskSignatureValue

包含磁片簽章值的 CLUSPROP_DISK_SIGNATURE 結構的指標。

pScsiAddressValue

包含SCSI位址值的CLUSPROP_SCSI_ADDRESS結構的指標。

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對齊結構中的大型整數值時,請小心,例如值清單、屬性清單和 參數區塊。 針對以 Itanium 為基礎的 Windows Server 系統,自然對齊的大型整數值一律會以 0 或 8h 結尾的位址開始。 DWORD 對齊可能會導致大值在未對齊的界限上開始, (位址結尾為 4h 或 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 Enterprise、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