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 或 8 小时结束的地址开始。 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 企业版、Windows Server 2008 Datacenter |
标头 | clusapi.h |