1 /* 2 * hyperv_wmi_classes.h: WMI classes for managing Microsoft Hyper-V hosts 3 * 4 * Copyright (C) 2017 Datto Inc 5 * Copyright (C) 2011 Matthias Bolte <matthias.bolte@googlemail.com> 6 * Copyright (C) 2009 Michael Sievers <msievers83@googlemail.com> 7 * 8 * This library is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Lesser General Public 10 * License as published by the Free Software Foundation; either 11 * version 2.1 of the License, or (at your option) any later version. 12 * 13 * This library is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * Lesser General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public 19 * License along with this library. If not, see 20 * <http://www.gnu.org/licenses/>. 21 * 22 */ 23 24 #pragma once 25 26 #include <wsman-api.h> 27 28 #include "internal.h" 29 30 #include "hyperv_wmi_classes.generated.typedef" 31 32 #define ROOT_CIMV2 \ 33 "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/*" 34 35 #define ROOT_VIRTUALIZATION_V2 \ 36 "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/virtualization/v2/*" 37 38 39 40 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 41 * Msvm_ComputerSystem 42 */ 43 44 #define MSVM_COMPUTERSYSTEM_WQL_VIRTUAL \ 45 "Name != __SERVER " 46 47 #define MSVM_COMPUTERSYSTEM_WQL_PHYSICAL \ 48 "Name = __SERVER " 49 50 #define MSVM_COMPUTERSYSTEM_WQL_ACTIVE \ 51 "(EnabledState != 0 and EnabledState != 3 and EnabledState != 32769) " 52 53 #define MSVM_COMPUTERSYSTEM_WQL_INACTIVE \ 54 "(EnabledState = 0 or EnabledState = 3 or EnabledState = 32769) " 55 56 enum _Msvm_ComputerSystem_EnabledState { 57 MSVM_COMPUTERSYSTEM_ENABLEDSTATE_UNKNOWN = 0, /* inactive */ 58 MSVM_COMPUTERSYSTEM_ENABLEDSTATE_ENABLED = 2, /* active */ 59 MSVM_COMPUTERSYSTEM_ENABLEDSTATE_DISABLED = 3, /* inactive */ 60 MSVM_COMPUTERSYSTEM_ENABLEDSTATE_PAUSED = 32768, /* active */ 61 MSVM_COMPUTERSYSTEM_ENABLEDSTATE_SUSPENDED = 32769, /* inactive */ 62 MSVM_COMPUTERSYSTEM_ENABLEDSTATE_STARTING = 32770, /* active */ 63 MSVM_COMPUTERSYSTEM_ENABLEDSTATE_SNAPSHOTTING = 32771, /* active */ 64 MSVM_COMPUTERSYSTEM_ENABLEDSTATE_SAVING = 32773, /* active */ 65 MSVM_COMPUTERSYSTEM_ENABLEDSTATE_STOPPING = 32774, /* active */ 66 MSVM_COMPUTERSYSTEM_ENABLEDSTATE_PAUSING = 32776, /* active */ 67 MSVM_COMPUTERSYSTEM_ENABLEDSTATE_RESUMING = 32777 /* active */ 68 }; 69 70 enum _Msvm_ComputerSystem_RequestedState { 71 MSVM_COMPUTERSYSTEM_REQUESTEDSTATE_ENABLED = 2, 72 MSVM_COMPUTERSYSTEM_REQUESTEDSTATE_DISABLED = 3, 73 MSVM_COMPUTERSYSTEM_REQUESTEDSTATE_OFFLINE = 6, 74 MSVM_COMPUTERSYSTEM_REQUESTEDSTATE_QUIESCE = 9, 75 MSVM_COMPUTERSYSTEM_REQUESTEDSTATE_REBOOT = 10, 76 MSVM_COMPUTERSYSTEM_REQUESTEDSTATE_RESET = 11, 77 MSVM_COMPUTERSYSTEM_REQUESTEDSTATE_PAUSED = 32768, 78 MSVM_COMPUTERSYSTEM_REQUESTEDSTATE_SUSPENDED = 32769, 79 }; 80 81 82 83 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 84 * Msvm_ConcreteJob 85 */ 86 87 enum _Msvm_ConcreteJob_JobState { 88 MSVM_CONCRETEJOB_JOBSTATE_NEW = 2, 89 MSVM_CONCRETEJOB_JOBSTATE_STARTING = 3, 90 MSVM_CONCRETEJOB_JOBSTATE_RUNNING = 4, 91 MSVM_CONCRETEJOB_JOBSTATE_SUSPENDED = 5, 92 MSVM_CONCRETEJOB_JOBSTATE_SHUTTING_DOWN = 6, 93 MSVM_CONCRETEJOB_JOBSTATE_COMPLETED = 7, 94 MSVM_CONCRETEJOB_JOBSTATE_TERMINATED = 8, 95 MSVM_CONCRETEJOB_JOBSTATE_KILLED = 9, 96 MSVM_CONCRETEJOB_JOBSTATE_EXCEPTION = 10, 97 MSVM_CONCRETEJOB_JOBSTATE_SERVICE = 11, 98 }; 99 100 101 102 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 103 * Msvm_ResourceAllocationSettingData 104 */ 105 106 /* https://docs.microsoft.com/en-us/windows/win32/hyperv_v2/msvm-resourceallocationsettingdata */ 107 enum _Msvm_ResourceAllocationSettingData_ResourceType { 108 MSVM_RASD_RESOURCETYPE_OTHER = 1, 109 MSVM_RASD_RESOURCETYPE_IDE_CONTROLLER = 5, 110 MSVM_RASD_RESOURCETYPE_PARALLEL_SCSI_HBA = 6, 111 MSVM_RASD_RESOURCETYPE_ETHERNET_ADAPTER = 10, 112 MSVM_RASD_RESOURCETYPE_DISKETTE_DRIVE = 14, 113 MSVM_RASD_RESOURCETYPE_CD_DRIVE = 15, 114 MSVM_RASD_RESOURCETYPE_DVD_DRIVE = 16, 115 MSVM_RASD_RESOURCETYPE_DISK_DRIVE = 17, 116 MSVM_RASD_RESOURCETYPE_STORAGE_EXTENT = 19, 117 MSVM_RASD_RESOURCETYPE_SERIAL_PORT = 21, 118 MSVM_RASD_RESOURCETYPE_LOGICAL_DISK = 31, 119 MSVM_RASD_RESOURCETYPE_ETHERNET_CONNECTION = 33, 120 }; 121 122 123 124 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 125 * Msvm_EthernetPortAllocationSettingData 126 */ 127 128 /* https://docs.microsoft.com/en-us/windows/win32/hyperv_v2/msvm-ethernetportallocationsettingdata#enabled */ 129 enum _Msvm_EthernetPortAllocationSettingData_EnabledState { 130 MSVM_ETHERNETPORTALLOCATIONSETTINGDATA_ENABLEDSTATE_ENABLED = 2, 131 MSVM_ETHERNETPORTALLOCATIONSETTINGDATA_ENABLEDSTATE_DISABLED = 3, 132 }; 133 134 135 136 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 137 * CIM_EnabledLogicalElement 138 */ 139 140 /* https://docs.microsoft.com/en-us/windows/win32/hyperv_v2/cim-enabledlogicalelement#Unknown */ 141 enum _CIM_EnabledLogicalElement_EnabledState { 142 CIM_ENABLEDLOGICALELEMENT_ENABLEDSTATE_UNKNOWN = 0, 143 CIM_ENABLEDLOGICALELEMENT_ENABLEDSTATE_OTHER = 1, 144 CIM_ENABLEDLOGICALELEMENT_ENABLEDSTATE_ENABLED = 2, 145 CIM_ENABLEDLOGICALELEMENT_ENABLEDSTATE_DISABLED = 3, 146 CIM_ENABLEDLOGICALELEMENT_ENABLEDSTATE_SHUTTING_DOWN = 4, 147 CIM_ENABLEDLOGICALELEMENT_ENABLEDSTATE_NOT_APPLICABLE = 5, 148 CIM_ENABLEDLOGICALELEMENT_ENABLEDSTATE_ENABLED_BUT_OFFLINE = 6, 149 CIM_ENABLEDLOGICALELEMENT_ENABLEDSTATE_IN_TEST = 7, 150 CIM_ENABLEDLOGICALELEMENT_ENABLEDSTATE_DEFERRED = 8, 151 CIM_ENABLEDLOGICALELEMENT_ENABLEDSTATE_QUIESCE = 9, 152 CIM_ENABLEDLOGICALELEMENT_ENABLEDSTATE_STARTING = 10, 153 }; 154 155 156 157 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 158 * WMI 159 */ 160 161 typedef struct _hypervCimType hypervCimType; 162 struct _hypervCimType { 163 /* Parameter name */ 164 const char *name; 165 /* Parameter type */ 166 const char *type; 167 /* whether parameter is an array type */ 168 bool isArray; 169 }; 170 171 typedef struct _hypervWmiClassInfo hypervWmiClassInfo; 172 struct _hypervWmiClassInfo { 173 /* The WMI class name */ 174 const char *name; 175 /* The URI for wsman enumerate request */ 176 const char *rootUri; 177 /* The namespace URI for XML serialization */ 178 const char *resourceUri; 179 /* The wsman serializer info - one of the *_TypeInfo structs */ 180 XmlSerializerInfo *serializerInfo; 181 /* Property type information */ 182 hypervCimType *propertyInfo; 183 }; 184 185 #include "hyperv_wmi_classes.generated.h" 186