@echo off
setlocal EnableExtensions EnableDelayedExpansion
title BLAMETHETUNER - Fix do driver do Tactrix no Windows 11

rem ==========================================================================
rem  Fix do driver J2534 do Tactrix (Openport 2.0) no Windows 11 - BLAMETHETUNER
rem  Explicado em https://blamethetuner.com/ferramentas/windows/
rem
rem  Remove do Windows a politica de Code Integrity abaixo, que pode impedir o
rem  driver do Openport 2.0 de carregar:
rem    1. tenta pelo CiTool.exe --remove-policy;
rem    2. se o CiTool falhar, monta a particao EFI numa letra livre, apaga o
rem       .cip da politica em \EFI\Microsoft\Boot\CiPolicies\Active e desmonta.
rem  Antes de apagar, guarda uma copia da politica em COPIA, para poder desfazer.
rem  Exige administrador e pede confirmacao antes de mexer em qualquer coisa.
rem  No fim, o Windows precisa reiniciar.
rem ==========================================================================

set "POLITICA={8F9CB695-5D48-48D6-A329-7202B44607E3}"
set "COPIA=%ProgramData%\BLAMETHETUNER\fix-tactrix"

rem -- 1. administrador -------------------------------------------------------
net session >nul 2>&1
if not "%errorlevel%"=="0" (
    echo.
    echo  [ERRO] Este fix precisa rodar como administrador.
    echo  Feche esta janela, clique com o botao direito no arquivo
    echo  e escolha "Executar como administrador".
    echo.
    pause
    exit /b 1
)

rem -- 2. o aviso e a confirmacao ---------------------------------------------
echo.
echo  ==================================================================
echo   Fix do driver J2534 do Tactrix - Openport 2.0 - no Windows 11
echo   BLAMETHETUNER - blamethetuner.com/ferramentas/windows
echo  ==================================================================
echo.
echo  Este fix REMOVE do Windows a politica de Code Integrity
echo  %POLITICA%,
echo  uma protecao da Microsoft que decide quais drivers podem carregar.
echo  Sem ela, o Windows deixa de barrar os drivers que ela barrava,
echo  nao so o do Tactrix.
echo.
echo  Use so se o driver do Tactrix nao funciona neste computador.
echo  No fim, o Windows precisa reiniciar.
echo.
choice /C SN /M " Remover a politica agora"
if errorlevel 2 (
    echo.
    echo  Nada foi alterado.
    echo.
    pause
    exit /b 0
)

if not exist "%COPIA%" mkdir "%COPIA%" >nul 2>&1
set "SISTEMA=%SystemRoot%\System32\CodeIntegrity\CiPolicies\Active\%POLITICA%.cip"
if exist "%SISTEMA%" copy /y "%SISTEMA%" "%COPIA%\%POLITICA%.cip" >nul 2>&1

rem -- 3. pelo CiTool ---------------------------------------------------------
echo.
echo  [1/2] Removendo a politica pelo CiTool...
CiTool.exe --remove-policy "%POLITICA%"
rem (o CiTool devolve codigo negativo quando falha: por isso "equ 0", e nao "if errorlevel")
if %errorlevel% equ 0 (
    echo.
    echo  [OK] Politica removida pelo CiTool.
    goto reiniciar
)
echo.
echo  [AVISO] O CiTool nao removeu a politica. Tentando pela particao EFI...

rem -- 4. pela particao EFI, numa letra livre -----------------------------------
echo.
echo  [2/2] Montando a particao EFI...
set "LETRA="
for %%L in (S T U V W X Y Z R Q P O N M) do (
    if not defined LETRA if not exist "%%L:\" (
        mountvol %%L: /s >nul 2>&1
        if !errorlevel! equ 0 set "LETRA=%%L"
    )
)
if not defined LETRA (
    echo.
    echo  [ERRO] Nao foi possivel montar a particao EFI. Nada foi alterado.
    echo  Mande uma foto desta janela para o suporte da BLAMETHETUNER.
    echo.
    pause
    exit /b 1
)

set "CIP=%LETRA%:\EFI\Microsoft\Boot\CiPolicies\Active\%POLITICA%.cip"
set "RESULTADO=apagado"
if exist "%CIP%" (
    copy /y "%CIP%" "%COPIA%\%POLITICA%-efi.cip" >nul 2>&1
    del /f /q "%CIP%" >nul 2>&1
    if exist "%CIP%" set "RESULTADO=erro"
) else (
    set "RESULTADO=ausente"
)
mountvol %LETRA%: /d >nul 2>&1

if "%RESULTADO%"=="erro" (
    echo.
    echo  [ERRO] Nao foi possivel apagar o arquivo da politica.
    echo  Mande uma foto desta janela para o suporte da BLAMETHETUNER.
    echo.
    pause
    exit /b 1
)
if "%RESULTADO%"=="ausente" (
    echo.
    echo  [INFO] A politica nao esta ativa neste computador: nao havia nada para remover.
    echo  O problema do driver deve ser outro. Fale com o suporte da BLAMETHETUNER.
    echo.
    pause
    exit /b 0
)
echo  [OK] Arquivo da politica apagado da particao EFI.

rem -- 5. reiniciar -----------------------------------------------------------
:reiniciar
echo.
echo  ==================================================================
echo   Pronto. O Windows precisa REINICIAR para a mudanca valer.
echo  ==================================================================
if exist "%COPIA%\*.cip" echo  Copia da politica guardada em %COPIA%
echo.
choice /C SN /M " Reiniciar agora"
if errorlevel 2 (
    echo.
    echo  Reinicie quando puder: o driver so funciona depois do reinicio.
) else (
    shutdown /r /t 10 /c "BLAMETHETUNER: reiniciando para concluir o fix do driver do Tactrix."
    echo.
    echo  Reiniciando em 10 segundos...
)
echo.
pause
endlocal
