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 #ifndef _INC_RESTARTMANAGER 7 #define _INC_RESTARTMANAGER 8 9 #if (_WIN32_WINNT >= 0x0600) 10 11 #ifdef __cplusplus 12 extern "C" { 13 #endif 14 15 typedef enum _RM_APP_STATUS { 16 RmStatusUnknown = 0x0, 17 RmStatusRunning = 0x1, 18 RmStatusStopped = 0x2, 19 RmStatusStoppedOther = 0x4, 20 RmStatusRestarted = 0x8, 21 RmStatusErrorOnStop = 0x10, 22 RmStatusErrorOnRestart = 0x20, 23 RmStatusShutdownMasked = 0x40, 24 RmStatusRestartMasked = 0x80 25 } RM_APP_STATUS; 26 27 typedef enum _RM_APP_TYPE { 28 RmUnknownApp = 0, 29 RmMainWindow = 1, 30 RmOtherWindow = 2, 31 RmService = 3, 32 RmExplorer = 4, 33 RmConsole = 5, 34 RmCritical = 1000 35 } RM_APP_TYPE; 36 37 typedef enum _RM_FILTER_ACTION { 38 RmInvalidFilterAction = 0, 39 RmNoRestart = 1, 40 RmNoShutdown = 2 41 } RM_FILTER_ACTION; 42 43 typedef enum _RM_FILTER_TRIGGER { 44 RmFilterTriggerInvalid = 0, 45 RmFilterTriggerFile = 1, 46 RmFilterTriggerProcess = 2, 47 RmFilterTriggerService = 3 48 } RM_FILTER_TRIGGER; 49 50 typedef enum _RM_REBOOT_REASON { 51 RmRebootReasonNone = 0x0, 52 RmRebootReasonPermissionDenied = 0x1, 53 RmRebootReasonSessionMismatch = 0x2, 54 RmRebootReasonCriticalProcess = 0x4, 55 RmRebootReasonCriticalService = 0x8, 56 RmRebootReasonDetectedSelf = 0x10 57 } RM_REBOOT_REASON; 58 59 typedef enum _RM_SHUTDOWN_TYPE { 60 RmForceShutdown = 0x1, 61 RmShutdownOnlyRegistered = 0x10 62 } RM_SHUTDOWN_TYPE; 63 64 typedef struct _RM_UNIQUE_PROCESS { 65 DWORD dwProcessId; 66 FILETIME ProcessStartTime; 67 } RM_UNIQUE_PROCESS, *PRM_UNIQUE_PROCESS; 68 69 typedef struct _RM_FILTER_INFO { 70 RM_FILTER_ACTION FilterAction; 71 RM_FILTER_TRIGGER FilterTrigger; 72 DWORD cbNextOffset; 73 LPWSTR strFilename; 74 RM_UNIQUE_PROCESS Process; 75 LPWSTR strServiceShortName; 76 } RM_FILTER_INFO, *PRM_FILTER_INFO; 77 78 typedef struct _RM_PROCESS_INFO { 79 RM_UNIQUE_PROCESS Process; 80 WCHAR strAppName[CCH_RM_MAX_APP_NAME+1]; 81 WCHAR strServiceShortName[CCH_RM_MAX_SVC_NAME+1]; 82 RM_APP_TYPE ApplicationType; 83 ULONG AppStatus; 84 DWORD TSSessionId; 85 WINBOOL bRestartable; 86 } RM_PROCESS_INFO; 87 88 typedef void ( *RM_WRITE_STATUS_CALLBACK )( 89 UINT nPercentComplete 90 ); 91 92 DWORD WINAPI RmAddFilter( 93 DWORD dwSessionHandle, 94 LPCWSTR strFilename, 95 RM_UNIQUE_PROCESS *Application, 96 LPCWSTR strShortServiceName, 97 RM_FILTER_ACTION ActionType 98 ); 99 100 DWORD WINAPI RmCancelCurrentTask( 101 DWORD dwSessionHandle 102 ); 103 104 DWORD WINAPI RmEndSession( 105 DWORD dwSessionHandle 106 ); 107 108 DWORD WINAPI RmGetFilterList( 109 DWORD dwSessionHandle, 110 PBYTE pbFilterBuf, 111 DWORD cbFilterBuf, 112 LPDWORD cbFilterBufNeeded 113 ); 114 115 DWORD WINAPI RmGetList( 116 DWORD dwSessionHandle, 117 UINT *pnProcInfoNeeded, 118 UINT *pnProcInfo, 119 RM_PROCESS_INFO rgAffectedApps[ ], 120 LPDWORD lpdwRebootReasons 121 ); 122 123 DWORD WINAPI RmJoinSession( 124 DWORD *pSessionHandle, 125 const WCHAR strSessionKey[ ] 126 ); 127 128 DWORD WINAPI RmRegisterResources( 129 DWORD dwSessionHandle, 130 UINT nFiles, 131 LPCWSTR rgsFilenames[ ], 132 UINT nApplications, 133 RM_UNIQUE_PROCESS rgApplications[ ], 134 UINT nServices, 135 LPCWSTR rgsServiceNames[ ] 136 ); 137 138 DWORD WINAPI RmRemoveFilter( 139 DWORD dwSessionHandle, 140 LPCWSTR strFilename, 141 RM_UNIQUE_PROCESS *Application, 142 LPCWSTR strShortServiceName 143 ); 144 145 DWORD WINAPI RmRestart( 146 DWORD dwSessionHandle, 147 DWORD dwRestartFlags, 148 RM_WRITE_STATUS_CALLBACK fnStatus 149 ); 150 151 #define RmForceShutdown 0x1 152 #define RmShutdownOnlyRegistered 0x10 153 154 DWORD WINAPI RmShutdown( 155 DWORD dwSessionHandle, 156 ULONG lActionFlags, 157 RM_WRITE_STATUS_CALLBACK fnStatus 158 ); 159 160 DWORD WINAPI RmStartSession( 161 DWORD *pSessionHandle, 162 DWORD dwSessionFlags, 163 WCHAR strSessionKey[] 164 ); 165 166 #ifdef __cplusplus 167 } 168 #endif 169 170 #endif /* (_WIN32_WINNT >= 0x0600) */ 171 172 #endif /*_INC_RESTARTMANAGER*/ 173 174