|  | /** | 
|  | * This file has no copyright assigned and is placed in the Public Domain. | 
|  | * This file is part of the w64 mingw-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*/ | 
|  |  |