@echo off
setlocal

set "APP_LOG=C:\system.sav\logs\winhook.log"
set "HIVE_PATH=C:\Windows\System32\config\SOFTWARE"
set "REG_KEY_ROOT_OFFLINE=HKLM\SOFTWARETEMP"
set "REG_RELATIVE_PATH_OFFLINE=Microsoft\Windows\CurrentVersion\Run"
set "REG_V_T_D=[00000_WinHook/REG_SZ/C:\system.sav\Util\winhook\winhook.exe]"
set "isFail="

echo ========================================================== >> %APP_LOG%
echo [%time%] >> %APP_LOG%
echo  Add run key to registry for PASS 1 trigger winhook.exe >> %APP_LOG%
echo ========================================================== >> %APP_LOG%

:Install

ECHO reg.exe load %REG_KEY_ROOT_OFFLINE% "%HIVE_PATH%" >>%APP_LOG%
	 reg.exe load %REG_KEY_ROOT_OFFLINE% "%HIVE_PATH%" >>%APP_LOG%
if errorlevel 1 echo Failed to load the hive. >>%APP_LOG% & GOTO RESULTFAILED
set "REG_KEY_ROOT=%REG_KEY_ROOT_OFFLINE%"
set "REG_RELATIVE_PATH=%REG_RELATIVE_PATH_OFFLINE%"

echo REG_KEY_ROOT=[%REG_KEY_ROOT%] >> %APP_LOG%
echo REG_RELATIVE_PATH=[%REG_RELATIVE_PATH%] >> %APP_LOG%

call :SHOW_INFO
echo Import registry >>%APP_LOG%
for /F "tokens=1,2,3 delims=/[] " %%A IN ('echo %REG_V_T_D%') do (
	echo reg.exe add "%REG_KEY_ROOT%\%REG_RELATIVE_PATH%" /v "%%A" /t "%%B" /d "%%C" /f >>%APP_LOG% 2>&1
		 reg.exe add "%REG_KEY_ROOT%\%REG_RELATIVE_PATH%" /v "%%A" /t "%%B" /d "%%C" /f >>%APP_LOG% 2>&1
	IF ERRORLEVEL 1 echo Failed >>%APP_LOG% & set "isFail=1"
)

call :SHOW_INFO

:CLEANUP
call :UnloadTempHive
if errorlevel 1 set "isFail=1"

if defined isFail goto RESULTFAILED
GOTO RESULTPASSED

:UnloadTempHive
reg.exe query "%REG_KEY_ROOT_OFFLINE%" >nul 2>&1
IF NOT ERRORLEVEL 1 (
	ECHO reg.exe unload %REG_KEY_ROOT_OFFLINE% >>%APP_LOG%
		 reg.exe unload %REG_KEY_ROOT_OFFLINE%  >>%APP_LOG% 2>&1
	if errorlevel 1 echo Failed to unload the SOFTWARE hive. >>%APP_LOG% & exit /b 1
	ECHO Unload hive is successful >>%APP_LOG%
	exit /b 0
)
ECHO No need to unload hive >>%APP_LOG%
exit /b 0


:SHOW_INFO
echo --- Query reg START -------------------------------------------------------- >>%APP_LOG%
reg.exe query "%REG_KEY_ROOT%\%REG_RELATIVE_PATH%" >>%APP_LOG% 2>&1
echo --- Query reg END -------------------------------------------------------- >>%APP_LOG%
exit /b 0


:RESULTPASSED
ECHO [%TIME%] Result of the %APP_NAME% >> %APP_LOG%
ECHO RESULT=PASSED >> %APP_LOG%
GOTO END

:RESULTFAILED
ECHO [%TIME%] Result of the %APP_NAME% >> %APP_LOG%
ECHO RESULT=FAILED >> %APP_LOG%
ECHO ERRORLEVEL=%errorlevel% >> %APP_LOG%
GOTO END

:END
call :UnloadTempHive
ENDLOCAL
@ECHO ON