Home | History | Annotate | Download | only in include
      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #ifndef _INC_RESTARTMANAGER
      7 #define _INC_RESTARTMANAGER
      8 
      9 #if (_WIN32_WINNT >= 0x0600)
     10 
     11 #ifdef __cplusplus
     12 extern "C" {
     13 #endif
     14 
     15 typedef enum _RM_APP_STATUS {
     16   RmStatusUnknown          = 0x0,
     17   RmStatusRunning          = 0x1,
     18   RmStatusStopped          = 0x2,
     19   RmStatusStoppedOther     = 0x4,
     20   RmStatusRestarted        = 0x8,
     21   RmStatusErrorOnStop      = 0x10,
     22   RmStatusErrorOnRestart   = 0x20,
     23   RmStatusShutdownMasked   = 0x40,
     24   RmStatusRestartMasked    = 0x80
     25 } RM_APP_STATUS;
     26 
     27 typedef enum _RM_APP_TYPE {
     28   RmUnknownApp    = 0,
     29   RmMainWindow    = 1,
     30   RmOtherWindow   = 2,
     31   RmService       = 3,
     32   RmExplorer      = 4,
     33   RmConsole       = 5,
     34   RmCritical      = 1000
     35 } RM_APP_TYPE;
     36 
     37 typedef enum _RM_FILTER_ACTION {
     38   RmInvalidFilterAction   = 0,
     39   RmNoRestart             = 1,
     40   RmNoShutdown            = 2
     41 } RM_FILTER_ACTION;
     42 
     43 typedef enum _RM_FILTER_TRIGGER {
     44   RmFilterTriggerInvalid   = 0,
     45   RmFilterTriggerFile      = 1,
     46   RmFilterTriggerProcess   = 2,
     47   RmFilterTriggerService   = 3
     48 } RM_FILTER_TRIGGER;
     49 
     50 typedef enum _RM_REBOOT_REASON {
     51   RmRebootReasonNone               = 0x0,
     52   RmRebootReasonPermissionDenied   = 0x1,
     53   RmRebootReasonSessionMismatch    = 0x2,
     54   RmRebootReasonCriticalProcess    = 0x4,
     55   RmRebootReasonCriticalService    = 0x8,
     56   RmRebootReasonDetectedSelf       = 0x10
     57 } RM_REBOOT_REASON;
     58 
     59 typedef enum _RM_SHUTDOWN_TYPE {
     60   RmForceShutdown            = 0x1,
     61   RmShutdownOnlyRegistered   = 0x10
     62 } RM_SHUTDOWN_TYPE;
     63 
     64 typedef struct _RM_UNIQUE_PROCESS {
     65   DWORD    dwProcessId;
     66   FILETIME ProcessStartTime;
     67 } RM_UNIQUE_PROCESS, *PRM_UNIQUE_PROCESS;
     68 
     69 typedef struct _RM_FILTER_INFO {
     70   RM_FILTER_ACTION  FilterAction;
     71   RM_FILTER_TRIGGER FilterTrigger;
     72   DWORD             cbNextOffset;
     73   LPWSTR            strFilename;
     74   RM_UNIQUE_PROCESS Process;
     75   LPWSTR            strServiceShortName;
     76 } RM_FILTER_INFO, *PRM_FILTER_INFO;
     77 
     78 typedef struct _RM_PROCESS_INFO {
     79   RM_UNIQUE_PROCESS Process;
     80   WCHAR             strAppName[CCH_RM_MAX_APP_NAME+1];
     81   WCHAR             strServiceShortName[CCH_RM_MAX_SVC_NAME+1];
     82   RM_APP_TYPE       ApplicationType;
     83   ULONG             AppStatus;
     84   DWORD             TSSessionId;
     85   WINBOOL           bRestartable;
     86 } RM_PROCESS_INFO;
     87 
     88 typedef void ( *RM_WRITE_STATUS_CALLBACK )(
     89   UINT nPercentComplete
     90 );
     91 
     92 DWORD WINAPI RmAddFilter(
     93   DWORD dwSessionHandle,
     94   LPCWSTR strFilename,
     95   RM_UNIQUE_PROCESS *Application,
     96   LPCWSTR strShortServiceName,
     97   RM_FILTER_ACTION ActionType
     98 );
     99 
    100 DWORD WINAPI RmCancelCurrentTask(
    101   DWORD dwSessionHandle
    102 );
    103 
    104 DWORD WINAPI RmEndSession(
    105   DWORD dwSessionHandle
    106 );
    107 
    108 DWORD WINAPI RmGetFilterList(
    109   DWORD dwSessionHandle,
    110   PBYTE pbFilterBuf,
    111   DWORD cbFilterBuf,
    112   LPDWORD cbFilterBufNeeded
    113 );
    114 
    115 DWORD WINAPI RmGetList(
    116   DWORD dwSessionHandle,
    117   UINT *pnProcInfoNeeded,
    118   UINT *pnProcInfo,
    119   RM_PROCESS_INFO rgAffectedApps[ ],
    120   LPDWORD lpdwRebootReasons
    121 );
    122 
    123 DWORD WINAPI RmJoinSession(
    124   DWORD *pSessionHandle,
    125   const WCHAR strSessionKey[ ]
    126 );
    127 
    128 DWORD WINAPI RmRegisterResources(
    129   DWORD dwSessionHandle,
    130   UINT nFiles,
    131   LPCWSTR rgsFilenames[ ],
    132   UINT nApplications,
    133   RM_UNIQUE_PROCESS rgApplications[ ],
    134   UINT nServices,
    135   LPCWSTR rgsServiceNames[ ]
    136 );
    137 
    138 DWORD WINAPI RmRemoveFilter(
    139   DWORD dwSessionHandle,
    140   LPCWSTR strFilename,
    141   RM_UNIQUE_PROCESS *Application,
    142   LPCWSTR strShortServiceName
    143 );
    144 
    145 DWORD WINAPI RmRestart(
    146   DWORD dwSessionHandle,
    147   DWORD dwRestartFlags,
    148   RM_WRITE_STATUS_CALLBACK fnStatus
    149 );
    150 
    151 #define RmForceShutdown 0x1
    152 #define RmShutdownOnlyRegistered 0x10
    153 
    154 DWORD WINAPI RmShutdown(
    155   DWORD dwSessionHandle,
    156   ULONG lActionFlags,
    157   RM_WRITE_STATUS_CALLBACK fnStatus
    158 );
    159 
    160 DWORD WINAPI RmStartSession(
    161   DWORD *pSessionHandle,
    162   DWORD dwSessionFlags,
    163   WCHAR strSessionKey[]
    164 );
    165 
    166 #ifdef __cplusplus
    167 }
    168 #endif
    169 
    170 #endif /* (_WIN32_WINNT >= 0x0600) */
    171 
    172 #endif /*_INC_RESTARTMANAGER*/
    173 
    174