| /** |
| * This file is part of the mingw-w64 runtime package. |
| * No warranty is given; refer to the file DISCLAIMER within this package. |
| */ |
| |
| #ifndef _INC_RESTARTMANAGER |
| #define _INC_RESTARTMANAGER |
| |
| #include <winapifamily.h> |
| |
| #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #define RM_SESSION_KEY_LEN sizeof (GUID) |
| #define CCH_RM_SESSION_KEY RM_SESSION_KEY_LEN * 2 |
| #define CCH_RM_MAX_APP_NAME 255 |
| #define CCH_RM_MAX_SVC_NAME 63 |
| #define RM_INVALID_TS_SESSION -1 |
| #define RM_INVALID_PROCESS -1 |
| |
| typedef enum _RM_APP_STATUS { |
| RmStatusUnknown = 0x0, |
| RmStatusRunning = 0x1, |
| RmStatusStopped = 0x2, |
| RmStatusStoppedOther = 0x4, |
| RmStatusRestarted = 0x8, |
| RmStatusErrorOnStop = 0x10, |
| RmStatusErrorOnRestart = 0x20, |
| RmStatusShutdownMasked = 0x40, |
| RmStatusRestartMasked = 0x80 |
| } RM_APP_STATUS; |
| |
| typedef enum _RM_SHUTDOWN_TYPE { |
| RmForceShutdown = 0x1, |
| RmShutdownOnlyRegistered = 0x10 |
| } RM_SHUTDOWN_TYPE; |
| |
| typedef enum _RM_APP_TYPE { |
| RmUnknownApp = 0, |
| RmMainWindow, |
| RmOtherWindow, |
| RmService, |
| RmExplorer, |
| RmConsole, |
| RmCritical = 1000 |
| } RM_APP_TYPE; |
| |
| typedef enum _RM_REBOOT_REASON { |
| RmRebootReasonNone = 0x0, |
| RmRebootReasonPermissionDenied = 0x1, |
| RmRebootReasonSessionMismatch = 0x2, |
| RmRebootReasonCriticalProcess = 0x4, |
| RmRebootReasonCriticalService = 0x8, |
| RmRebootReasonDetectedSelf = 0x10 |
| } RM_REBOOT_REASON; |
| |
| typedef enum _RM_FILTER_TRIGGER { |
| RmFilterTriggerInvalid = 0, |
| RmFilterTriggerFile, |
| RmFilterTriggerProcess, |
| RmFilterTriggerService |
| } RM_FILTER_TRIGGER; |
| |
| typedef enum _RM_FILTER_ACTION { |
| RmInvalidFilterAction = 0, |
| RmNoRestart, |
| RmNoShutdown |
| } RM_FILTER_ACTION; |
| |
| typedef struct _RM_UNIQUE_PROCESS { |
| DWORD dwProcessId; |
| FILETIME ProcessStartTime; |
| } RM_UNIQUE_PROCESS, *PRM_UNIQUE_PROCESS; |
| |
| typedef struct _RM_PROCESS_INFO { |
| RM_UNIQUE_PROCESS Process; |
| WCHAR strAppName[CCH_RM_MAX_APP_NAME + 1]; |
| WCHAR strServiceShortName[CCH_RM_MAX_SVC_NAME + 1]; |
| RM_APP_TYPE ApplicationType; |
| ULONG AppStatus; |
| DWORD TSSessionId; |
| BOOL bRestartable; |
| } RM_PROCESS_INFO, *PRM_PROCESS_INFO; |
| |
| typedef struct _RM_FILTER_INFO { |
| RM_FILTER_ACTION FilterAction; |
| RM_FILTER_TRIGGER FilterTrigger; |
| DWORD cbNextOffset; |
| __C89_NAMELESS union { |
| LPWSTR strFilename; |
| RM_UNIQUE_PROCESS Process; |
| LPWSTR strServiceShortName; |
| }; |
| } RM_FILTER_INFO, *PRM_FILTER_INFO; |
| |
| typedef void (*RM_WRITE_STATUS_CALLBACK)(UINT nPercentComplete); |
| |
| DWORD WINAPI RmStartSession(DWORD *pSessionHandle, DWORD dwSessionFlags, WCHAR strSessionKey[]); |
| DWORD WINAPI RmJoinSession(DWORD *pSessionHandle, const WCHAR strSessionKey[]); |
| DWORD WINAPI RmEndSession(DWORD dwSessionHandle); |
| DWORD WINAPI RmRegisterResources(DWORD dwSessionHandle, UINT nFiles, LPCWSTR rgsFileNames[], UINT nApplications, RM_UNIQUE_PROCESS rgApplications[], UINT nServices, LPCWSTR rgsServiceNames[]); |
| DWORD WINAPI RmGetList(DWORD dwSessionHandle, UINT *pnProcInfoNeeded, UINT *pnProcInfo, RM_PROCESS_INFO rgAffectedApps[], LPDWORD lpdwRebootReasons); |
| DWORD WINAPI RmShutdown(DWORD dwSessionHandle, ULONG lActionFlags, RM_WRITE_STATUS_CALLBACK fnStatus); |
| DWORD WINAPI RmRestart(DWORD dwSessionHandle, DWORD dwRestartFlags, RM_WRITE_STATUS_CALLBACK fnStatus); |
| DWORD WINAPI RmCancelCurrentTask(DWORD dwSessionHandle); |
| DWORD WINAPI RmAddFilter(DWORD dwSessionHandle, LPCWSTR strModuleName, RM_UNIQUE_PROCESS *pProcess, LPCWSTR strServiceShortName, RM_FILTER_ACTION FilterAction); |
| DWORD WINAPI RmRemoveFilter(DWORD dwSessionHandle, LPCWSTR strModuleName, RM_UNIQUE_PROCESS *pProcess, LPCWSTR strServiceShortName); |
| DWORD WINAPI RmGetFilterList(DWORD dwSessionHandle, PBYTE pbFilterBuf, DWORD cbFilterBuf, LPDWORD cbFilterBufNeeded); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif |
| |
| #endif |