
@echo off
REM Created by MVP v2.1.1.5
REM Please replace DriverProvider, DriverCategory, DriverItemType variables with exact names
SET DriverModule=INTEL Storage Generic Driver
title Installing %DriverModule%
SET OSDST=%~d0
if not exist %~d0\OEM\Preload\Command\POP*.ini set OSDST=C:
if not exist %OSDST%\OEM\AcerLogs md %OSDST%\OEM\AcerLogs
SET LogPath=%OSDST%\OEM\AcerLogs\DriverInstallation.log
ECHO.>>%LogPath%
ECHO Installing, please wait...
SETLOCAL ENABLEDELAYEDEXPANSION
pushd "%~dp0"

ECHO %DATE% %TIME%[Log START]  ============ %~dpnx0 ============ >> %LogPath%


SET OSEnv=Online
ECHO %DATE% %TIME%[Log TRACE]  reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\WinPE" >>%LogPath% 2>&1
reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\WinPE" >>%LogPath% 2>&1
ECHO.>>%LogPath%
if !errorlevel! equ 0 (
	ECHO !DATE! !TIME![Log TRACE]  Running in the WinPE, SET OSEnv=Offline >>%LogPath%
	SET OSEnv=Offline
	ECHO !DATE! !TIME![Log TRACE]  call :CheckingHWID for Offline >>%LogPath% 2>&1
	call :CheckingHWID >>%LogPath% 2>&1	
	ECHO !DATE! !TIME![Log TRACE]  Getting return code is !ExitCode! >>%LogPath% 2>&1
	if !ExitCode! neq 9 (
		ECHO !DATE! !TIME![Log TRACE]  Driver HWID not matched with Device. goto :END >>%LogPath% 2>&1
		goto :END
	) else ( ECHO !DATE! !TIME![Log TRACE]  Driver HWID is matched with Device, contiune. >>%LogPath% 2>&1 )
) else if /i "%SystemDrive%" neq "%OSDST%" (
	ECHO !DATE! !TIME![Log TRACE]  Running in the Offline, SET OSEnv=Offline >>%LogPath%
	SET OSEnv=Offline
	ECHO !DATE! !TIME![Log TRACE]  call :CheckingHWID for Offline >>%LogPath% 2>&1
	call :CheckingHWID >>%LogPath% 2>&1
	ECHO !DATE! !TIME![Log TRACE]  Getting return code is !ExitCode! >>%LogPath% 2>&1
	if !ExitCode! neq 9 (
		ECHO !DATE! !TIME![Log TRACE]  Driver HWID not matched with Device. goto :END >>%LogPath% 2>&1
		goto :END
	) else ( ECHO !DATE! !TIME![Log TRACE]  Driver HWID is matched with Device, contiune. >>%LogPath% 2>&1 )
) else (
	ECHO !DATE! !TIME![Log TRACE]  This is Online installation. >>%LogPath% 2>&1
)

if exist %OSDST%\OEM\Preload\Command\POP*.ini ECHO [%DriverModule%]>> %OSDST%\OEM\Preload\OEMINFLIST.ini
for /f "tokens=*" %%v in (InfFiles.txt) do (
	if /i "%OSEnv%" equ "Offline" (
		ECHO !DATE! !TIME![Log TRACE]  DISM /image:%OSDST%\ /add-driver /driver:"%%v" >> %LogPath%
		DISM /image:%OSDST%\ /add-driver /driver:"%%v" >> %LogPath% 2>&1
    ) else (
		ECHO !DATE! !TIME![Log TRACE]  pnputil /add-driver "%%v" /install >> %LogPath%
		pnputil /add-driver "%%v" /install >> %LogPath% 2>&1
		ECHO !DATE! !TIME![Log TRACE]  pnputil -i -a "%%v" >> %LogPath%
		pnputil -i -a "%%v" >> %LogPath% 2>&1
	)
    ECHO.>>%LogPath%

    for /f "skip=1 tokens=2 delims=,;" %%s in ('find /i "DriverVer" "%%v"') do (
        if exist %OSDST%\OEM\Preload\Command\POP*.ini ECHO %%~nxv=%%s>> %OSDST%\OEM\Preload\OEMINFLIST.ini
    )
)
if exist %OSDST%\OEM\Preload\Command\POP*.ini ECHO.>> %OSDST%\OEM\Preload\OEMINFLIST.ini

:END
ECHO %DATE% %TIME%[Log Leave]  ============ %~dpnx0 ============ >> %LogPath%
ECHO.>>%LogPath%

popd
SETLOCAL DISABLEDELAYEDEXPANSION
ECHO Install finished
exit /b 0


:CheckingHWID
for /f "delims=" %%D in ('powershell get-date -format "{yyyyMMddHHmmss}"') do SET CurrentDateTime=%%D
ECHO %DATE% %TIME%[Log TRACE]  dir /b *.enc
for /f "tokens=1 delims=." %%F in ('dir /b *.enc') do set DRVDir=!CurrentDateTime!_%%F

ECHO %DATE% %TIME%[Log TRACE]  pnputil /enum-devices /deviceids
pnputil /enum-devices /deviceids >Pnputil_deviceids_WinPE.txt
if %errorlevel% neq 0 (
	ECHO %DATE% %TIME%[Log TRACE]  pnputil /enum-devices /deviceids return [%errorlevel%], using pnputil /enum-devices /ids
	pnputil /enum-devices /ids >Pnputil_deviceids_WinPE.txt
)

ECHO %DATE% %TIME%[Log TRACE]  copy /y Pnputil_deviceids_WinPE.txt C:\OEM\Acerlogs\Pnputil_deviceids_WinPE_%DRVDir%.txt
copy /y Pnputil_deviceids_WinPE.txt C:\OEM\Acerlogs\Pnputil_deviceids_WinPE_%DRVDir%.txt

ECHO %DATE% %TIME%[Log TRACE]  powershell.exe -noprofile -executionpolicy bypass -command ".\CheckMatchedHWID.ps1; exit $LASTEXITCODE"
powershell.exe -noprofile -executionpolicy bypass -command ".\CheckMatchedHWID.ps1; exit $LASTEXITCODE"
SET ExitCode=!errorlevel!
exit /b %ExitCode%