ここから本文です

VC LANのリンクの監視をしたいのですが・・・・

d33********さん

2008/6/2617:29:39

VC LANのリンクの監視をしたいのですが・・・・

VC++6.0で開発されているアプリケーションに、LANのリンクの監視機能を実装したいと考えています。
実際には無線LANなのですが、これの接続が切れている場合、優先する通信経路を強制変更するようにしたいのです。

pingの不達で経路が切れたと判断できるのですが、できればOSが判断した結果(インジケータで接続できている/できないを表示しているもの)を使いたいのです。

参考となるコードガ出ているページや命令・関数等を教えていただけないでしょうか。

閲覧数:
3,098
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

dov********さん

2008/6/3014:46:54

方法はいくつか考えられる。
但し、どれも使用するネットワークインタフェースを指定する必要がある。

----------

その1:IP Helper API を使用する。
(1) GetIfTable()でネットワークインタフェースの一覧を取得する。
(2) 一覧から、使用している無線LAN インタフェースの情報を探す。構造体MIB_IFROW の wszNameにインタフェース名が文字列で格納されている。
(3) 上で探した構造体MIB_IFROW のdwOperStatusに接続情報が格納されている。

参考:http://msdn.microsoft.com/en-us/library/aa365943(VS.85).aspx

備考:ターゲットOSや開発用のPlatform SDK(Windows SDK) のバージョンに注意。


その2:WMI の Win32_NetworkAdapter から情報を引き出す。
C++ で COMプログラミングする。詳細は面倒なので省略。

参考:Win32_NetworkAdapterの説明 http://msdn.microsoft.com/en-us/library/aa394216.aspx
参考:C++ で WMIを使うサンプル http://zatsugaku.info/index.php?Program%2FWmi

備考:ターゲットマシンに WMIが入っていないとNG。Win 2k、XPなら入ってそうだけど。
備考:ターゲットOSや開発用のPlatform SDK(Windows SDK) のバージョンに注意。


その3:WZC(Wireless Zero Config)か Native Wifi API あたりを調べる。
無線LAN 接続関連の APIなので、何か良い方法があるかもしれない。
(というか無線LAN 云々はTCP/IPより下の階層の話なので……)

参考:Wireless Zero Config http://msdn.microsoft.com/en-us/library/ms706593(VS.85).aspx
参考:Native Wifi API http://msdn.microsoft.com/en-us/library/ms706275(VS.85).aspx

備考:古いOS(98、Me、2000、XP SP1など)をサポートしたい場合は、多分使えない。


その4:DeviceIoControl()でNDISドライバを叩く。
Windows CEではよく使われていた方法、かもしれない。

参考:例えば http://d.hatena.ne.jp/machi_pon/20060623

備考:Windows PC(2000とかXPとか)でどこまでできるか不明。
備考:ドライバがNDISに対応していないとNGな気がする。
備考:というか WZC(Wireless Zero Config)が入っていると使えなかった記憶がある。

----------

以上、分からない点は上に出てきたキーワードググってみること(英語の情報も要チェック)。

その1、その2は、ワーカースレッドを作ってポーリングすることになる気がする。
その4は、Win CEならメッセージキューでデバイスの状態変化を非同期通知させることができるが、PCでは不明(できない気がする)。

質問した人からのコメント

2008/7/3 09:43:13

まだすべて試しきっているわけではないのですが・・・・
VC++のバージョンが古いと対応できないこともありそうですね。
ありがとうございました。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる