t7x/installer/tools/Include/Win/RestartManager.nsh

118 lines
3.4 KiB
Plaintext
Raw Normal View History

2024-03-11 05:03:16 -04:00
!ifndef __WIN_RESTARTMANAGER__INC
!define __WIN_RESTARTMANAGER__INC 1
/**************************************************
WinBase.h
**************************************************/
!define /IfNDef RESTART_MAX_CMD_LINE 1024
!define /IfNDef RESTART_NO_CRASH 1
!define /IfNDef RESTART_NO_HANG 2
!define /IfNDef RESTART_NO_PATCH 4
!define /IfNDef RESTART_NO_REBOOT 8 ; Do not restart the process when the system is rebooted due to patch installations
!define /IfNDef RECOVERY_DEFAULT_PING_INTERVAL 5000
!define /IfNDef /math RECOVERY_MAX_PING_INTERVAL 5000 * 60
/**************************************************
RestartManager.h
**************************************************/
!define RM_SESSION_KEY_LEN 16
!define CCH_RM_SESSION_KEY 32
!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
!define RmUnknownApp 0
!define RmMainWindow 1
!define RmOtherWindow 2
!define RmService 3
!define RmExplorer 4
!define RmConsole 5
!define RmCritical 1000 ; Application is critical system process where a reboot is required to restart
!define RmForceShutdown 0x1 ; Force unresponsive applications and services to shut down after the timeout period
!define RmShutdownOnlyRegistered 0x10 ; Only shutdown apps if all apps registered for restart (RegisterApplicationRestart)
!define RmStatusUnknown 0
!define RmStatusRunning 1
!define RmStatusStopped 2 ; Application stopped by Restart Manager
!define RmStatusStoppedOther 4
!define RmStatusRestarted 8
!define RmStatusErrorOnStop 0x10
!define RmStatusErrorOnRestart 0x20
!define RmStatusShutdownMasked 0x40
!define RmStatusRestartMasked 0x80
!define RmRebootReasonNone 0
!define RmRebootReasonPermissionDenied 1
!define RmRebootReasonSessionMismatch 2
!define RmRebootReasonCriticalProcess 4
!define RmRebootReasonCriticalService 8
!define RmRebootReasonDetectedSelf 0x10
!define SYSSIZEOF_RM_UNIQUE_PROCESS 12
!define SYSSTRUCT_RM_UNIQUE_PROCESS (i,l)
!include LogicLib.nsh
!include Util.nsh
!macro RestartManager_StartSession outvarhandle
System::Call 'RSTRTMGR::RmStartSession(*i-1s, i0, w)i.s'
Pop ${outvarhandle}
${If} ${outvarhandle} <> 0
${OrIf} ${outvarhandle} == error
Pop ${outvarhandle}
Push ""
${EndIf}
Pop ${outvarhandle}
!macroend
!macro RestartManager_EndSession handle
System::Call 'RSTRTMGR::RmEndSession(i${handle})'
!macroend
!macro RestartManager_RegisterFile handle path
System::Call 'RSTRTMGR::RmRegisterResources(i${handle},i1,*ws,i0,p0,i0,p0)i.r0' "${path}"
!macroend
!macro RestartManager_Shutdown handle
System::Call 'RSTRTMGR::RmShutdown(i${handle}, i${RmForceShutdown}, p0)'
!macroend
!macro RestartManager_Restart handle
System::Call 'RSTRTMGR::RmRestart(i${handle}, i0, p0)'
!macroend
!macro RestartManager_ShutdownFile fullpath outvar_errcode
Push "${fullpath}"
!insertmacro CallArtificialFunction RestartManager_ShutdownFileImp
Pop ${outvar_errcode}
!macroend
!macro RestartManager_ShutdownFileImp
Exch $1
Push $0
System::Call 'RSTRTMGR::RmStartSession(*i-1s, i0, w)i.r0'
${If} $0 == error
Pop $0
StrCpy $0 1150
${Else}
System::Call 'RSTRTMGR::RmRegisterResources(isr1,i1,*wr1,i0,p0,i0,p0)i.r0'
${If} $0 = 0
System::Call 'RSTRTMGR::RmShutdown(ir1, i${RmForceShutdown}, p0)i.r0'
${EndIf}
System::Call 'RSTRTMGR::RmEndSession(ir1)'
${EndIf}
Exch
Pop $1
Exch $0
!macroend
!endif ;~ Include guard