setupapi の Windows 2000での非互換部分について
拡張カーネル v3.0でXP版のデバイスマネージャーを導入したのですが、ドライバの詳細が開けなくなっているので調査してみたところ以下のことが分かりました
以下のフラグに2000は非対応
DI_FLAGSEX_FILTERSIMILARDRIVERS 0x02000000L
DI_FLAGSEX_INSTALLEDDRIVER 0x04000000L
DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE 0x08000000L
DI_FLAGSEX_ALTPLATFORM_DRVSEARCH 0x10000000L
DI_FLAGSEX_RESTART_DEVICE_ONLY 0x20000000L
SPQ_SCAN_USE_CALLBACK_SIGNERINFO 0x00000040
SPQ_SCAN_PRUNE_DELREN 0x00000080
FLG_ADDREG_DELREG_BIT ( 0x00008000 )
ドライバーの詳細情報を取得する関数でこれらのフラグを使っているため、エラーになるようでした
あと、なぜか SPDRP_UPPERFILTERS を使った関数が失敗するなぞ減少が・・・。
仕方ないので、XP版の デバイスマネージャーは内部的に setupxpi.dll (XP版のsetupapi.dll)をコールすることにしました。
後、Win2000で使っていない証明書アイコンを使うため、setupapi.dll にリソースを追加することになりました
デバイスマネージャーがXP版のsetupapi を参照するようになったため一部アイコンがXPになっています
ただ、XPのsetupapiは完全な上位互換ではないため、置換するのは無理そうです
Comments