スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--.--.-- | スポンサー広告

WMIの補足……

SONY BMG の rootkit 騒ぎは加熱する一方ですね(;´Д`)

XCP「rootkit」組み込みマシン、日本は最多の21万台?――専門家が指摘
http://www.itmedia.co.jp/news/articles/0511/16/news026.html




WMIの補足(というか修正……)
「WMIプログラムC++編-2」のソースコードにて

if(NULL != property_array)
SafeArrayDestroy(property_array);

という個所がありますが、これはまずかったようです(;´Д`)
特にMSDNに記載があるわけではないですが
IWbemClassObject インターフェイスの Get メソッドにて獲得した値を
勝手に開放すると内部でも開放が行われているらしく
2重開放によってメモリーリークが発生します。
(会社で物の見事なくらい、はまりましたorz)

というわけで上の2行は削除してください。


もうひとつ。
これは補足になりますが
同じく「WMIプログラムC++編-2」のソースコードにて

wbem_enumerator->Next(WBEM_INFINITE, 1, &wbem_object, &returned);

という個所がありますが、
この個所のエラー処理をする際、

if(FAILED(wbem_enumerator->Next(WBEM_INFINITE, 1,
&wbem_object, &returned)))
return FALSE;
else
return TRUE;

これは特に問題ありません……が

if(FAILED(wbem_enumerator->Next(WBEM_INFINITE, 10,
&wbem_object, &returned)))
return FALSE;
else
return TRUE;

これはダメです。

Next メソッドが戻してくる辺値に"WBEM_S_FALSE"というものがあります。
残念ながらこいつはFAILEDマクロやSECESSEDマクロでは正確に補足できません。
では何故上のものが大丈夫なのかというと、
MSDN の解説にこう明記されています。

The number of objects returned was less than the number requested.
WBEM_S_FALSE is also returned when this method is
called with a value of 0 for the uCount parameter.

ようするに値の取得には成功したが
指定(第2パラメータ)された数のオブジェクトの取得に失敗した時に
"WBEM_S_FALSE"が返されます……というわけです。
(第2パラメータに"0"を指定した場合にも同様に"WBEM_S_FALSE"が返されます。
 "0"を指定すると存在するObjectの数を第4パラメータに出力します)

上の例では1つだけ取得するように指定しているため
"WBEM_S_FALSE"が発生する条件を絶対に満たすことがないわけです(´・ω・`)b

とはいえ"WBEM_S_FALSE"をうまくはじく処理を
どちらにも入れたほうがいいとはおもいますけどね……


スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

2005.11.17 | Comments(0) | Trackback(0) | プログラム

コメント

コメントの投稿


秘密にする

«  | HOME |  »

ブロとも申請フォーム

この人とブロともになる

カウンター


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。