Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Платформа 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 со смещением в буфере.