master
1/**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6
7#ifndef _HYPERV_COMPUTEDEFS_H_
8#define _HYPERV_COMPUTEDEFS_H_
9
10DECLARE_HANDLE(HCS_SYSTEM);
11DECLARE_HANDLE(HCS_PROCESS);
12DECLARE_HANDLE(HCS_OPERATION);
13DECLARE_HANDLE(HCS_CALLBACK);
14
15typedef enum HCS_OPERATION_TYPE {
16 HcsOperationTypeNone = -1,
17 HcsOperationTypeEnumerate = 0,
18 HcsOperationTypeCreate = 1,
19 HcsOperationTypeStart = 2,
20 HcsOperationTypeShutdown = 3,
21 HcsOperationTypePause = 4,
22 HcsOperationTypeResume = 5,
23 HcsOperationTypeSave = 6,
24 HcsOperationTypeTerminate = 7,
25 HcsOperationTypeModify = 8,
26 HcsOperationTypeGetProperties = 9,
27 HcsOperationTypeCreateProcess = 10,
28 HcsOperationTypeSignalProcess = 11,
29 HcsOperationTypeGetProcessInfo = 12,
30 HcsOperationTypeGetProcessProperties = 13,
31 HcsOperationTypeModifyProcess = 14,
32 HcsOperationTypeCrash = 15,
33 HcsOperationTypeLiveMigration = 19,
34 HcsOperationTypeReserved1 = 16,
35 HcsOperationTypeReserved2 = 17,
36 HcsOperationTypeReserved3 = 18
37} HCS_OPERATION_TYPE;
38
39#define HCS_INVALID_OPERATION_ID (UINT64)(-1)
40
41typedef void (CALLBACK *HCS_OPERATION_COMPLETION)(HCS_OPERATION operation, void *context);
42
43typedef enum HCS_EVENT_TYPE {
44 HcsEventInvalid = 0x00000000,
45 HcsEventSystemExited = 0x00000001,
46 HcsEventSystemCrashInitiated = 0x00000002,
47 HcsEventSystemCrashReport = 0x00000003,
48 HcsEventSystemRdpEnhancedModeStateChanged = 0x00000004,
49 HcsEventSystemSiloJobCreated = 0x00000005,
50 HcsEventSystemGuestConnectionClosed = 0x00000006,
51 HcsEventProcessExited = 0x00010000,
52 HcsEventOperationCallback = 0x01000000,
53 HcsEventServiceDisconnect = 0x02000000,
54 HcsEventGroupVmLifecycle = 0x80000002,
55 HcsEventGroupLiveMigration = 0x80000003,
56 HcsEventGroupOperationInfo = 0xC0000001
57} HCS_EVENT_TYPE;
58
59typedef struct HCS_EVENT {
60 HCS_EVENT_TYPE Type;
61 PCWSTR EventData;
62 HCS_OPERATION Operation;
63} HCS_EVENT;
64
65typedef enum HCS_EVENT_OPTIONS {
66 HcsEventOptionNone = 0x00000000,
67 HcsEventOptionEnableOperationCallbacks = 0x00000001,
68 HcsEventOptionEnableVmLifecycle = 0x00000002,
69 HcsEventOptionEnableLiveMigrationEvents = 0x00000004
70} HCS_EVENT_OPTIONS;
71
72DEFINE_ENUM_FLAG_OPERATORS(HCS_EVENT_OPTIONS);
73
74typedef enum HCS_OPERATION_OPTIONS {
75 HcsOperationOptionNone = 0x00000000,
76 HcsOperationOptionProgressUpdate = 0x00000001,
77 HcsOperationOptionReserved1 = 0x00000002
78} HCS_OPERATION_OPTIONS;
79
80DEFINE_ENUM_FLAG_OPERATORS(HCS_OPERATION_OPTIONS);
81
82typedef void (CALLBACK *HCS_EVENT_CALLBACK)(HCS_EVENT *event, void *context);
83
84typedef enum HCS_RESOURCE_TYPE {
85 HcsResourceTypeNone = 0,
86 HcsResourceTypeFile = 1,
87 HcsResourceTypeJob = 2,
88 HcsResourceTypeComObject = 3,
89 HcsResourceTypeSocket = 4
90} HCS_RESOURCE_TYPE;
91
92typedef enum HCS_NOTIFICATION_FLAGS {
93 HcsNotificationFlagSuccess = 0x00000000,
94 HcsNotificationFlagFailure = 0x80000000
95} HCS_NOTIFICATION_FLAGS;
96
97typedef enum HCS_NOTIFICATIONS {
98 HcsNotificationInvalid = 0x00000000,
99 HcsNotificationSystemExited = 0x00000001,
100 HcsNotificationSystemCreateCompleted = 0x00000002,
101 HcsNotificationSystemStartCompleted = 0x00000003,
102 HcsNotificationSystemPauseCompleted = 0x00000004,
103 HcsNotificationSystemResumeCompleted = 0x00000005,
104 HcsNotificationSystemCrashReport = 0x00000006,
105 HcsNotificationSystemSiloJobCreated = 0x00000007,
106 HcsNotificationSystemSaveCompleted = 0x00000008,
107 HcsNotificationSystemRdpEnhancedModeStateChanged = 0x00000009,
108 HcsNotificationSystemShutdownFailed = 0x0000000A,
109 HcsNotificationSystemShutdownCompleted = 0x0000000A,
110 HcsNotificationSystemGetPropertiesCompleted = 0x0000000B,
111 HcsNotificationSystemModifyCompleted = 0x0000000C,
112 HcsNotificationSystemCrashInitiated = 0x0000000D,
113 HcsNotificationSystemGuestConnectionClosed = 0x0000000E,
114 HcsNotificationSystemOperationCompletion = 0x0000000F,
115 HcsNotificationSystemPassThru = 0x00000010,
116 HcsNotificationOperationProgressUpdate = 0x00000100,
117 HcsNotificationProcessExited = 0x00010000,
118 HcsNotificationServiceDisconnect = 0x01000000,
119 HcsNotificationFlagsReserved = 0xF0000000
120} HCS_NOTIFICATIONS;
121
122typedef void (CALLBACK *HCS_NOTIFICATION_CALLBACK)(DWORD notificationType, void *context, HRESULT notificationStatus, PCWSTR notificationData);
123
124typedef struct {
125 DWORD ProcessId;
126 DWORD Reserved;
127 HANDLE StdInput;
128 HANDLE StdOutput;
129 HANDLE StdError;
130} HCS_PROCESS_INFORMATION;
131
132typedef enum HCS_CREATE_OPTIONS {
133 HcsCreateOptions_1 = 0x00010000
134}HCS_CREATE_OPTIONS;
135
136typedef struct {
137 HCS_CREATE_OPTIONS Version;
138 HANDLE UserToken;
139 SECURITY_DESCRIPTOR* SecurityDescriptor;
140 HCS_EVENT_OPTIONS CallbackOptions;
141 void* CallbackContext;
142 HCS_EVENT_CALLBACK Callback;
143} HCS_CREATE_OPTIONS_1;
144
145#endif /* _HYPERV_COMPUTEDEFS_H_ */