속성 목록 또는 값 목록을 작성하거나 구문 분석하는 데 사용됩니다.
구문
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 |