CLUSPROP_BUFFER_HELPER 공용 구조체(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

서명된 long 값의 배열을 포함하는 버퍼에 대한 포인터입니다.

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

서명된 long 값이 포함된 CLUSPROP_LONG 구조체에 대한 포인터입니다.

pULargeIntegerValue

부호 없는 정수 값이 포함된 CLUSPROP_ULARGE_INTEGER 구조체에 대한 포인터입니다.

pLargeIntegerValue

큰 정수 값을 포함하는 CLUSPROP_LARGE_INTEGER 구조체에 대한 포인터입니다.

pStringValue

NULL로 끝나는 유니코드 문자열 값을 포함하는 CLUSPROP_SZ 구조체에 대한 포인터입니다.

pMultiSzValue

여러 null로 끝나는 유니코드 문자열 값이 포함된 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