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