パケットがWindows Firewallによって阻まれ、受け取ることができずに困っています。
Firewallの設定をユーザーに手動で行ってもらうのは手間なので、プログラム側から自動的に設定するようにしたいです。
Microsoftさんが公開しているサンプルプログラムを実行してみたのですが、設定は追加されませんでした。
通常ユーザーで実行するとaccess deniedと言われたので管理者として実行してみたところ処理が成功したと表示されたにも関わらず、Windowsファイアウォール経由の通信を許可するアプリ一覧には追加されていませんでした。
そもそもこのサンプルプログラムは私が求めている動作を実現するプログラムではないということでしょうか?
Windowsファイアウォール経由の通信を許可するアプリ一覧に特定のアプリケーションを追加するにはどうすればよいのでしょうか?
よろしくお願いいたします。
ちなみにマルチポストです。
https://teratail.com/questions/29554
特定のアプリケーション宛てのパケットをFirewallがフィルタリングしないようにしたい
Re: 特定のアプリケーション宛てのパケットをFirewallがフィルタリングしないようにしたい
マルチポストをする場合は、相互リンクが必要です。
フォーラムルール さんが書きました:相互リンクした場合のみ複数の掲示板で同じ質問してもOK
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 特定のアプリケーション宛てのパケットをFirewallがフィルタリングしないようにしたい
ゲーム開発者向け Windows ファイアウォールMoNoQLoREATOR さんが書きました: Firewallの設定をユーザーに手動で行ってもらうのは手間なので、プログラム側から自動的に設定するようにしたいです。
Windows Firewall Install Helper
追加例(sampleプログラムから追加箇所を抜粋)※実行環境:Windows10
#define _WIN32_DCOM
#include <windows.h>
#include <rpcsal.h>
#include <gameux.h>
#include <strsafe.h>
#include <shlobj.h>
#include <wbemidl.h>
#include <objbase.h>
#include "FirewallInstallHelper.h"
#pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
int PASCAL WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR strCmdLine, _In_ int nCmdShow )
{
bool bFailure = false;
WCHAR strBinPath[MAX_PATH];
WCHAR szMsg[MAX_PATH];
HRESULT hr;
WCHAR strSystem[MAX_PATH];
GetSystemDirectory(strSystem, MAX_PATH);
StringCchPrintf(strBinPath, MAX_PATH, L"%s\\notepad.exe", strSystem);
bFailure = false;
hr = AddApplicationToExceptionList(strBinPath, strBinPath); // Typically the 2nd arg is a friendly name like "Solitare"
if (FAILED(hr))
{
StringCchPrintf(szMsg, 256, L"Adding game failed: 0x%0.8x", hr);
MessageBox(NULL, szMsg, TEXT("AddApplicationToExceptionList"), MB_OK | MB_ICONINFORMATION);
bFailure = true;
}
if (!bFailure)
{
StringCchPrintf(szMsg, 256, L"Adding game succeeded");
MessageBox(NULL, szMsg, TEXT("AddApplicationToExceptionList"), MB_OK | MB_ICONINFORMATION);
}
return 0;
}
- MoNoQLoREATOR
- 記事: 284
- 登録日時: 13年前
- 住所: 東京
Re: 特定のアプリケーション宛てのパケットをFirewallがフィルタリングしないようにしたい
これは失礼いたしました。対応いたしました。みけCAT さんが書きました:マルチポストをする場合は、相互リンクが必要です。
フォーラムルール さんが書きました:相互リンクした場合のみ複数の掲示板で同じ質問してもOK
- MoNoQLoREATOR
- 記事: 284
- 登録日時: 13年前
- 住所: 東京
Re: 特定のアプリケーション宛てのパケットをFirewallがフィルタリングしないようにしたい
sleep さんが書きました:ゲーム開発者向け Windows ファイアウォールMoNoQLoREATOR さんが書きました: Firewallの設定をユーザーに手動で行ってもらうのは手間なので、プログラム側から自動的に設定するようにしたいです。
Windows Firewall Install Helper
追加例(sampleプログラムから追加箇所を抜粋)※実行環境:Windows10プログラム実行後、追加に成功した場合 「許可されたアプリおよび機能(A):」の上から7行目あたりに「C:\WINDOWS\system32\notepad.exe」が追加されているはずです。#define _WIN32_DCOM #include <windows.h> #include <rpcsal.h> #include <gameux.h> #include <strsafe.h> #include <shlobj.h> #include <wbemidl.h> #include <objbase.h> #include "FirewallInstallHelper.h" #pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") int PASCAL WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR strCmdLine, _In_ int nCmdShow ) { bool bFailure = false; WCHAR strBinPath[MAX_PATH]; WCHAR szMsg[MAX_PATH]; HRESULT hr; WCHAR strSystem[MAX_PATH]; GetSystemDirectory(strSystem, MAX_PATH); StringCchPrintf(strBinPath, MAX_PATH, L"%s\\notepad.exe", strSystem); bFailure = false; hr = AddApplicationToExceptionList(strBinPath, strBinPath); // Typically the 2nd arg is a friendly name like "Solitare" if (FAILED(hr)) { StringCchPrintf(szMsg, 256, L"Adding game failed: 0x%0.8x", hr); MessageBox(NULL, szMsg, TEXT("AddApplicationToExceptionList"), MB_OK | MB_ICONINFORMATION); bFailure = true; } if (!bFailure) { StringCchPrintf(szMsg, 256, L"Adding game succeeded"); MessageBox(NULL, szMsg, TEXT("AddApplicationToExceptionList"), MB_OK | MB_ICONINFORMATION); } return 0; }
ご返信ありがとうございます。
実は今熱で寝込んでいるので検証は後日になります。少々お待ちください。
- MoNoQLoREATOR
- 記事: 284
- 登録日時: 13年前
- 住所: 東京
Re: 特定のアプリケーション宛てのパケットをFirewallがフィルタリングしないようにしたい
お待たせいたしました。
とりあえずWindowsFirewallInstallHelperをダウンロートしてみました。
どうやら自分でビルドするタイプのようなのでビルドしてみました。
するとdllファイルとlibファイルができあがりました。
libファイルを自分のプロジェクトに追加して、提示していただいたコードをコンパイルすることはできましたが、実行しようとするとdllがないため実行できないと言われてしまいました。
dllをexeファイルと同じ場所に配置して実行したところ正常に動作し、ファイアウォールの許可リストにアプリケーションが追加されました。無事パケットを受け取ることができました。
解決しました。ありがとうございました。
とりあえずWindowsFirewallInstallHelperをダウンロートしてみました。
どうやら自分でビルドするタイプのようなのでビルドしてみました。
するとdllファイルとlibファイルができあがりました。
libファイルを自分のプロジェクトに追加して、提示していただいたコードをコンパイルすることはできましたが、実行しようとするとdllがないため実行できないと言われてしまいました。
dllをexeファイルと同じ場所に配置して実行したところ正常に動作し、ファイアウォールの許可リストにアプリケーションが追加されました。無事パケットを受け取ることができました。
解決しました。ありがとうございました。