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.
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
Указатель на структуру CLUSPROP_SZ , содержащую строковое значение Юникода, завершающееся null.
pMultiSzValue
Указатель на структуру CLUSPROP_MULTI_SZ , содержащую несколько строковых значений Юникода, завершаемых null.
pSecurityDescriptor
Указатель на структуру CLUSPROP_SECURITY_DESCRIPTOR , содержащую дескриптор безопасности.
pResourceClassValue
Указатель на структуру CLUSPROP_RESOURCE_CLASS , содержащую значение класса ресурсов.
pResourceClassInfoValue
Указатель на структуру CLUSPROP_RESOURCE_CLASS_INFO , содержащую значение сведений о классе ресурса.
pDiskSignatureValue
Указатель на структуру CLUSPROP_DISK_SIGNATURE , содержащую значение сигнатуры диска.
pScsiAddressValue
Указатель на структуру CLUSPROP_SCSI_ADDRESS , содержащую значение адреса SCSI .
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 для систем на основе Itanium выровненное по естественным причинам большое целочисленное значение всегда начинается с адреса, заканчивающегося на 0 или 8 ч. Выравнивание DWORD может привести к тому, что большие значения начинаются на несровненных границах (адреса, заканчивающиеся на 4 ч или 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 |