閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

IP Helper Functions

PC に刺さっている LAN カードの MAC アドレスとか、そのへんの情報が必要になったので、検索してみたところ IP Helper Functions というものがあるらしい。

MSDN のドキュメントはまだ英語版しかないようだけれど、リファレンスくらいなら英語でも意味は分かるので問題はないと言うか、むしろ敢えて英語の文書を参照して鍛えたほうが良いようにも思ったりしているのでちょうどいい。

で、実際に使ってみて、GetAdaptersInfo 関数から ERROR_INVALID_FUNCTION が返ってきて少しはまりました。 ERROR_BUFFER_OVERFLOW が返ってくるのを想定していたので。第二引数に渡した変数の中身 (構造体のサイズ) は関数終了時に変わっていたので、結局一回目の呼び出しの時は戻り値のチェックはしないようにして実装しました。

DWORD size = size(IP_ADAPTERINFO);
GetAdaptersInfo(0, &size);
IP_ADAPTERINFO* adapter = reinterpret_cast(::malloc(size)); if(::GetAdaptersInfo(adapter, &size) == ERROR_SUCCESS) { // ... }
free(adapter);

第一引数は NULL でも良いらしい。

ところで IP_ADAPTERINFO 構造体のメンバ変数にハンガリアン記法が使われていませんが、 API でももう捨てられてる?