%%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a 
cls
@echo off
cls
:: 管理员权限
NET SESSION >nul 2>&1
if %errorLevel% neq 0 (
    powershell -Command "Start-Process '%~sdpnx0' -Verb RunAs"
    exit /b
)

setlocal enabledelayedexpansion
set "RULE_NAME=Reboot Restore Rx Pro"

echo 配置防火墙规则：%RULE_NAME%
echo.

:: 首先尝试修改现有规则
netsh advfirewall firewall set rule name="%RULE_NAME%" new action=block enable=yes 2>nul
if %errorLevel% neq 0 (
    echo 规则不存在，创建新规则...
    echo.
    
    :: 从注册表读取Shield安装路径
    set "PROGRAM_PATH="
    set "REG_PATH="
    set "DEFAULT_PATH=%ProgramFiles%\Shield\ShdServ.exe"
    
    :: 首先尝试64位注册表
    for /f "tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Shield" /v "InstallDir" 2^>nul') do (
        set "REG_PATH=%%B"
    )
    
    :: 如果没找到，尝试32位注册表（Wow6432Node）
    if "!REG_PATH!"=="" (
        for /f "tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Wow6432Node\Shield" /v "InstallDir" 2^>nul') do (
            set "REG_PATH=%%B"
        )
    )
    
    :: 如果从注册表获取到路径，则使用该路径
    if not "!REG_PATH!"=="" (
        :: 清理路径，去除引号
        set "REG_PATH=!REG_PATH:"=!"
        :: 去除两端的空格
        for /f "tokens=*" %%a in ("!REG_PATH!") do set "REG_PATH=%%a"
        
        :: 构建完整路径
        if not "!REG_PATH:~-1!"=="\" (
            set "PROGRAM_PATH=!REG_PATH!\ShdServ.exe"
        ) else (
            set "PROGRAM_PATH=!REG_PATH!ShdServ.exe"
        )
        
        echo 从注册表读取到安装路径：!REG_PATH!
        echo 程序路径：!PROGRAM_PATH!
        
        :: 验证文件是否存在
        if not exist "!PROGRAM_PATH!" (
            echo 警告：注册表路径中的文件不存在，使用默认路径
            set "PROGRAM_PATH=%ProgramFiles%\Shield\ShdServ.exe"
        )
    ) else (
        set "PROGRAM_PATH=!DEFAULT_PATH!"
        echo 未找到注册表路径，使用默认路径
    )
    
    echo 正在创建规则，程序路径：!PROGRAM_PATH!
    echo.
    
    :: 创建新规则
    netsh advfirewall firewall add rule name="%RULE_NAME%" dir=out action=block program="!PROGRAM_PATH!" enable=yes
    if !errorLevel! neq 0 (
        echo 错误：无法创建防火墙规则
        echo 请检查程序路径和权限
        timeout /t 5 /nobreak >nul
        exit /b 1
    )
    
    echo 规则创建成功！
) else (
    echo 更新现有规则成功！
)

echo.
echo ***规则验证***
echo.

:: 显示规则详细信息
netsh advfirewall firewall show rule name="%RULE_NAME%"

if %errorLevel% equ 0 (
    echo.
    echo 操作已完成！
    timeout /t 3 /nobreak >nul
) else (
    echo 错误：规则验证失败
    timeout /t 5 /nobreak >nul
    exit /b 1
)