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になっています

dev

ただ、XPのsetupapiは完全な上位互換ではないため、置換するのは無理そうです

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です