ホップ・ステップ・εミ(ο_ _)ο ドテッ

プログラミングの風景をちょいとぶつぶつ書きつづってみようというテスト

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  98  : 記事  1  : コメント  1220  : トラックバック  9

ニュース

ゆーち

Y.Uchiyama

 福岡県在住
 株式会社シーソフト
 代表取締役
 現役職人です(`^´)
 主にC++を使ってます
リアルマイミク募集中w
 (・∀・)Mixi
フォローよろしくw
 (・∀・)Twitter

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

ローカルのネットワークケーブル切断検出、接続検出するために、IpHelperAPI を使ってみました。
いろいろ試行錯誤の結果、次のような手順でできることがわかったので、メモしておきます。

1.Iphlpapi.dllを読み込む
 LoadLibrary( "Iphlpapi.dll" ) でおk
 GetInterfaceInfo と GetIfEntry を GetProcAddress() しておきます

 ここでは略しますが、あちきは IpHelperってなラッパークラスを用意しました。

2.GetInterfaceInfo でネットワークカードの情報を取得します。
 NIC の数だけ取得しますから、情報のサイズが不明ですので、最初に NULL 渡してサイズを取得してから取り込みます。
 こんな感じ。
  DWORD size = 0;
  DWORD rc = IpHelper->GetInterfaceInfo( NULL, &size );
  if( rc == ERROR_INSUFFICIENT_BUFFER ){
    IP_INTERFACE_INFO *IfTable = (IP_INTERFACE_INFO *)new char[ size ];
    IpHelper->GetInterfaceInfo( IfTable, &size );

 IfTable には、NIC の数と、IP_ADAPTER_INDEX_MAP 構造体の配列 Adapter[] が取り込まれます。カード1枚だと1個分です。
 この IP_ADAPTER_INDEX_MAP 構造体メンバの Index 値が重要です。
 先頭のIndexを取り出すには、
  ULONG index = IfTable->Adapter[ 0 ].Index を取得します。

3.インデックス指定のネットワークデバイスの情報を取得します。
 MIB_IFROW 構造体を用意し、そのメンバ dwIndex を取得した index にセットしてから GetIfEntry APIを呼び出します。
 こんなかんじ。
  MIB_IFROW IfRow;
  ::ZeroMemory( &IfRow, sizeof( IfRow ) );
  IfRow.dwIndex = (DWORD)index;
  DWORD rc = IpHelper->GetIfEntry( &IfRow );

 ネットワークの接続状態は、MIB_IFROW 構造体メンバの dwOperStatus 値を見ます。
 値が IF_OPER_STATUS_CONNECTED または IF_OPER_STATUS_OPERATIONAL であれば接続中状態です。

 bool connected = ( IfRow.dwOperStatus == IF_OPER_STATUS_CONNECTED ) || ( IfRow.dwOperStatus == IF_OPER_STATUS_OPERATIONAL );

以上でネットワークケーブルの状態を検出することができました。

ホントはイベントとかメッセージでリアルタイムに渡してきてほしいけどな・・・
しかたがないので、スレッドを用意して500ミリ秒おきにネットワーク状態をスキャンして、変化があればメッセージを送出するスレッドクラスを作ってしまいました。

なかなかいい感じで検出できています。(^^)
投稿日時 : 2009年12月8日 14:19

コメント

# re: IpHelperAPI を使ってみた 2009/12/08 14:42 とっちゃん
思いつきですが...WM_DEVICECHANGE メッセージとか来てませんか?

ええ。もちろん試してませんw


# re: IpHelperAPI を使ってみた 2009/12/08 15:03 ゆーち
>とっちゃんさん
まじですか!?
半日つぶれたじゃないっすかw

# re: IpHelperAPI を使ってみた 2009/12/08 15:23 とっちゃん
わかんねーですよ。来ない可能性も十分あります。

でも、USBデバイスの変化はXPからこのメッセージで来るようになってますw


# re: IpHelperAPI を使ってみた 2009/12/08 16:14 ゆーち
>とっちゃんさん
ネットワークの割り当てドライブだと、認識できるようですが、ケーブル切断はできなさそうでした。

# re: IpHelperAPI を使ってみた 2009/12/08 16:31 とっちゃん
残念。
じゃぁ通知メッセージがない可能性が高いなー
それとも専用のメッセージだろうか?
http://www.wankuma.com/seminar/20070721tokyo10/Default.aspx

ここで、Windowsのメッセージをトレースする簡単なデモ(もとは別物用w)があるので、それを参考にトレースしてみると何か拾えるかもしれません。

まぁ、動かすとこんなに来るのかよ!って思いますけどねwww


# re: IpHelperAPI を使ってみた 2009/12/08 16:53 とっちゃん
肝心のソースをポイントしてなかったwww
http://www.wankuma.com/seminar/20070721tokyo10/3OOFever.lzh
おいらのセッションで使ったやつです。

バリバリのOOPですよw



# re: IpHelperAPI を使ってみた 2009/12/08 23:59 ゆーち
なるほど。簡易Spyですか・・・
WM_IDLEが流れるようになってからは、メッセージを見てみようなどと思わなくなりましたww

どこかにタスクトレーのネットワーク切断も IpHelper Api を使っているということが書いてありましたから、メッセージ来てないような気がしますw

とりあえず、作ったものを実装してしまったので(笑)
そのうち試すかも・・・ですw

# re: IpHelperAPI を使ってみた 2009/12/09 15:04 aetos
# さっきは「さーばーうんにゃべいらぼぅ」とか言われたので改めて。

NotifyIpInterfaceChange とかではわかりませんかね?

# re: IpHelperAPI を使ってみた 2009/12/09 19:19 ゆーち
>aetosさん
おお。なんか、それ、いけそう!!!
きっとこれだな。

これから宴会ラッシュなので、近いうちに試します。
callback 登録ってことは、解除も必要なんだろうな・・・

# re: IpHelperAPI を使ってみた 2009/12/11 15:53 ゆーち
>aetos さん
途中まで実装していて、気づきました。

The NotifyIpInterfaceChange function is defined on Windows Vista and later.
(゚∀゚)がーんw

まだまだXPなお客さんが多いので、採用しないことにしましたw

# re: Ruby で数値を 0 埋めする 2019/01/24 13:41 zzyytt
http://www.vapormaxshoes.us
http://www.yeezy-boost350.us.com
http://www.ultraboost.us.com
http://www.adidasstansmith.us.com
http://www.yeezy-500.us.com
http://www.michaelkors-outletonlines.us.com
http://www.lebron16.net
http://www.goyard.us.com
http://www.stephencurry.us.com
http://www.toryburchs.us
http://www.russellwestbrookshoes.us
http://www.lebron16.us.com
http://www.supremeclothing.us
http://www.adidasyeezys.us.com
http://www.golden-goose.us.com
http://www.redbottom-shoes.us.com
http://www.kobebasketballshoes.net
http://www.bapehoodie.us
http://www.outletonline-michaelkors.us.org
http://www.yeezyboost.com.co


# mdubtuso@hotmaill.com 2019/04/15 21:14 NFL Jerseys Cheap
ydqmdsixi,If you are going for best contents like I do, just go to see this web page daily because it offers quality contents, thanks!

# dsseimgj@hotmaill.com 2019/04/29 20:36 pandora charms outlet
The 7th-grade student was repeatedly punched and kicked in her head in a fight that was captured on cell phone footage on April 18. On Sunday, she complained of headaches and fell unconscious.

# wbqzcdnu@hotmaill.com 2019/05/05 9:50 Nike Air Zoom Pegasus 35
I had one day on the walker, Saban told TideSports.com. Now I’m on the cane. I’ll probably throw that [son of a b??] away tomorrow.

# vxknfqbbwgi@hotmaill.com 2019/05/08 3:58 Nike Outlet
In what world, when you are sitting on the stage telling folks about your history, and you mention the fact that you were at the March on Washington with Reverend Dr. Martin Luther King Jr.?” Turner asked. “In what world do people boo that?

# wwufztbkgy@hotmaill.com 2019/05/15 21:13 Cheap Jerseys
http://www.nikereactelement87.us.com/ React Element 87

# qlbrpj@hotmaill.com 2019/05/24 2:55 NFL Jerseys
http://www.nfl-jerseys.us.org/ Cheap NFL Jerseys

# venniax@hotmaill.com 2019/05/26 1:08 Pandora Jewelry Official Site
http://www.pittsburghsteelers-jerseys.us/ Steelers Jerseys Cheap

# eibfbpca@hotmaill.com 2019/06/02 10:18 Yeezys
http://www.basketball-jersey.us/ NBA Jerseys

# jzwmjlzwwlz@hotmaill.com 2019/06/13 8:32 Travis Scott Jordan 1
fuabftxfbmp New Yeezy,If you are going for best contents like I do, just go to see this web page daily because it offers quality contents, thanks!

# cntiyvtbcqh@hotmaill.com 2019/06/15 19:05 Jordan 12 Gym Red
http://www.pandora-com.us/ Pandora

# jlbabxllj@hotmaill.com 2019/06/21 22:46 NFL Jerseys Wholesale
http://www.nfljerseyscheapwholesale.us/ Cheap NFL Jerseys

# odrxlqzni@hotmaill.com 2019/07/07 22:19 Yeezy
http://www.jordan11concord.us.com/ air jordan 11 concord

# jqqschzqas@hotmaill.com 2019/07/16 15:14 Nike Outlet Online
http://www.yeezy700.org.uk/ Yeezy 700

# wxfxplfuqbq@hotmaill.com 2019/07/31 0:01 Nike Outlet
http://www.yeezy.com.co/ Yeezys

# gusprp@hotmaill.com 2019/07/31 6:24 Yeezy Boost 350 V2
http://www.yeezys.me.uk/ Yeezy Shoes

# cumeqbn@hotmaill.com 2019/08/10 1:04 Nike Outlet
http://www.jordan11-concord.com/ air jordan 11 concord

# yDGcrRnasA 2022/04/19 11:53 johnansog
http://imrdsoacha.gov.co/silvitra-120mg-qrms

# xosdndevxzcx 2022/05/06 7:52 ugpnuz
what are the side effects of hydroxychloroquine https://keys-chloroquinehydro.com/

# rysiaxa@livedoor.com 2022/07/30 0:44 ロレックス レディース 有名人
正規販売代理店,100%品質保証!
超激得通販!
【超人気新品】史上最も激安い!最安値に挑戦!
クリスマス賛発売!
超人気高品質100%品質保障!
今79%OFF、税金入れ、ベストプライスをお楽しみください
送料無料で販売、最大70%の割引
発売中高級品アウトレット割引を提供
割引80%オフまで
【正規品】激安専門店.
超安値登場!品質保証、最安値に挑戦!
オンラインストアオファー激安輸出
高品質とリーズナブルで販売
超人気【楽天市場】
オンラインストアは、ご来店ありがとうございます.

Post Feedback

タイトル
名前
Url:
コメント