Контекстное меню брандмауэра - PullRequest
0 голосов
/ 06 сентября 2018

Цель

Мне нужно добавить Block Firewall Context Menu Для .exe Файлов.


Источники

Блокировка .EXE в брандмауэре Windows с контекстным меню ( Модифицировано для моего использования )

Windows 10 | регедит | Команда оболочки exefile (правило добавления брандмауэра) - не работает ( Нет ответов )


код

Reg Add "HKEY_CLASSES_ROOT\exefile\Shell\Firewall\Command" /T Reg_SZ /D "Elevate.exe CMD.exe /Q /C For %%%%A In (\"%%1\") Do Netsh Advfirewall Firewall Add Rule Name=\"%%~nA\" Dir=Out Action=Block Program=\"%%1\""

Этот код прекрасно работает при использовании с filepath-that-doesnt-contain-space


Если filepath containing spaces, то просто выкинет эту ошибку . Для отладки я добавил & pause в конец предыдущего кода

выход

A specified value is not valid.

Usage: add rule name=<string>
     dir=in|out
     ..
Press any key to continue. . .

дважды

A specified value is not valid.

Usage: add rule name=<string>
     dir=in|out
     ..
Press any key to continue. . .

Я не уверен, почему он запускал код дважды . Одна теория, которую я мог бы выдвинуть, заключается в том, что, возможно, она пытается добавить folder with spaces in path as filename, а также filename к netsh?


Во время отладки с использованием Echo я обнаружил, что он не имеет "" внутри Netsh Rule Name="" и Program="", который, я думаю, требуется, если path or filename has spaces в нем. Я полагаю, что "Qoutes", которые отсутствуют, вероятно, являются причиной этой проблемы.

Я также пытался экранировать и добавлять двойные кавычки . Все еще не работает.

Reg Add "HKEY_CLASSES_ROOT\exefile\Shell\Firewall\Command" /T Reg_SZ /D "Elevate.exe CMD.exe /Q /C For %%%%A In (\"\"%%1\"\") Do Netsh Advfirewall Firewall Add Rule Name=\"\"%%~nA\"\" Dir=Out Action=Block Program=\"\"%%1\"\""

Надеюсь, мы сможем понять это вместе, как команда. Я буду редактировать и обновлять ФП для получения дополнительных разъяснений или обновлений, если это необходимо. Спасибо @micheal_heath за ответ.

1 Ответ

0 голосов
/ 07 сентября 2018
Reg Add "HKLM\Software\Classes\exefile\shell\Firewall\command"^
 /T REG_SZ^
 /D "Elevate.exe CMD.exe /Q /C For %%%%A In (\\\"%%1\\\") Do Netsh Advfirewall Firewall Add Rule Name=\\\"%%~nA\\\" Dir=Out Action=Block Program=\\\"%%1\\\""^
 /F

Используя elevate , вам может потребоваться экранировать двойные кавычки. Это сделано из C, который использует argv для обработки аргументов точно так же, как reg использует для разбора аргументов.

reg удаляет \ из \", поэтому " сохраняется. Проблема в том, что выполнение elevate с ", это не сбежал с \, удаляет ". Таким образом, пути с пробелами теперь не имеют внешних ", чтобы хранить их от раскола.

Решите это, добавив еще \, предшествующий \". Если использовать только один \, чтобы стать \\", избегает следующих \ и поэтому " удаляется. Поэтому добавьте еще 1025 *, чтобы стать \\\" чтобы избежать \ и ", чтобы \ сохраняется и " сохраняется.

То есть reg разбора \\\", elevate разбора \" и cmd разбора ".

Вставлено в реестр выглядит так:

Elevate.exe CMD.exe /Q /C For %%A In (\"%1\") Do Netsh Advfirewall Firewall Add Rule Name=\"%~nA\" Dir=Out Action=Block Program=\"%1\"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...