Общие сведения о политиках расширяемого коммутатора Hyper-V
Платформа Hyper-V и расширяемый интерфейс коммутатора предоставляют инфраструктуру для управления политиками коммутаторов и портов для расширяемого коммутатора. Эти политики управляются с помощью командлетов PowerShell и программ приложений на основе инструментария WMI. Эта инфраструктура также обеспечивает поддержку хранения и миграции политик.
Независимые поставщики программного обеспечения (ISV) могут использовать эту инфраструктуру для регистрации собственных пользовательских политик. После регистрации эти политики можно обнаруживать и управлять ими с помощью встроенных интерфейсов политик Hyper-V. Свойства политик можно настроить как на уровне порта, так и на уровне коммутатора.
Помимо настраиваемых свойств политики, интерфейс расширяемого коммутатора Hyper-V предоставляет инфраструктуру для получения сведений о состоянии настраиваемых свойств политики для каждого порта или каждого коммутатора. Эти сведения о состоянии называются сведениями о состоянии компонентов .
Данные настраиваемой политики расширяемого коммутатора регистрируются на уровне управления WMI с помощью определений классов формата управляемых объектов (MOF). Ниже показан пример класса MOF для настраиваемого свойства политики портов.
#pragma namespace("\\\\.\\root\\virtualization\\v2")
[ Dynamic,
UUID("F2F73F23-2B8E-457a-96C4-F541201C9150"),
ExtensionId("5CBF81BE-5055-47CD-9055-A76B2B4E369E"),
Provider("VmmsWmiInstanceAndMethodProvider"),
Locale(0x409),
InterfaceVersion("1"),
InterfaceRevision("0"),
DisplayName("VendorName Port Settings Friendly Name") : Amended,
Description("VendorName Port Settings detailed description.") : Amended]
class Vendor_SampleFeatureSettingData: Msvm_EthernetSwitchPortFeatureSettingDataMsvm
{
[WmiDataId(1),
InterfaceVersion("1"),
InterfaceRevision("0")]
uint8 IntValue8 = 0;
[WmiDataId(2),
InterfaceVersion("1"),
InterfaceRevision("0")]
uint16 IntValue16 = 0;
[WmiDataId(3),
InterfaceVersion("1"),
InterfaceRevision("0")]
uint32 IntValue32 = 0;
[WmiDataId(4),
InterfaceVersion("1"),
InterfaceRevision("0")]
uint64 IntValue64 = 0;
[WmiDataId(5),
InterfaceVersion("1"),
InterfaceRevision("0"),
MaxLen(255)]
string FixedLengthString = "";
[WmiDataId(6),
InterfaceVersion("1"),
InterfaceRevision("0")]
string VariableLengthString = "";
[WmiDataId(7),
InterfaceVersion("1"),
InterfaceRevision("0"),
Max(8)]
uint32 FixedLengthArray[] = {};
[WmiDataId(8),
InterfaceVersion("1"),
InterfaceRevision("0")]
uint32 VariableLengthArray[] = {};
};
Уровень управления WMI сериализует данные MOF при их передаче в базовое расширение расширяемого коммутатора. Класс MOF сериализуется в соответствующую структуру C, которую можно обработать расширением расширяемого коммутатора Hyper-V. Ниже показан пример структуры C, которая была сериализована для класса MOF из предыдущего примера.
#pragma pack(8)
typedef struct _VARIABLE_LENGTH_ARRAY
{
UINT32 Buffer[1];
} VARIABLE_LENGTH_ARRAY;
typedef struct _SAMPLE_FEATURE_SETTINGS
{
UINT8 IntValue8;
UINT32 IntValue16;
UINT32 IntValue32;
UINT64 IntValue64;
UINT16 FixedLengthStringByteCount;
WCHAR FixedLengthString[256];
UINT32 VariableLengthStringOffset; // offset to VARIABLE_LENGTH_STRING structure
UINT32 FixedLengthArrayElementCount;
UINT32 FixedLengthArray[8];
UINT32 VariableLengthArrayElementCount;
UINT32 VariableLengthArrayOffset; // offset to VARIABLE_LENGTH_ARRAY
} SAMPLE_FEATURE_SETTINGS;
typedef struct _VARIABLE_LENGTH_STRING
{
USHORT StringLength;
WCHAR StringBuffer[1];
} VARIABLE_LENGTH_STRING;
В этом примере выделяются следующие моменты, возникающие при сериализации класса MOF в соответствующую структуру C для свойства политики расширяемого коммутатора:
Определение версии в MOF-файлах преобразуется в значение USHORT, где биты высокого порядка содержат основную версию, а биты нижнего порядка содержат дополнительную версию. Версия сериализуется с помощью следующего кода:
(((MajorVersion) << 8) + (MinorVersion))
Например, версия("1") выше будет сериализована со значением 0x0100 через
(((1) << 8) + (0))
. Версия ("1.1") будет сериализована со значением 0x0101 через(((1) << 8) + (1))
.При выдаче настраиваемого свойства политики базовому расширению элемент PropertyVersion структур, определяющих свойства политики, содержит значение сериализованной версии.
Например, когда интерфейс расширяемого коммутатора отправляет запрос идентификатора объекта (OID) OID_SWITCH_PORT_PROPERTY_ADD, OID связывается со структурой NDIS_SWITCH_PORT_PROPERTY_PARAMETERS . Элемент PropertyVersion этой структуры содержит значение сериализованной версии.
Все строки переменной длины сериализуются в смещения в буфере, который содержит сериализованную структуру C. Каждая строка переменной длины форматируется как VARIABLE_LENGTH_STRING структура в пределах этого смещения буфера.