特定のアプリケーション宛てのパケットをFirewallがフィルタリングしないようにしたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
MoNoQLoREATOR
記事: 284
登録日時: 13年前
住所: 東京

特定のアプリケーション宛てのパケットをFirewallがフィルタリングしないようにしたい

#1

投稿記事 by MoNoQLoREATOR » 8年前

パケットがWindows Firewallによって阻まれ、受け取ることができずに困っています。
Firewallの設定をユーザーに手動で行ってもらうのは手間なので、プログラム側から自動的に設定するようにしたいです。

Microsoftさんが公開しているサンプルプログラムを実行してみたのですが、設定は追加されませんでした。
通常ユーザーで実行するとaccess deniedと言われたので管理者として実行してみたところ処理が成功したと表示されたにも関わらず、Windowsファイアウォール経由の通信を許可するアプリ一覧には追加されていませんでした。

そもそもこのサンプルプログラムは私が求めている動作を実現するプログラムではないということでしょうか?

Windowsファイアウォール経由の通信を許可するアプリ一覧に特定のアプリケーションを追加するにはどうすればよいのでしょうか?

よろしくお願いいたします。


ちなみにマルチポストです。
https://teratail.com/questions/29554

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 特定のアプリケーション宛てのパケットをFirewallがフィルタリングしないようにしたい

#2

投稿記事 by みけCAT » 8年前

マルチポストをする場合は、相互リンクが必要です。
フォーラムルール さんが書きました:相互リンクした場合のみ複数の掲示板で同じ質問してもOK
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

sleep

Re: 特定のアプリケーション宛てのパケットをFirewallがフィルタリングしないようにしたい

#3

投稿記事 by sleep » 8年前

MoNoQLoREATOR さんが書きました: Firewallの設定をユーザーに手動で行ってもらうのは手間なので、プログラム側から自動的に設定するようにしたいです。
ゲーム開発者向け Windows ファイアウォール
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;
}
プログラム実行後、追加に成功した場合 「許可されたアプリおよび機能(A):」の上から7行目あたりに「C:\WINDOWS\system32\notepad.exe」が追加されているはずです。

アバター
MoNoQLoREATOR
記事: 284
登録日時: 13年前
住所: 東京

Re: 特定のアプリケーション宛てのパケットをFirewallがフィルタリングしないようにしたい

#4

投稿記事 by MoNoQLoREATOR » 8年前

みけCAT さんが書きました:マルチポストをする場合は、相互リンクが必要です。
フォーラムルール さんが書きました:相互リンクした場合のみ複数の掲示板で同じ質問してもOK
これは失礼いたしました。対応いたしました。

アバター
MoNoQLoREATOR
記事: 284
登録日時: 13年前
住所: 東京

Re: 特定のアプリケーション宛てのパケットをFirewallがフィルタリングしないようにしたい

#5

投稿記事 by MoNoQLoREATOR » 8年前

sleep さんが書きました:
MoNoQLoREATOR さんが書きました: Firewallの設定をユーザーに手動で行ってもらうのは手間なので、プログラム側から自動的に設定するようにしたいです。
ゲーム開発者向け Windows ファイアウォール
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;
}
プログラム実行後、追加に成功した場合 「許可されたアプリおよび機能(A):」の上から7行目あたりに「C:\WINDOWS\system32\notepad.exe」が追加されているはずです。

ご返信ありがとうございます。
実は今熱で寝込んでいるので検証は後日になります。少々お待ちください。

アバター
MoNoQLoREATOR
記事: 284
登録日時: 13年前
住所: 東京

Re: 特定のアプリケーション宛てのパケットをFirewallがフィルタリングしないようにしたい

#6

投稿記事 by MoNoQLoREATOR » 8年前

お待たせいたしました。
とりあえずWindowsFirewallInstallHelperをダウンロートしてみました。
どうやら自分でビルドするタイプのようなのでビルドしてみました。
するとdllファイルとlibファイルができあがりました。
libファイルを自分のプロジェクトに追加して、提示していただいたコードをコンパイルすることはできましたが、実行しようとするとdllがないため実行できないと言われてしまいました。
dllをexeファイルと同じ場所に配置して実行したところ正常に動作し、ファイアウォールの許可リストにアプリケーションが追加されました。無事パケットを受け取ることができました。
解決しました。ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る