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
符号付き long 値を含む 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 にアラインされた構造体で大きな整数値を参照する場合は注意が必要です。 Windows Server for Itanium ベースのシステムの場合、自然に整列された大きな整数値は、常に 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 |
Header | clusapi.h |