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 |