| 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 | |
| 10 | DECLARE_HANDLE(HCS_SYSTEM); |
| 11 | DECLARE_HANDLE(HCS_PROCESS); |
| 12 | DECLARE_HANDLE(HCS_OPERATION); |
| 13 | DECLARE_HANDLE(HCS_CALLBACK); |
| 14 | |
| 15 | typedef 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 | |
| 41 | typedef void (CALLBACK *HCS_OPERATION_COMPLETION)(HCS_OPERATION operation, void *context); |
| 42 | |
| 43 | typedef 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 | |
| 59 | typedef struct HCS_EVENT { |
| 60 | HCS_EVENT_TYPE Type; |
| 61 | PCWSTR EventData; |
| 62 | HCS_OPERATION Operation; |
| 63 | } HCS_EVENT; |
| 64 | |
| 65 | typedef enum HCS_EVENT_OPTIONS { |
| 66 | HcsEventOptionNone = 0x00000000, |
| 67 | HcsEventOptionEnableOperationCallbacks = 0x00000001, |
| 68 | HcsEventOptionEnableVmLifecycle = 0x00000002, |
| 69 | HcsEventOptionEnableLiveMigrationEvents = 0x00000004 |
| 70 | } HCS_EVENT_OPTIONS; |
| 71 | |
| 72 | DEFINE_ENUM_FLAG_OPERATORS(HCS_EVENT_OPTIONS); |
| 73 | |
| 74 | typedef enum HCS_OPERATION_OPTIONS { |
| 75 | HcsOperationOptionNone = 0x00000000, |
| 76 | HcsOperationOptionProgressUpdate = 0x00000001, |
| 77 | HcsOperationOptionReserved1 = 0x00000002 |
| 78 | } HCS_OPERATION_OPTIONS; |
| 79 | |
| 80 | DEFINE_ENUM_FLAG_OPERATORS(HCS_OPERATION_OPTIONS); |
| 81 | |
| 82 | typedef void (CALLBACK *HCS_EVENT_CALLBACK)(HCS_EVENT *event, void *context); |
| 83 | |
| 84 | typedef enum HCS_RESOURCE_TYPE { |
| 85 | HcsResourceTypeNone = 0, |
| 86 | HcsResourceTypeFile = 1, |
| 87 | HcsResourceTypeJob = 2, |
| 88 | HcsResourceTypeComObject = 3, |
| 89 | HcsResourceTypeSocket = 4 |
| 90 | } HCS_RESOURCE_TYPE; |
| 91 | |
| 92 | typedef enum HCS_NOTIFICATION_FLAGS { |
| 93 | HcsNotificationFlagSuccess = 0x00000000, |
| 94 | HcsNotificationFlagFailure = 0x80000000 |
| 95 | } HCS_NOTIFICATION_FLAGS; |
| 96 | |
| 97 | typedef 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 | |
| 122 | typedef void (CALLBACK *HCS_NOTIFICATION_CALLBACK)(DWORD notificationType, void *context, HRESULT notificationStatus, PCWSTR notificationData); |
| 123 | |
| 124 | typedef struct { |
| 125 | DWORD ProcessId; |
| 126 | DWORD Reserved; |
| 127 | HANDLE StdInput; |
| 128 | HANDLE StdOutput; |
| 129 | HANDLE StdError; |
| 130 | } HCS_PROCESS_INFORMATION; |
| 131 | |
| 132 | typedef enum HCS_CREATE_OPTIONS { |
| 133 | HcsCreateOptions_1 = 0x00010000 |
| 134 | }HCS_CREATE_OPTIONS; |
| 135 | |
| 136 | typedef 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_ */ |