master
  1/**
  2 * This file is part of the mingw-w64 runtime package.
  3 * No warranty is given; refer to the file DISCLAIMER within this package.
  4 */
  5
  6#ifndef _INC_RESTARTMANAGER
  7#define _INC_RESTARTMANAGER
  8
  9#include <winapifamily.h>
 10
 11#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
 12
 13#ifdef __cplusplus
 14extern "C" {
 15#endif
 16
 17#define RM_SESSION_KEY_LEN  sizeof (GUID)
 18#define CCH_RM_SESSION_KEY  RM_SESSION_KEY_LEN * 2
 19#define CCH_RM_MAX_APP_NAME 255
 20#define CCH_RM_MAX_SVC_NAME 63
 21#define RM_INVALID_TS_SESSION -1
 22#define RM_INVALID_PROCESS -1
 23
 24  typedef enum _RM_APP_STATUS {
 25    RmStatusUnknown = 0x0,
 26    RmStatusRunning = 0x1,
 27    RmStatusStopped = 0x2,
 28    RmStatusStoppedOther = 0x4,
 29    RmStatusRestarted = 0x8,
 30    RmStatusErrorOnStop = 0x10,
 31    RmStatusErrorOnRestart = 0x20,
 32    RmStatusShutdownMasked = 0x40,
 33    RmStatusRestartMasked = 0x80
 34  } RM_APP_STATUS;
 35
 36  typedef enum _RM_SHUTDOWN_TYPE {
 37    RmForceShutdown = 0x1,
 38    RmShutdownOnlyRegistered = 0x10
 39  } RM_SHUTDOWN_TYPE;
 40
 41  typedef enum _RM_APP_TYPE {
 42    RmUnknownApp = 0,
 43    RmMainWindow,
 44    RmOtherWindow,
 45    RmService,
 46    RmExplorer,
 47    RmConsole,
 48    RmCritical = 1000
 49  } RM_APP_TYPE;
 50
 51  typedef enum _RM_REBOOT_REASON {
 52    RmRebootReasonNone = 0x0,
 53    RmRebootReasonPermissionDenied = 0x1,
 54    RmRebootReasonSessionMismatch = 0x2,
 55    RmRebootReasonCriticalProcess = 0x4,
 56    RmRebootReasonCriticalService = 0x8,
 57    RmRebootReasonDetectedSelf = 0x10
 58  } RM_REBOOT_REASON;
 59
 60  typedef enum _RM_FILTER_TRIGGER {
 61    RmFilterTriggerInvalid = 0,
 62    RmFilterTriggerFile,
 63    RmFilterTriggerProcess,
 64    RmFilterTriggerService 
 65  } RM_FILTER_TRIGGER;
 66
 67  typedef enum _RM_FILTER_ACTION {
 68    RmInvalidFilterAction = 0,
 69    RmNoRestart,
 70    RmNoShutdown
 71  } RM_FILTER_ACTION;
 72
 73  typedef struct _RM_UNIQUE_PROCESS {
 74    DWORD dwProcessId;
 75    FILETIME ProcessStartTime;
 76  } RM_UNIQUE_PROCESS, *PRM_UNIQUE_PROCESS;
 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    BOOL bRestartable;
 86  } RM_PROCESS_INFO, *PRM_PROCESS_INFO;
 87
 88  typedef struct _RM_FILTER_INFO {
 89    RM_FILTER_ACTION FilterAction;
 90    RM_FILTER_TRIGGER FilterTrigger;
 91    DWORD cbNextOffset;
 92    __C89_NAMELESS union {
 93      LPWSTR strFilename;
 94      RM_UNIQUE_PROCESS Process;
 95      LPWSTR strServiceShortName;
 96    };
 97  } RM_FILTER_INFO, *PRM_FILTER_INFO;
 98
 99  typedef void (*RM_WRITE_STATUS_CALLBACK)(UINT nPercentComplete);
100
101  DWORD WINAPI RmStartSession(DWORD *pSessionHandle, DWORD dwSessionFlags, WCHAR strSessionKey[]);
102  DWORD WINAPI RmJoinSession(DWORD *pSessionHandle, const WCHAR strSessionKey[]);
103  DWORD WINAPI RmEndSession(DWORD dwSessionHandle);
104  DWORD WINAPI RmRegisterResources(DWORD dwSessionHandle, UINT nFiles, LPCWSTR rgsFileNames[], UINT nApplications, RM_UNIQUE_PROCESS rgApplications[], UINT nServices, LPCWSTR rgsServiceNames[]);
105  DWORD WINAPI RmGetList(DWORD dwSessionHandle, UINT *pnProcInfoNeeded, UINT *pnProcInfo, RM_PROCESS_INFO rgAffectedApps[], LPDWORD lpdwRebootReasons);
106  DWORD WINAPI RmShutdown(DWORD dwSessionHandle, ULONG lActionFlags, RM_WRITE_STATUS_CALLBACK fnStatus);
107  DWORD WINAPI RmRestart(DWORD dwSessionHandle, DWORD dwRestartFlags, RM_WRITE_STATUS_CALLBACK fnStatus);
108  DWORD WINAPI RmCancelCurrentTask(DWORD dwSessionHandle);
109  DWORD WINAPI RmAddFilter(DWORD dwSessionHandle, LPCWSTR strModuleName, RM_UNIQUE_PROCESS *pProcess, LPCWSTR strServiceShortName, RM_FILTER_ACTION FilterAction);
110  DWORD WINAPI RmRemoveFilter(DWORD dwSessionHandle, LPCWSTR strModuleName, RM_UNIQUE_PROCESS *pProcess, LPCWSTR strServiceShortName);
111  DWORD WINAPI RmGetFilterList(DWORD dwSessionHandle, PBYTE pbFilterBuf, DWORD cbFilterBuf, LPDWORD cbFilterBufNeeded);
112
113#ifdef __cplusplus
114}
115#endif
116
117#endif
118
119#endif