Home | History | Annotate | Download | only in include
      1 /**
      2  * This file is part of the mingw-w64 runtime package.
      3  * No warranty is given; refer to the file DISCLAIMER within this package.
      4  */
      5 
      6 #ifndef _INC_RESTARTMANAGER
      7 #define _INC_RESTARTMANAGER
      8 
      9 #include <winapifamily.h>
     10 
     11 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
     12 
     13 #ifdef __cplusplus
     14 extern "C" {
     15 #endif
     16 
     17 #define RM_SESSION_KEY_LEN  sizeof (GUID)
     18 #define CCH_RM_SESSION_KEY  RM_SESSION_KEY_LEN * 2
     19 #define CCH_RM_MAX_APP_NAME 255
     20 #define CCH_RM_MAX_SVC_NAME 63
     21 #define RM_INVALID_TS_SESSION -1
     22 #define RM_INVALID_PROCESS -1
     23 
     24   typedef enum _RM_APP_STATUS {
     25     RmStatusUnknown = 0x0,
     26     RmStatusRunning = 0x1,
     27     RmStatusStopped = 0x2,
     28     RmStatusStoppedOther = 0x4,
     29     RmStatusRestarted = 0x8,
     30     RmStatusErrorOnStop = 0x10,
     31     RmStatusErrorOnRestart = 0x20,
     32     RmStatusShutdownMasked = 0x40,
     33     RmStatusRestartMasked = 0x80
     34   } RM_APP_STATUS;
     35 
     36   typedef enum _RM_SHUTDOWN_TYPE {
     37     RmForceShutdown = 0x1,
     38     RmShutdownOnlyRegistered = 0x10
     39   } RM_SHUTDOWN_TYPE;
     40 
     41   typedef enum _RM_APP_TYPE {
     42     RmUnknownApp = 0,
     43     RmMainWindow,
     44     RmOtherWindow,
     45     RmService,
     46     RmExplorer,
     47     RmConsole,
     48     RmCritical = 1000
     49   } RM_APP_TYPE;
     50 
     51   typedef enum _RM_REBOOT_REASON {
     52     RmRebootReasonNone = 0x0,
     53     RmRebootReasonPermissionDenied = 0x1,
     54     RmRebootReasonSessionMismatch = 0x2,
     55     RmRebootReasonCriticalProcess = 0x4,
     56     RmRebootReasonCriticalService = 0x8,
     57     RmRebootReasonDetectedSelf = 0x10
     58   } RM_REBOOT_REASON;
     59 
     60   typedef enum _RM_FILTER_TRIGGER {
     61     RmFilterTriggerInvalid = 0,
     62     RmFilterTriggerFile,
     63     RmFilterTriggerProcess,
     64     RmFilterTriggerService
     65   } RM_FILTER_TRIGGER;
     66 
     67   typedef enum _RM_FILTER_ACTION {
     68     RmInvalidFilterAction = 0,
     69     RmNoRestart,
     70     RmNoShutdown
     71   } RM_FILTER_ACTION;
     72 
     73   typedef struct _RM_UNIQUE_PROCESS {
     74     DWORD dwProcessId;
     75     FILETIME ProcessStartTime;
     76   } RM_UNIQUE_PROCESS, *PRM_UNIQUE_PROCESS;
     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     BOOL bRestartable;
     86   } RM_PROCESS_INFO, *PRM_PROCESS_INFO;
     87 
     88   typedef struct _RM_FILTER_INFO {
     89     RM_FILTER_ACTION FilterAction;
     90     RM_FILTER_TRIGGER FilterTrigger;
     91     DWORD cbNextOffset;
     92     __C89_NAMELESS union {
     93       LPWSTR strFilename;
     94       RM_UNIQUE_PROCESS Process;
     95       LPWSTR strServiceShortName;
     96     };
     97   } RM_FILTER_INFO, *PRM_FILTER_INFO;
     98 
     99   typedef void (*RM_WRITE_STATUS_CALLBACK)(UINT nPercentComplete);
    100 
    101   DWORD WINAPI RmStartSession(DWORD *pSessionHandle, DWORD dwSessionFlags, WCHAR strSessionKey[]);
    102   DWORD WINAPI RmJoinSession(DWORD *pSessionHandle, const WCHAR strSessionKey[]);
    103   DWORD WINAPI RmEndSession(DWORD dwSessionHandle);
    104   DWORD WINAPI RmRegisterResources(DWORD dwSessionHandle, UINT nFiles, LPCWSTR rgsFileNames[], UINT nApplications, RM_UNIQUE_PROCESS rgApplications[], UINT nServices, LPCWSTR rgsServiceNames[]);
    105   DWORD WINAPI RmGetList(DWORD dwSessionHandle, UINT *pnProcInfoNeeded, UINT *pnProcInfo, RM_PROCESS_INFO rgAffectedApps[], LPDWORD lpdwRebootReasons);
    106   DWORD WINAPI RmShutdown(DWORD dwSessionHandle, ULONG lActionFlags, RM_WRITE_STATUS_CALLBACK fnStatus);
    107   DWORD WINAPI RmRestart(DWORD dwSessionHandle, DWORD dwRestartFlags, RM_WRITE_STATUS_CALLBACK fnStatus);
    108   DWORD WINAPI RmCancelCurrentTask(DWORD dwSessionHandle);
    109   DWORD WINAPI RmAddFilter(DWORD dwSessionHandle, LPCWSTR strModuleName, RM_UNIQUE_PROCESS *pProcess, LPCWSTR strServiceShortName, RM_FILTER_ACTION FilterAction);
    110   DWORD WINAPI RmRemoveFilter(DWORD dwSessionHandle, LPCWSTR strModuleName, RM_UNIQUE_PROCESS *pProcess, LPCWSTR strServiceShortName);
    111   DWORD WINAPI RmGetFilterList(DWORD dwSessionHandle, PBYTE pbFilterBuf, DWORD cbFilterBuf, LPDWORD cbFilterBufNeeded);
    112 
    113 #ifdef __cplusplus
    114 }
    115 #endif
    116 
    117 #endif
    118 
    119 #endif
    120