@ECHO OFF
pushd "%~dp0"

set "APP_NAME=Generate DMIFIT data"
set "APP_LOG=c:\system.sav\logs\bb\%~n0.log"
set "APP_LOG_WD=c:\system.sav\logs\DMIFIT"
if not exist "%APP_LOG_WD%" mkdir "%APP_LOG_WD%"


echo. >>%APP_LOG%
echo. >>%APP_LOG%
echo. >>%APP_LOG%
echo ###################################################### >>%APP_LOG%
echo #                                                    # >>%APP_LOG%
echo # %APP_NAME% >>%APP_LOG%
echo #                                                    # >>%APP_LOG%
echo ###################################################### >>%APP_LOG%
echo. >>%APP_LOG%

set "ESP_GPTTYPE={c12a7328-f81f-11d2-ba4b-00a0c93ec93b}"

set "CalebWMI=C:\system.sav\util\CalebWMI_%PROCESSOR_ARCHITECTURE%.exe"
if not exist "%CalebWMI%" echo %CalebWMI% lost... & exit /b 99

REM echo Wmi___c /namespace:\\root\Microsoft\Windows\Storage path MSFT_Partition >>%APP_LOG%
echo %CalebWMI% /namespace:root\Microsoft\Windows\Storage /WQL:"select * from path MSFT_Partition" >>%APP_LOG%
     %CalebWMI% /namespace:root\Microsoft\Windows\Storage /WQL:"select * from path MSFT_Partition" > "%temp%\%~n0_temp.log" 2>&1
type "%temp%\%~n0_temp.log" >>%APP_LOG%

set "TEMP_ESP_ENTRY=C:\System.sav\LOGS\DMIFIT\ESP"
set BIOSINFO=%APP_LOG_WD%\dip.efi

set "bcu_util=C:\System.sav\Util\BCU\BiosConfigUtility_x64.exe"
if not exist "%bcu_util%" echo ERROR: %bcu_util% not found >>%APP_LOG% & goto RESULTFAILED
echo "%bcu_util%" /getconfig:"%BIOSINFO%" /verbose >>%APP_LOG%
     "%bcu_util%" /getconfig:"%BIOSINFO%" /verbose >>%APP_LOG% 2>&1
if errorlevel 1 echo Failed...  >>%APP_LOG% & goto RESULTFAILED

set DMIFIT_name=
set DMIFIT_pass=
for /F "tokens=1,* delims==" %%A IN ('find /I "name=" "%~dpn0.ini"') do if /I "[%%~A]"=="[name]" set DMIFIT_name=%%~B
for /F "tokens=1,* delims==" %%A IN ('find /I "pass=" "%~dpn0.ini"') do if /I "[%%~A]"=="[pass]" set DMIFIT_pass=%%~B
if not defined DMIFIT_name echo Not found name in %~n0.ini >> %APP_LOG% & goto RESULTFAILED
if not defined DMIFIT_pass echo Not found pass in %~n0.ini >> %APP_LOG% & goto RESULTFAILED
echo del /f /q "%~dpn0.ini" >>%APP_LOG% 2>&1
     del /f /q "%~dpn0.ini" >>%APP_LOG% 2>&1

set "sevenzip_util=C:\SYSTEM.SAV\Util\PINLOG\7z\x64\7za.exe"
if not exist "%sevenzip_util%" echo ERROR: %sevenzip_util% not found >>%APP_LOG% & goto RESULTFAILED

call :ESP_MOUNT >>%APP_LOG% 2>&1
if errorlevel 1 goto RESULTFAILED
:MountESP_END

if not exist "%ESP_DrivLtr%\EFI\HP" mkdir "%ESP_DrivLtr%\EFI\HP"
if exist %ESP_DrivLtr%\EFI\HP\%DMIFIT_name% del /f /q %ESP_DrivLtr%\EFI\HP\%DMIFIT_name%
echo "%sevenzip_util%" a -tzip %ESP_DrivLtr%\EFI\HP\%DMIFIT_name% "%BIOSINFO%" -pxxxxxxxxxxxxx >>%APP_LOG% 2>&1
     "%sevenzip_util%" a -tzip %ESP_DrivLtr%\EFI\HP\%DMIFIT_name% "%BIOSINFO%" -p%DMIFIT_pass% >>%APP_LOG% 2>&1
if errorlevel 1 echo Failed... >>%APP_LOG% & goto RESULTFAILED

call :ESP_UNMOUNT >>%APP_LOG% 2>&1
if errorlevel 1 goto RESULTFAILED
:UnmountESP_END

if exist "%~dpn0.ini" echo Failed to delete %~n0.ini >>%APP_LOG% & goto RESULTFAILED

goto RESULTPASSED

REM ------------------- Script exit ------------------------

: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%
call :ESP_UNMOUNT
GOTO END


:ESP_MOUNT
if exist "%TEMP_ESP_ENTRY%\EFI" echo ESP was already mounted as %TEMP_ESP_ENTRY% & exit /b 99
if not exist "%TEMP_ESP_ENTRY%" mkdir "%TEMP_ESP_ENTRY%"
REM echo Wmi___c /namespace:\\root\Microsoft\Windows\Storage path MSFT_Partition where GptType^="%ESP_GPTTYPE%" call AddAccessPath %TEMP_ESP_ENTRY%
echo %CalebWMI% /namespace:root\Microsoft\Windows\Storage /WQL:"select * from MSFT_Partition where GptType='%ESP_GPTTYPE%'" /call:AddAccessPath /args:"%TEMP_ESP_ENTRY%"
     %CalebWMI% /namespace:root\Microsoft\Windows\Storage /WQL:"select * from MSFT_Partition where GptType='%ESP_GPTTYPE%'" /call:AddAccessPath /args:"%TEMP_ESP_ENTRY%" > "%temp%\%~n0_temp.log" 2>&1
type "%temp%\%~n0_temp.log"
REM find /I "[out] uint32 ReturnValue = 0;" "%temp%\%~n0_temp.log"
find /I "ReturnValue=0" "%temp%\%~n0_temp.log"
if not errorlevel 1 set "ESP_DrivLtr=%TEMP_ESP_ENTRY%" & exit /b 0
exit /b

:ESP_UNMOUNT
if not exist "%TEMP_ESP_ENTRY%\EFI" echo ESP was already unmounted from %TEMP_ESP_ENTRY% & exit /b 99
REM echo Wmi___c /namespace:\\root\Microsoft\Windows\Storage path MSFT_Partition where GptType^="%ESP_GPTTYPE%" call RemoveAccessPath %TEMP_ESP_ENTRY%
echo %CalebWMI% /namespace:root\Microsoft\Windows\Storage /WQL:"select * from MSFT_Partition where GptType='%ESP_GPTTYPE%'" /call:RemoveAccessPath /args:"%TEMP_ESP_ENTRY%"
     %CalebWMI% /namespace:root\Microsoft\Windows\Storage /WQL:"select * from MSFT_Partition where GptType='%ESP_GPTTYPE%'" /call:RemoveAccessPath /args:"%TEMP_ESP_ENTRY%" > "%temp%\%~n0_temp.log" 2>&1
type "%temp%\%~n0_temp.log"
REM find /I "[out] uint32 ReturnValue = 0;" "%temp%\%~n0_temp.log"
find /I "ReturnValue=0" "%temp%\%~n0_temp.log"
if not errorlevel 1 set "ESP_DrivLtr=" & exit /b 0
exit /b

:END
@ECHO ON
popd
