/**
* This file has no copyright assigned and is placed in the Public Domain.
* This file is part of the mingw-w64 runtime package.
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
*/
#ifndef _INC_RESTARTMANAGER
#define _INC_RESTARTMANAGER
#if (_WIN32_WINNT >= 0x0600)
#ifdef __cplusplus
extern "C" {
#endif
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_APP_TYPE {
RmUnknownApp = 0,
RmMainWindow = 1,
RmOtherWindow = 2,
RmService = 3,
RmExplorer = 4,
RmConsole = 5,
RmCritical = 1000
} RM_APP_TYPE;
typedef enum _RM_FILTER_ACTION {
RmInvalidFilterAction = 0,
RmNoRestart = 1,
RmNoShutdown = 2
} RM_FILTER_ACTION;
typedef enum _RM_FILTER_TRIGGER {
RmFilterTriggerInvalid = 0,
RmFilterTriggerFile = 1,
RmFilterTriggerProcess = 2,
RmFilterTriggerService = 3
} RM_FILTER_TRIGGER;
typedef enum _RM_REBOOT_REASON {
RmRebootReasonNone = 0x0,
RmRebootReasonPermissionDenied = 0x1,
RmRebootReasonSessionMismatch = 0x2,
RmRebootReasonCriticalProcess = 0x4,
RmRebootReasonCriticalService = 0x8,
RmRebootReasonDetectedSelf = 0x10
} RM_REBOOT_REASON;
typedef enum _RM_SHUTDOWN_TYPE {
RmForceShutdown = 0x1,
RmShutdownOnlyRegistered = 0x10
} RM_SHUTDOWN_TYPE;
typedef struct _RM_UNIQUE_PROCESS {
DWORD dwProcessId;
FILETIME ProcessStartTime;
} RM_UNIQUE_PROCESS, *PRM_UNIQUE_PROCESS;
typedef struct _RM_FILTER_INFO {
RM_FILTER_ACTION FilterAction;
RM_FILTER_TRIGGER FilterTrigger;
DWORD cbNextOffset;
LPWSTR strFilename;
RM_UNIQUE_PROCESS Process;
LPWSTR strServiceShortName;
} RM_FILTER_INFO, *PRM_FILTER_INFO;
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;
WINBOOL bRestartable;
} RM_PROCESS_INFO;
typedef void ( *RM_WRITE_STATUS_CALLBACK )(
UINT nPercentComplete
);
DWORD WINAPI RmAddFilter(
DWORD dwSessionHandle,
LPCWSTR strFilename,
RM_UNIQUE_PROCESS *Application,
LPCWSTR strShortServiceName,
RM_FILTER_ACTION ActionType
);
DWORD WINAPI RmCancelCurrentTask(
DWORD dwSessionHandle
);
DWORD WINAPI RmEndSession(
DWORD dwSessionHandle
);
DWORD WINAPI RmGetFilterList(
DWORD dwSessionHandle,
PBYTE pbFilterBuf,
DWORD cbFilterBuf,
LPDWORD cbFilterBufNeeded
);
DWORD WINAPI RmGetList(
DWORD dwSessionHandle,
UINT *pnProcInfoNeeded,
UINT *pnProcInfo,
RM_PROCESS_INFO rgAffectedApps[ ],
LPDWORD lpdwRebootReasons
);
DWORD WINAPI RmJoinSession(
DWORD *pSessionHandle,
const WCHAR strSessionKey[ ]
);
DWORD WINAPI RmRegisterResources(
DWORD dwSessionHandle,
UINT nFiles,
LPCWSTR rgsFilenames[ ],
UINT nApplications,
RM_UNIQUE_PROCESS rgApplications[ ],
UINT nServices,
LPCWSTR rgsServiceNames[ ]
);
DWORD WINAPI RmRemoveFilter(
DWORD dwSessionHandle,
LPCWSTR strFilename,
RM_UNIQUE_PROCESS *Application,
LPCWSTR strShortServiceName
);
DWORD WINAPI RmRestart(
DWORD dwSessionHandle,
DWORD dwRestartFlags,
RM_WRITE_STATUS_CALLBACK fnStatus
);
#define RmForceShutdown 0x1
#define RmShutdownOnlyRegistered 0x10
DWORD WINAPI RmShutdown(
DWORD dwSessionHandle,
ULONG lActionFlags,
RM_WRITE_STATUS_CALLBACK fnStatus
);
DWORD WINAPI RmStartSession(
DWORD *pSessionHandle,
DWORD dwSessionFlags,
WCHAR strSessionKey[]
);
#ifdef __cplusplus
}
#endif
#endif /* (_WIN32_WINNT >= 0x0600) */
#endif /*_INC_RESTARTMANAGER*/