// // Wmi internal classes // class WMIEvent : __ExtrinsicEvent { }; // // Embedded class that describes a multi-path drive. // [WMI, guid("{cb9d55b2-d833-4a4c-8caa-4aee3f240e9a}")] class MPIO_DRIVE_INFO { // // Number of Paths to the real device. // [WmiDataId(1)] uint32 NumberPaths; // // The MPIODisk(N). // [WmiDataId(2), MaxLen(63)] string Name; // // The real device's serial number. // [WmiDataId(3), MaxLen(63)] string SerialNumber; // // Friendly name of the DSM controlling the device. // [WmiDataId(4), MaxLen(63)] string DsmName; }; // // Top-level view of disk topology. // [WMI, Dynamic, Provider("WmiProv"), Description("Multi-Path Device List"), Locale("MS\\0x409"), guid("{9f9765ed-c3a0-451f-86c1-470a1ddd3217}")] class MPIO_DISK_INFO { [key, read] string InstanceName; [read] boolean Active; // // The Number of mulit-path disk pdos that have been // created. // [WmiDataId(1), read, Description("Number of Multi-Path Drives.") ] uint32 NumberDrives; // // Variable-length array of DRIVE_INFO structures. // NOTE: Each entry will be ULONG aligned. App. writers // take note when iterating through the array. // [WmiDataId(2), read, Description("Multi-Path Drive Info Array."), WmiSizeIs("NumberDrives") ] MPIO_DRIVE_INFO DriveInfo[]; }; // // Path Information. // [WMI, guid("{b87c0fec-88b7-451d-a378-387ba61aeb89}")] class MPIO_ADAPTER_INFORMATION { // // Path ID. The PDO_INFORMATION class includes // it's pathId. These values can be used to find // which devices are on which path. // [WmiDataId(1)] uint64 PathId; // // Adapter Location. // [WmiDataId(2)] uint8 BusNumber; [WmiDataId(3)] uint8 DeviceNumber; [WmiDataId(4)] uint8 FunctionNumber; [WmiDataId(5)] uint8 Pad; // // Adapter Name. // [WmiDataId(6), MaxLen(63)] string AdapterName; }; [Dynamic, Provider("WmiProv"), WMI, Description("Multi-Path Path Information."), Locale("MS\\0x409"), guid("{b3a05997-2077-40a3-bf36-ebd91ff8b254}")] class MPIO_PATH_INFORMATION { [key, read] string InstanceName; [read] boolean Active; [WmiDataId(1), read, Description("Number of Paths in use") ] uint32 NumberPaths; // // Note that each of these are ULONGLONG aligned. // [WmiDataId(2), read, Description("Array of Adapter/Path Information."), WmiSizeIs("NumberPaths") ] MPIO_ADAPTER_INFORMATION PathList[]; }; [WMI, guid("{e732405b-b15e-4872-afd0-0df69dc1bb01}")] class MPIO_CONTROLLER_INFO { // // Devices behind this controller will have a matching // ControllerId in the PDO_INFORMATION class. // [WmiDataId(1)] uint64 ControllerId; [WmiDataId(2)] uint32 ControllerState; [WmiDataId(3), MaxLen(63)] string AssociatedDsm; }; [Dynamic, Provider("WmiProv"), WMI, Description("Array Controller Information."), Locale("MS\\0x409"), guid("{cf07da2c-e598-45d2-9d78-75c38b8164e8}")] class MPIO_CONTROLLER_CONFIGURATION { [key, read] string InstanceName; [read] boolean Active; [WmiDataId(1), read, Description("Number of Controllers.") ] uint32 NumberControllers; // // Note that these are ULONGLONG aligned. // [WmiDataId(2), read, Description("Array of Controller Information Structures."), WmiSizeIs("NumberControllers") ] MPIO_CONTROLLER_INFO ControllerInfo[]; }; // // Methods go here...TODO // Move LUNS // Set Path Verification period // Set Fail-Back period // // // Used to Log interesting events - F.O., F.B., Config change... // [Dynamic, Provider("WMIProv"), WMI, Description("MultiPath Event Logger"), guid("{2abb031a-71aa-46d4-a53f-eae34051e357}"), locale("MS\\0x409") ] class MPIO_EventEntry : WMIEvent { [key, read] string InstanceName; [key] boolean Active; [WmiDataId(1), read, Description("Time Stamp"), WmiTimeStamp ] uint64 TimeStamp; [WmiDataId(2), read, Values{"Fatal Error", "Error", "Warning", "Information"}, DefineValues{"MPIO_FATAL_ERROR", "MPIO_ERROR", "MPIO_WARNING", "MPIO_INFORMATION"}, ValueMap{"1", "2", "3", "4"} ] uint32 Severity; [WmiDataId(3), read, MaxLen(63), Description("Component") ] string Component; [WmiDataId(4), read, MaxLen(63), Description("Event Description") ] string EventDescription; };