123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- /**
- * 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
|