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