restartmanager.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. #ifndef _INC_RESTARTMANAGER
  6. #define _INC_RESTARTMANAGER
  7. #include <winapifamily.h>
  8. #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. #define RM_SESSION_KEY_LEN sizeof (GUID)
  13. #define CCH_RM_SESSION_KEY RM_SESSION_KEY_LEN * 2
  14. #define CCH_RM_MAX_APP_NAME 255
  15. #define CCH_RM_MAX_SVC_NAME 63
  16. #define RM_INVALID_TS_SESSION -1
  17. #define RM_INVALID_PROCESS -1
  18. typedef enum _RM_APP_STATUS {
  19. RmStatusUnknown = 0x0,
  20. RmStatusRunning = 0x1,
  21. RmStatusStopped = 0x2,
  22. RmStatusStoppedOther = 0x4,
  23. RmStatusRestarted = 0x8,
  24. RmStatusErrorOnStop = 0x10,
  25. RmStatusErrorOnRestart = 0x20,
  26. RmStatusShutdownMasked = 0x40,
  27. RmStatusRestartMasked = 0x80
  28. } RM_APP_STATUS;
  29. typedef enum _RM_SHUTDOWN_TYPE {
  30. RmForceShutdown = 0x1,
  31. RmShutdownOnlyRegistered = 0x10
  32. } RM_SHUTDOWN_TYPE;
  33. typedef enum _RM_APP_TYPE {
  34. RmUnknownApp = 0,
  35. RmMainWindow,
  36. RmOtherWindow,
  37. RmService,
  38. RmExplorer,
  39. RmConsole,
  40. RmCritical = 1000
  41. } RM_APP_TYPE;
  42. typedef enum _RM_REBOOT_REASON {
  43. RmRebootReasonNone = 0x0,
  44. RmRebootReasonPermissionDenied = 0x1,
  45. RmRebootReasonSessionMismatch = 0x2,
  46. RmRebootReasonCriticalProcess = 0x4,
  47. RmRebootReasonCriticalService = 0x8,
  48. RmRebootReasonDetectedSelf = 0x10
  49. } RM_REBOOT_REASON;
  50. typedef enum _RM_FILTER_TRIGGER {
  51. RmFilterTriggerInvalid = 0,
  52. RmFilterTriggerFile,
  53. RmFilterTriggerProcess,
  54. RmFilterTriggerService
  55. } RM_FILTER_TRIGGER;
  56. typedef enum _RM_FILTER_ACTION {
  57. RmInvalidFilterAction = 0,
  58. RmNoRestart,
  59. RmNoShutdown
  60. } RM_FILTER_ACTION;
  61. typedef struct _RM_UNIQUE_PROCESS {
  62. DWORD dwProcessId;
  63. FILETIME ProcessStartTime;
  64. } RM_UNIQUE_PROCESS, *PRM_UNIQUE_PROCESS;
  65. typedef struct _RM_PROCESS_INFO {
  66. RM_UNIQUE_PROCESS Process;
  67. WCHAR strAppName[CCH_RM_MAX_APP_NAME + 1];
  68. WCHAR strServiceShortName[CCH_RM_MAX_SVC_NAME + 1];
  69. RM_APP_TYPE ApplicationType;
  70. ULONG AppStatus;
  71. DWORD TSSessionId;
  72. BOOL bRestartable;
  73. } RM_PROCESS_INFO, *PRM_PROCESS_INFO;
  74. typedef struct _RM_FILTER_INFO {
  75. RM_FILTER_ACTION FilterAction;
  76. RM_FILTER_TRIGGER FilterTrigger;
  77. DWORD cbNextOffset;
  78. __C89_NAMELESS union {
  79. LPWSTR strFilename;
  80. RM_UNIQUE_PROCESS Process;
  81. LPWSTR strServiceShortName;
  82. };
  83. } RM_FILTER_INFO, *PRM_FILTER_INFO;
  84. typedef void (*RM_WRITE_STATUS_CALLBACK)(UINT nPercentComplete);
  85. DWORD WINAPI RmStartSession(DWORD *pSessionHandle, DWORD dwSessionFlags, WCHAR strSessionKey[]);
  86. DWORD WINAPI RmJoinSession(DWORD *pSessionHandle, const WCHAR strSessionKey[]);
  87. DWORD WINAPI RmEndSession(DWORD dwSessionHandle);
  88. DWORD WINAPI RmRegisterResources(DWORD dwSessionHandle, UINT nFiles, LPCWSTR rgsFileNames[], UINT nApplications, RM_UNIQUE_PROCESS rgApplications[], UINT nServices, LPCWSTR rgsServiceNames[]);
  89. DWORD WINAPI RmGetList(DWORD dwSessionHandle, UINT *pnProcInfoNeeded, UINT *pnProcInfo, RM_PROCESS_INFO rgAffectedApps[], LPDWORD lpdwRebootReasons);
  90. DWORD WINAPI RmShutdown(DWORD dwSessionHandle, ULONG lActionFlags, RM_WRITE_STATUS_CALLBACK fnStatus);
  91. DWORD WINAPI RmRestart(DWORD dwSessionHandle, DWORD dwRestartFlags, RM_WRITE_STATUS_CALLBACK fnStatus);
  92. DWORD WINAPI RmCancelCurrentTask(DWORD dwSessionHandle);
  93. DWORD WINAPI RmAddFilter(DWORD dwSessionHandle, LPCWSTR strModuleName, RM_UNIQUE_PROCESS *pProcess, LPCWSTR strServiceShortName, RM_FILTER_ACTION FilterAction);
  94. DWORD WINAPI RmRemoveFilter(DWORD dwSessionHandle, LPCWSTR strModuleName, RM_UNIQUE_PROCESS *pProcess, LPCWSTR strServiceShortName);
  95. DWORD WINAPI RmGetFilterList(DWORD dwSessionHandle, PBYTE pbFilterBuf, DWORD cbFilterBuf, LPDWORD cbFilterBufNeeded);
  96. #ifdef __cplusplus
  97. }
  98. #endif
  99. #endif
  100. #endif