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_ */