Übersicht über Hyper-V-Erweiterbare Switch-Richtlinien

Die Hyper-V-Plattform und die erweiterbare Switchschnittstelle bieten eine Infrastruktur zum Verwalten von Switch- und Portrichtlinien für einen erweiterbaren Switch. Diese Richtlinien werden über PowerShell-Cmdlets und WMI-basierte Anwendungsprogramme verwaltet. Diese Infrastruktur bietet auch Unterstützung für die Speicherung und Migration von Richtlinien.

Unabhängige Softwareanbieter (Independent Software Vendors, ISVs) können diese Infrastruktur verwenden, um ihre eigenen benutzerdefinierten Richtlinien zu registrieren. Nach der Registrierung können diese Richtlinien über die integrierten Hyper-V-Richtlinienschnittstellen ermittelt und verwaltet werden. Die Eigenschaften von Richtlinien können entweder auf Portebene oder auf Switchebene konfiguriert werden.

Zusätzlich zu benutzerdefinierten Richtlinieneigenschaften stellt die erweiterbare Hyper-V-Switchschnittstelle die Infrastruktur bereit, um status Informationen für benutzerdefinierte Richtlinieneigenschaften auf Port- oder Switchbasis abzurufen. Diese status Informationen werden als Feature-status-Informationen bezeichnet.

Benutzerdefinierte Richtliniendaten für erweiterbare Switches werden mithilfe von MOF-Klassendefinitionen (Managed Object Format) bei der WMI-Verwaltungsebene registriert. Im Folgenden sehen Sie ein Beispiel für eine MOF-Klasse für eine benutzerdefinierte Portrichtlinieneigenschaft.

#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[] = {};

};

Die WMI-Verwaltungsschicht serialisiert die MOF-Daten, wenn sie an eine zugrunde liegende erweiterbare Switcherweiterung übertragen werden. Die MOF-Klasse wird in eine entsprechende C-Struktur serialisiert, die von der erweiterbaren Hyper-V-Switcherweiterung verarbeitet werden kann. Im Folgenden sehen Sie ein Beispiel für die C-Struktur, die für die MOF-Klasse aus dem vorherigen Beispiel serialisiert wurde.

#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;

In diesem Beispiel werden die folgenden Punkte hervorgehoben, die auftreten, wenn eine MOF-Klasse in eine entsprechende C-Struktur für eine erweiterbare Switchrichtlinieneigenschaft serialisiert wird:

  • Die Versionsdefinition in MOF-Dateien wird in einen USHORT-Wert konvertiert, wobei die hochgeordneten Bits die Hauptversion und die Bits mit niedriger Reihenfolge die Nebenversion enthalten. Die Version wird mithilfe des folgenden Codes serialisiert:

    (((MajorVersion) << 8) + (MinorVersion))

    Beispielsweise würde Version("1") oben in einen Wert von 0x0100 bis (((1) << 8) + (0))serialisiert werden. Version ("1.1") wird in einen Wert von 0x0101 bis (((1) << 8) + (1))serialisiert.

    Wenn eine benutzerdefinierte Richtlinieneigenschaft für eine zugrunde liegende Erweiterung ausgegeben wird, enthält das PropertyVersion-Element der Strukturen, die Richtlinieneigenschaften definieren, den serialisierten Versionswert.

    Wenn die erweiterbare Switchschnittstelle beispielsweise eine Objektbezeichneranforderung (Object Identifier, OID) von OID_SWITCH_PORT_PROPERTY_ADD ausgibt, wird die OID einer NDIS_SWITCH_PORT_PROPERTY_PARAMETERS Struktur zugeordnet. Das PropertyVersion-Element dieser Struktur enthält den serialisierten Versionswert.

  • Alle Zeichenfolgen mit variabler Länge werden in Offsets innerhalb des Puffers serialisiert, der die serialisierte C-Struktur enthält. Jede Zeichenfolge mit variabler Länge ist als VARIABLE_LENGTH_STRING Struktur innerhalb dieses Pufferoffsets formatiert.