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