Windowsファイアウォールに自分のアプリを例外登録したいのですが
どう実現したら良いでしょうか?
INetFwAuthorizedApplication APIというのを使えばできそうなのですが、
使い方がわかりません。Netfw.hをインクルードするらしいのですが、
そのようなファイルは無いと怒られてしまいます。
INetFwAuthorizedApplication APIの使い方をご存知の方がいらっしゃ
いましたらご教授ください。
http://www.networkworld.jp/network/-/44103.html
ここのページの最後に、該当する?ことが書かれていました。
参考までに
以上。
すみません。説明不足でした。
Windows Vista Home Basicエディションのファイアウォールに
例外登録したいのですが、netshコマンドは管理者権限でコマンド
を立ち上げないと反映されないみたいです。バッチファイルを作って
add allowedprogram で登録しようとしたのですがだめでした。
(XPではうまくいきましたが・・)
オショウさんに言われたページを見させていただいたのですが、
netfw.infはVistaには存在していなくて編集が不可能でした。
仮に存在していたとしてもresetコマンドで反映しなければならない
のですが、これも管理者権限が必要と怒られてしまいました。
(こちらもXPでは可能でした。)
やはりAPIで実装するしかないように思えるのですが、
INetFwAuthorizedApplication APIの使い方がわかりません。
使い方をご存知の方、いっらっしゃいませんか?
Vistaですか・・・また難儀な
因みに間違いなくAPI使っても管理者権限のある状態で実行しない
ことにはエラーで返ってくることになります。
APIなら誰でもOKと言うわけではありません。
管理者権限の無い状態で実行したい!
と言うことだと思いますが、不可能だと思います。
以上。
オショウさんこんにちは。
管理者権限を取得すればできるということだと
思いますが、管理者権限を取得する方法なんて
ものはないと思ったほうが良いのでしょうか?
でも、別の通信系のアプリはどうやって例外に
登録しているのでしょうか?
インストール時にUACの許可を得て登録している
ようですが、その際に管理者の権限を借りる事
ができるのでしょうか?
よく分からなくなってきてしまってすいません。
管理者権限の無い状態では不可能という事でわか
りました。では、管理者権限を得る方法には、ど
のような場合があるのでしょうか?
まずいろいろなインストーラ等で管理者権限が無いユーザーで実行した
場合、管理者権限がありません。とエラーメッセージが出たり、若しく
は管理者権限のあるユーザーでログインしてインストールして下さい。
と制限があったりします。
要はログインしているユーザーに権限があれば、その権限下で動作する
プログラムには暗黙に権限が付与され、動作します。
無い場合は当然、エラーとなります。
偽装と言う手法もありますが結局管理者権限を取得する為には一般的に
Administrator相当のユーザーでパスワード認証を経て始めて偽装が可
能になります。
管理者権限が無いユーザーで、管理者のパスワードを知らないのに勝手
に偽装が可能になれば、何の為のセキュリティでしょうか?
尚、VistaはXPに比べその辺が強固になっている(厳密?)ので、簡単
に済ませたいならば、管理者権限でログインさせて動作させるしか無い
と思いますが。
如何でしょうか?
以上。
いまいち状況がつかめませんが、少なくとも
INetFwAuthorizedApplication は管理者権限が無ければ使えません
(というか管理者権限なしで実行されたら
悪意のあるソフトが例外に登録しまくってしまう^^;)
手元に XP も Vista もない(Vista に関する知識もほとんど無い)ので確認は出来ませんが
INetFwAuthorizedApplication に必要な情報を設定し
INetFwAuthorizedApplications に登録するという流れじゃないかと思う
管理者権限で実行したいのであれば
XP なら CredUIPromptForCredentials を使えば
認証画面を表示することが出来ます。
(Vista は権限が足りなければ勝手に呼び出されます)
が、当然 Administrator 権限をもつアカウント&パスワードが必要です。
もしその"別の通信系アプリ"が Administrator 権限なしで
例外に登録したというならこれとか
Using Windows Installer with UAC
http://msdn2.microsoft.com/en-us/library/aa372468.aspx
追記:
少なくとも私の PC(Windows 2000) にダウンロードしてある
(ちょっと古い)Platform SDK には "Netfw.h" が含まれているので
Platform SDK のバージョンアップすれば
INetFwAuthorizedApplication インターフェイスを使用できるのではと思われます。
manifest書いてアプリ起動時にUACで権限取得するとかは?
>manifest書いてアプリ起動時にUACで権限取得
アプリケーション本体に埋めると常にそのアプリケーションは昇格モードで
動く事になるので、昇格が必要な処理を別exeにまとめて、必要に応じて
呼び出す形を取るのが望ましいようです。
レスありがとうございます。すみません。
開発環境のことを書くのを忘れておりました。
VisualStudio6.0のSP6でした。
.NETでないのですが、manifestの埋め込みは可能ですか?
可能であれば書き方と埋め方を教えていただけないでしょうか?
manifestを書いた事がないので使い方を知りたいです。
Platform SDKをインストールして、INetFwAuthorizedApplications
を使って例外登録を試みてみました。XPではうまく行ったのですが、
Vistaだと(XPの場合の)正常に登録された処理が走るのですが、実際
には登録されていない。というnetshコマンドの時と同じ現象が起きました。
(netsh firewallの場合はOKと出るのですが、実際には登録されていない。
という現象。)
今度はVisual C++ 2005 Express Edition をインストールして、manifestの
埋め込みを試してみようと思います。
manifestを編集して、それをexeと同じ場所に置いて
実行したところ、UACのプロンプトが出てそこで権限
取得するし、例外登録ができました。でも、例外登録
は最初に1回だけすれば良く、毎回出てきてしまうのも
困りものです。これを解決する良い方法は無いでしょうか?
exeはなるべく1つでいきたいのですが、無理でしょうか?
EXE が1つでありさえすればいいなら、例外登録コードを DLL にする…というのはちょっと意地悪な回答だろうか。
#どうせ DLL にするなら COM オブジェクトにするべきだが。
Vista でもシールドアイコンがついてる操作を行う時はその場で昇格を行うけど、あれはその処理を別プロセスにしてるのかな?
実行中のプロセスを動的に昇格させることはできないっぽいし(一般ユーザから管理者への昇格は実は昇格じゃなくて、管理者でログインしてるのと同じだから)。
結局、他のファイルを作らずにexeファイル一つでいくのは
断念することにしました。INetFwAuthorizedApplicationsで
Addしている処理を別のexeファイルとして作り、それにマニ
フェストを埋め込んでおいて、本体から呼び出すことにしま
した。本体側ですでに例外登録されているかをチェックし、
例外登録されていなかったら、マニフェストを埋め込んだexe
を呼び出す。例外登録されていたら、本体側の処理を続ける。
これで行こうと思います。
ご教授いただいたみなさまありがとうございました。
ツイート | ![]() |