Win32 API 日本語リファレンス
ホームDevices.DeviceAndDriverInstallation › SP_DEVINSTALL_PARAMS_W

SP_DEVINSTALL_PARAMS_W

構造体
サイズx64: 576 バイト / x86: 556 バイトパッキング1

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
cbSizeDWORD4+0+0SP_DEVINSTALL_PARAMS 構造体のサイズ (バイト単位)。
FlagsSETUP_DI_DEVICE_INSTALL_FLAGS4+4+4

インストールおよびユーザーインターフェイスの操作を制御するフラグです。一部のフラグはデバイスインストール要求を送信する前に設定できますが、その他のフラグは一部の要求の処理中に自動的に設定されます。Flags には次の値の組み合わせを指定できます。

フラグの値は、デバイスインストールアプリケーションとインストーラーから書き込み可能なもの、読み取り専用 (OS のみが設定)、予約済み、廃止済みのグループに分けて示します。最初のグループは書き込み可能なフラグです:

DI_CLASSINSTALLPARAMS

クラスインストールパラメーターを使用する場合に設定します。SetupDiSetClassInstallParams は、呼び出し元がパラメーターを指定するとこのフラグを設定し、呼び出し元が NULL のパラメーターポインターを指定するとこのフラグをクリアします。

DI_COMPAT_FROM_CLASS

デバイスの互換ドライバーの一覧を、INF ファイルではなくクラスドライバーの一覧から作成するよう SetupDiBuildDriverInfoList に強制する場合に設定します。

DI_DRIVERPAGE_ADDED

システム提供のドライバープロパティページを置き換えるページをインストーラーが提供する場合に、クラスインストーラーまたはコインストーラーによって設定されます。このフラグが設定されている場合、オペレーティングシステムはシステム提供のドライバーページを表示しません。

DI_DONOTCALLCONFIGMG

特定のデバイスインストール関数 (たとえば SetupDiInstallDevice) の実行中に、デバイスの削除や再列挙のために構成マネージャーを呼び出すべきでない場合に設定します。

このフラグが設定されている場合、デバイスインストールアプリケーション、クラスインストーラー、およびコインストーラーは次の関数を呼び出してはなりません:

CM_Reenumerate_DevNode CM_Reenumerate_DevNode_Ex CM_Query_And_Remove_SubTree CM_Query_And_Remove_SubTree_Ex CM_Setup_DevNode CM_Setup_DevNode_Ex CM_Set_HW_Prof_Flags CM_Set_HW_Prof_Flags_Ex CM_Enable_DevNode CM_Enable_DevNode_Ex CM_Disable_DevNode CM_Disable_DevNode_Ex

DI_ENUMSINGLEINF

インストーラーおよびその他のデバイスインストールコンポーネントが、SP_DEVINSTALL_PARAMS.DriverPath で指定された INF ファイルのみを検索する場合に設定します。このフラグが設定されている場合、DriverPath にはディレクトリのパスではなく単一の INF ファイルのパスが格納されます。

DI_INF_IS_SORTED

[デバイスの選択] ページで、ドライバーをアルファベット順に並べ替えるのではなく、INF ファイルに現れる順序で一覧表示することを示すために設定します。

DI_INSTALLDISABLED

既定でデバイスを無効な状態でインストールする場合に設定します。認識されるためには、Windows が DIF_INSTALLDEVICE 要求の既定のハンドラーを呼び出す前に、このフラグを設定しておく必要があります。

DI_NEEDREBOOT

NT ベースのオペレーティングシステムでは、デバイスのインストール後またはデバイスの状態変更後にコンピューターの再起動が必要な場合に、このフラグが設定されます。クラスインストーラーまたはコインストーラーは、再起動が必要と判断した場合、デバイスインストール中の任意の時点でこのフラグを設定できます。

DI_NEEDRESTART

DI_NEEDREBOOT と同じです。

DI_NOBROWSE

ユーザーが OEM ディスクのパスを選択する際に、参照を無効にする場合に設定します。デバイスインストールアプリケーションは、インストールメディアの場所からのインストールのみにユーザーを制限するために、このフラグを設定します。

DI_NODI_DEFAULTACTION

クラスインストーラーが ERR_DI_DO_DEFAULT を返した場合、またはクラスインストーラーが存在しない場合に、SetupDiCallClassInstaller が既定の動作を実行すべきでないときに設定します。

DI_NOFILECOPY

SetupDiInstallDevice などのデバイスインストールアプリケーションおよびコンポーネントが、ファイルのコピーをスキップする場合に設定します。

DI_NOVCP

新しいコピーキューの作成を無効にする場合に設定します。SP_DEVINSTALL_PARAMS.FileQueue にある呼び出し元指定のコピーキューを使用します。

DI_NOWRITE_IDS

SetupDiInstallDevice が、INF で指定されたハードウェア ID および互換 ID を、デバイスノード (devnode) のデバイスプロパティに書き込まないようにする場合に設定します。このフラグは、ルート列挙デバイスに対してのみ設定してください。

このフラグは DI_FLAGSEX_ALWAYSWRITEIDS フラグより優先されます。

DI_PROPERTIES_CHANGE

デバイスのプロパティが変更され、インストーラーのユーザーインターフェイスの更新が必要になった場合に、デバイスマネージャーによって設定されます。

DI_QUIETINSTALL

デバイスインストーラー関数がサイレントに動作し、可能な限り既定の選択肢を使用しなければならない場合に設定します。このフラグが設定されている場合、クラスインストーラーおよびコインストーラーは UI を一切表示してはなりません。

DI_RESOURCEPAGE_ADDED

システム提供のリソースプロパティページを置き換えるページをインストーラーが提供する場合に、クラスインストーラーまたはコインストーラーによって設定されます。このフラグが設定されている場合、オペレーティングシステムはシステム提供のリソースページを表示しません。

DI_SHOWOEM

OEM ディスクのサポートを許可する場合に設定します。このフラグが設定されている場合、オペレーティングシステムは [デバイスの選択] ページに [ディスク使用] ボタンを表示します。このフラグは、システム提供のウィザードでは既定で設定されます。

DI_USECI_SELECTSTRINGS

クラスインストーラーまたはコインストーラーが、SetupDiSelectDevice の実行中に使用すべき文字列を提供した場合に設定します。

次のフラグは読み取り専用です (OS のみが設定します):

DI_DIDCLASS

SetupDiBuildDriverInfoList が、このクラスのデバイス用のドライバー一覧を既に作成している場合に設定されます。この一覧が既に作成されている場合、そこにはすべてのドライバー情報が含まれており、このフラグは常に設定されます。SetupDiDestroyDriverInfoList は、クラスのドライバー一覧を削除するときにこのフラグをクリアします。

このフラグは読み取り専用です。オペレーティングシステムのみがこのフラグを設定します。

DI_DIDCOMPAT

SetupDiBuildDriverInfoList が、このデバイス用の互換ドライバー一覧を既に作成している場合に設定されます。この一覧が既に作成されている場合、そこにはすべてのドライバー情報が含まれており、このフラグは常に設定されます。SetupDiDestroyDriverInfoList は、互換ドライバー一覧を削除するときにこのフラグをクリアします。

このフラグは、デバイス情報セット全体のパラメーターではなく、特定のデバイス情報要素に関連付けられたデバイスインストールパラメーターでのみ設定されます。

このフラグは読み取り専用です。オペレーティングシステムのみがこのフラグを設定します。

DI_MULTMFGS

デバイスセットアップクラスのドライバー一覧に複数の製造元から提供されたドライバーが含まれる場合に、SetupDiBuildDriverInfoList によって設定されます。

このフラグは読み取り専用です。オペレーティングシステムのみがこのフラグを設定します。

次のフラグは予約済みです:

DI_AUTOASSIGNRES

DI_DISABLED

DI_FORCECOPY

DI_GENERALPAGE_ADDED

DI_OVERRIDE_INFFLAGS

DI_SHOWALL

DI_SHOWCLASS

DI_SHOWCOMPAT

次のフラグは廃止されています:

DI_NOSELECTICONS

DI_PROPS_NOCHANGEUSAGE

FlagsExSETUP_DI_DEVICE_INSTALL_FLAGS_EX4+8+8

インストールおよびユーザーインターフェイスの操作を制御するための追加のフラグです。一部のフラグはデバイスインストーラー関数を呼び出す前に設定できますが、その他のフラグは一部の関数の処理中に自動的に設定されます。FlagsEx には次の値の組み合わせを指定できます。

フラグの値は、デバイスインストールアプリケーションとインストーラーから書き込み可能なもの、読み取り専用 (OS のみが設定)、予約済み、廃止済みのグループに分けて示します。

最初のグループは書き込み可能なフラグです:

DI_FLAGSEX_ALLOWEXCLUDEDDRVS

設定されている場合、"Exclude From Select" とマークされたドライバーを含めます。

たとえば、このフラグが設定されている場合、SetupDiSelectDevice は Exclude From Select の状態にあるドライバーを表示し、SetupDiBuildDriverInfoList は要求されたドライバー一覧に Exclude From Select のドライバーを含めます。

ドライバーは、INF ファイルで ExcludeFromSelect とマークされている場合、またはセットアップクラス全体がクラスインストーラーの INF で NoInstallClass もしくは NoUseClass とマークされているデバイスのドライバーである場合に、"Exclude From Select" となります。PnP デバイスのドライバーは通常 "Exclude From Select" です。PnP デバイスは手動でインストールすべきではありません。PnP デバイスのドライバーファイルの一覧を作成するには、SetupDiBuildDriverInfoList の呼び出し元がこのフラグを設定する必要があります。

DI_FLAGSEX_ALWAYSWRITEIDS

設定されていて DI_NOWRITE_IDS フラグがクリアされている場合、ハードウェア ID と互換 ID を常に devnode のデバイスプロパティに書き込みます。このフラグは、ルート列挙デバイスに対してのみ設定してください。

DI_FLAGSEX_APPENDDRIVERLIST

設定されている場合、SetupDiBuildDriverInfoList は既存の一覧に新しいドライバー一覧を追加します。このフラグは、複数の場所を検索する場合に関係します。

DI_FLAGSEX_DRIVERLIST_FROM_URL

設定されている場合、SP_DEVINSTALL_PARAMS.DriverPath で指定された URL から取得した INF に基づいてドライバー一覧を作成します。DriverPath が空の文字列の場合は、Windows Update の Web サイトを使用します。

現在、オペレーティングシステムは URL をサポートしていません。SetupDiBuildDriverInfoList に Windows Update の Web サイトを検索させるために、このフラグを使用してください。

DI_QUIETINSTALL が設定されている場合は、このフラグを設定しないでください。

DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS

設定されている場合、ドライバー一覧の作成時に古いインターネットドライバーを含めません。デバイスの候補となるドライバーの一覧を作成する場合は、常にこのフラグを設定してください。デバイスに現在インストールされているドライバーの一覧を取得するだけであれば、このフラグをクリアできます。

DI_FLAGSEX_FILTERCLASSES

設定されている場合、SetupDiBuildClassInfoList はクラスの包含フィルターを確認します。つまり、クラスが NoInstallClass とマークされているデバイスは、クラス一覧に含まれません。

DI_FLAGSEX_FILTERSIMILARDRIVERS

(Windows XP 以降。) 設定されている場合、SetupDiBuildDriverInfoList はクラスドライバー一覧の作成時に「類似」ドライバーを含めます。「類似」ドライバーとは、INF ファイル内のハードウェア ID または互換 ID のいずれかが、ハードウェアのハードウェア ID または互換 ID のいずれかと部分的に (または完全に) 一致するドライバーです。

DI_FLAGSEX_FINISHINSTALL_ACTION

(Windows Vista 以降。) 詳細については、実行すべき Finish-Install アクションがあるデバイスとしてマークする を参照してください。

DI_FLAGSEX_INET_DRIVER

設定されている場合、そのドライバーはインターネットから取得されたものです。Windows はインターネットからドライバーファイルを再度取得できることを保証できないため、そのデバイスの INF を将来のデバイスのインストールに使用しません。

DI_FLAGSEX_INSTALLEDDRIVER

(Windows XP 以降。) 設定されている場合、SetupDiBuildDriverInfoList は、クラスドライバーまたはデバイス互換ドライバーの一覧を作成する際に、現在インストールされているドライバーのみを含めます。

DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE

(Windows XP 以降。) 設定されている場合、クラスドライバーの一覧を作成する際に、SetupDiBuildDriverInfoList は、同じ INF に由来し、ドライバーの説明とランクが同じであるドライバー一覧内のノードをマージしません。

DI_FLAGSEX_NO_DRVREG_MODIFY

デバイスのハードウェアキーおよびソフトウェア (ドライバー) キーに対する AddReg エントリと DelReg エントリを処理しません。つまり、INF ファイルの DDInstall セクションおよび DDInstall.HW セクション内の AddReg エントリと DelReg エントリです。

DI_FLAGSEX_POWERPAGE_ADDED

設定されている場合、インストーラーが電源プロパティダイアログ用に独自のページを追加しています。オペレーティングシステムはシステム提供の電源プロパティページを表示しません。このフラグは、デバイスが電源管理をサポートしている場合にのみ関係します。

DI_FLAGSEX_PROPCHANGE_PENDING

設定されている場合、ユーザーが 1 つ以上のデバイスプロパティシートに変更を加えています。通常は、プロパティページプロバイダーがこのフラグを設定します。

ユーザーがデバイスプロパティシートを閉じると、デバイスマネージャーは DI_FLAGSEX_PROPCHANGE_PENDING フラグを確認します。設定されている場合、デバイスマネージャーはこのフラグをクリアして DI_PROPERTIES_CHANGE フラグを設定し、何かが変更されたことを通知するために DIF_PROPERTYCHANGE 要求をインストーラーに送信します。

DI_FLAGSEX_RECURSIVESEARCH

(Windows Vista 以降。) 設定されている場合、SetupDiBuildDriverInfoListDriverPath の値で指定されたパス内の INF を検索する際、その検索は再帰的に行われます。

DI_FLAGSEX_SEARCH_PUBLISHED_INFS

(Windows Vista 以降。) 設定されている場合、INF のパスや検索パスを指定せずに SetupDiBuildDriverInfoList で INF を検索する際、検索対象がドライバーストアにインポート済みの INF のみに制限されます。

DI_FLAGSEX_SETFAILEDINSTALL

インストールが失敗した場合に設定します。このフラグが設定されている場合、SetupDiInstallDevice 関数は、デバイスの ConfigFlags レジストリ値に FAILEDINSTALL フラグを設定するだけです。DI_FLAGSEX_SETFAILEDINSTALL が設定されている場合、コインストーラーは DIF_INSTALLDEVICE に応答して NO_ERROR を返さなければならず、クラスインストーラーは NO_ERROR または ERROR_DI_DO_DEFAULT を返さなければなりません。

DI_FLAGSEX_USECLASSFORCOMPAT

互換ドライバーの一覧を作成する際に、デバイスのセットアップクラスで INF ファイルをフィルターします。デバイスのセットアップクラスが判明している場合、このフラグを設定すると、事前コンパイルされていない INF ファイルを検索する際に互換ドライバーの一覧を作成するために必要な時間が短縮されます。DI_COMPAT_FROM_CLASS が設定されている場合、このフラグは無視されます。

次のフラグは読み取り専用です。これらのフラグはオペレーティングシステムのみが設定します:

DI_FLAGSEX_CI_FAILED

クラスインストーラーの読み込みまたは起動に失敗した場合に、オペレーティングシステムによって設定されます。このフラグは読み取り専用です。

DI_FLAGSEX_DIDCOMPATINFO

Windows が、デバイスと互換性のあるドライバーノードの一覧を作成済みであることを示します。このフラグは読み取り専用です。

DI_FLAGSEX_DIDINFOLIST

Windows が、指定されたセットアップクラスの INF ファイルに列挙されているすべてのドライバーを含むドライバーノードの一覧を作成済みであることを示します。HDEVINFO セットまたはデバイスに関連付けられたクラスがないために、指定されたセットアップクラスが NULL である場合、この一覧には利用可能なすべての INF ファイルのすべてのドライバーノードが含まれます。このフラグは読み取り専用です。

DI_FLAGSEX_IN_SYSTEM_SETUP

設定されている場合、インストールは初期システムセットアップ中に行われています。このフラグは読み取り専用です。

次のフラグは予約済みであり、使用しないでください:

DI_FLAGSEX_ALTPLATFORM_DRVSEARCH

DI_FLAGSEX_BACKUPONREPLACE

DI_FLAGSEX_DEVICECHANGE

DI_FLAGSEX_OLDINF_IN_CLASSLIST

DI_FLAGSEX_PREINSTALLBACKUP

DI_FLAGSEX_RESTART_DEVICE_ONLY

DI_FLAGSEX_USEOLDINFSEARCH

次のフラグは廃止されています:

DI_FLAGSEX_AUTOSELECTRANK0

DI_FLAGSEX_NOUIONQUERYREMOVE

hwndParentHWND8/4+12+12このデバイスに関連するユーザーインターフェイスのダイアログを所有するウィンドウハンドルです。
InstallMsgHandlerPSP_FILE_CALLBACK_W8/4+20+16ファイルのコピー中にイベントを処理するために使用されるコールバックです。インストーラーは、たとえばファイルキューをコミットするときに特別な処理を行うために、コールバックを使用できます。
InstallMsgHandlerContextvoid*8/4+28+20InstallMsgHandler コールバックが使用するプライベートデータです。
FileQueuevoid*8/4+36+24

ファイル操作をキューに入れるがコミットはしない、呼び出し元指定のファイルキューへのハンドルです。

ファイルキューをデバイス情報セットに関連付けた場合 (SetupDiSetDeviceInstallParams)、デバイス情報セットを削除する前に、キューとデバイス情報セットの関連付けを解除する必要があります。ファイルキューの関連付けを解除しないと、Windows はデバイス情報セットの参照カウントを減らすことができず、メモリを解放できません。

このキューは、ファイル操作をキューに入れるがコミットしないことを示す DI_NOVCP フラグが設定されている場合にのみ使用されます。

ClassInstallReservedUINT_PTR8/4+44+28クラスインストーラーのデータ用のポインターです。コインストーラーはこのフィールドを使用してはなりません。
ReservedDWORD4+52+32予約済みです。内部使用のみに使われます。
DriverPathWCHAR520+56+36

このパスは SetupDiBuildDriverInfoList 関数によって使用されます。

- Flags.DI_CLASSINSTALLPARAMS

クラスインストールパラメーターを使用する場合に設定します。SetupDiSetClassInstallParams は、呼び出し元がパラメーターを指定するとこのフラグを設定し、呼び出し元が NULL のパラメーターポインターを指定するとこのフラグをクリアします。

- Flags.DI_COMPAT_FROM_CLASS

デバイスの互換ドライバーの一覧を、INF ファイルではなくクラスドライバーの一覧から作成するよう SetupDiBuildDriverInfoList に強制する場合に設定します。

- Flags.DI_DIDCLASS

SetupDiBuildDriverInfoList が、このクラスのデバイス用のドライバー一覧を既に作成している場合に設定されます。この一覧が既に作成されている場合、そこにはすべてのドライバー情報が含まれており、このフラグは常に設定されます。SetupDiDestroyDriverInfoList は、クラスのドライバー一覧を削除するときにこのフラグをクリアします。

このフラグは読み取り専用です。オペレーティングシステムのみがこのフラグを設定します。

- Flags.DI_DIDCOMPAT

SetupDiBuildDriverInfoList が、このデバイス用の互換ドライバー一覧を既に作成している場合に設定されます。この一覧が既に作成されている場合、そこにはすべてのドライバー情報が含まれており、このフラグは常に設定されます。SetupDiDestroyDriverInfoList は、互換ドライバー一覧を削除するときにこのフラグをクリアします。

このフラグは、デバイス情報セット全体のパラメーターではなく、特定のデバイス情報要素に関連付けられたデバイスインストールパラメーターでのみ設定されます。

このフラグは読み取り専用です。オペレーティングシステムのみがこのフラグを設定します。

- Flags.DI_DONOTCALLCONFIGMG

特定のデバイスインストール関数 (たとえば SetupDiInstallDevice) の実行中に、デバイスの削除や再列挙のために構成マネージャーを呼び出すべきでない場合に設定します。

このフラグが設定されている場合、デバイスインストールアプリケーション、クラスインストーラー、およびコインストーラーは次の関数を呼び出してはなりません:

CM_Reenumerate_DevNode CM_Reenumerate_DevNode_Ex CM_Query_And_Remove_SubTree CM_Query_And_Remove_SubTree_Ex CM_Setup_DevNode CM_Setup_DevNode_Ex CM_Set_HW_Prof_Flags CM_Set_HW_Prof_Flags_Ex CM_Enable_DevNode CM_Enable_DevNode_Ex CM_Disable_DevNode CM_Disable_DevNode_Ex

- Flags.DI_DRIVERPAGE_ADDED

システム提供のドライバープロパティページを置き換えるページをインストーラーが提供する場合に、クラスインストーラーまたはコインストーラーによって設定されます。このフラグが設定されている場合、オペレーティングシステムはシステム提供のドライバーページを表示しません。

- Flags.DI_ENUMSINGLEINF

インストーラーおよびその他のデバイスインストールコンポーネントが、SP_DEVINSTALL_PARAMS.DriverPath で指定された INF ファイルのみを検索する場合に設定します。このフラグが設定されている場合、DriverPath にはディレクトリのパスではなく単一の INF ファイルのパスが格納されます。

- Flags.DI_INF_IS_SORTED

[デバイスの選択] ページで、ドライバーをアルファベット順に並べ替えるのではなく、INF ファイルに現れる順序で一覧表示することを示すために設定します。

- Flags.DI_INSTALLDISABLED

既定でデバイスを無効な状態でインストールする場合に設定します。認識されるためには、Windows が DIF_INSTALLDEVICE 要求の既定のハンドラーを呼び出す前に、このフラグを設定しておく必要があります。

- Flags.DI_MULTMFGS

デバイスセットアップクラスのドライバー一覧に複数の製造元から提供されたドライバーが含まれる場合に、SetupDiBuildDriverInfoList によって設定されます。

このフラグは読み取り専用です。オペレーティングシステムのみがこのフラグを設定します。

- Flags.DI_NEEDREBOOT

NT ベースのオペレーティングシステムでは、デバイスのインストール後またはデバイスの状態変更後にコンピューターの再起動が必要な場合に、このフラグが設定されます。クラスインストーラーまたはコインストーラーは、再起動が必要と判断した場合、デバイスインストール中の任意の時点でこのフラグを設定できます。

- Flags.DI_NEEDRESTART

DI_NEEDREBOOT と同じです。

- Flags.DI_NOBROWSE

ユーザーが OEM ディスクのパスを選択する際に、参照を無効にする場合に設定します。デバイスインストールアプリケーションは、インストールメディアの場所からのインストールのみにユーザーを制限するために、このフラグを設定します。

- Flags.DI_NODI_DEFAULTACTION

クラスインストーラーが ERR_DI_DO_DEFAULT を返した場合、またはクラスインストーラーが存在しない場合に、SetupDiCallClassInstaller が既定の動作を実行すべきでないときに設定します。

- Flags.DI_NOFILECOPY

SetupDiInstallDevice などのデバイスインストールアプリケーションおよびコンポーネントが、ファイルのコピーをスキップする場合に設定します。

- Flags.DI_NOVCP

新しいコピーキューの作成を無効にする場合に設定します。SP_DEVINSTALL_PARAMS.FileQueue にある呼び出し元指定のコピーキューを使用します。

- Flags.DI_NOWRITE_IDS

SetupDiInstallDevice が、INF で指定されたハードウェア ID および互換 ID を、デバイスノード (devnode) のデバイスプロパティに書き込まないようにする場合に設定します。このフラグは、ルート列挙デバイスに対してのみ設定してください。

このフラグは DI_FLAGSEX_ALWAYSWRITEIDS フラグより優先されます。

- Flags.DI_PROPERTIES_CHANGE

デバイスのプロパティが変更され、インストーラーのユーザーインターフェイスの更新が必要になった場合に、デバイスマネージャーによって設定されます。

- Flags.DI_QUIETINSTALL

デバイスインストーラー関数がサイレントに動作し、可能な限り既定の選択肢を使用しなければならない場合に設定します。このフラグが設定されている場合、クラスインストーラーおよびコインストーラーは UI を一切表示してはなりません。

- Flags.DI_RESOURCEPAGE_ADDED

システム提供のリソースプロパティページを置き換えるページをインストーラーが提供する場合に、クラスインストーラーまたはコインストーラーによって設定されます。このフラグが設定されている場合、オペレーティングシステムはシステム提供のリソースページを表示しません。

- Flags.DI_SHOWOEM

OEM ディスクのサポートを許可する場合に設定します。このフラグが設定されている場合、オペレーティングシステムは [デバイスの選択] ページに [ディスク使用] ボタンを表示します。このフラグは、システム提供のウィザードでは既定で設定されます。

- Flags.DI_USECI_SELECTSTRINGS

クラスインストーラーまたはコインストーラーが、SetupDiSelectDevice の実行中に使用すべき文字列を提供した場合に設定します。

- FlagsEx.DI_FLAGSEX_ALLOWEXCLUDEDDRVS

設定されている場合、"Exclude From Select" とマークされたドライバーを含めます。

たとえば、このフラグが設定されている場合、SetupDiSelectDevice は Exclude From Select の状態にあるドライバーを表示し、SetupDiBuildDriverInfoList は要求されたドライバー一覧に Exclude From Select のドライバーを含めます。

ドライバーは、INF ファイルで ExcludeFromSelect とマークされている場合、またはセットアップクラス全体がクラスインストーラーの INF で NoInstallClass もしくは NoUseClass とマークされているデバイスのドライバーである場合に、"Exclude From Select" となります。PnP デバイスのドライバーは通常 "Exclude From Select" です。PnP デバイスは手動でインストールすべきではありません。PnP デバイスのドライバーファイルの一覧を作成するには、SetupDiBuildDriverInfoList の呼び出し元がこのフラグを設定する必要があります。

- FlagsEx.DI_FLAGSEX_ALWAYSWRITEIDS

設定されていて DI_NOWRITE_IDS フラグがクリアされている場合、ハードウェア ID と互換 ID を常に devnode のデバイスプロパティに書き込みます。このフラグは、ルート列挙デバイスに対してのみ設定してください。

- FlagsEx.DI_FLAGSEX_APPENDDRIVERLIST

設定されている場合、SetupDiBuildDriverInfoList は既存の一覧に新しいドライバー一覧を追加します。このフラグは、複数の場所を検索する場合に関係します。

- FlagsEx.DI_FLAGSEX_CI_FAILED

クラスインストーラーの読み込みまたは起動に失敗した場合に、オペレーティングシステムによって設定されます。このフラグは読み取り専用です。

- FlagsEx.DI_FLAGSEX_DIDCOMPATINFO

Windows が、デバイスと互換性のあるドライバーノードの一覧を作成済みであることを示します。このフラグは読み取り専用です。

- FlagsEx.DI_FLAGSEX_DIDINFOLIST

Windows が、指定されたセットアップクラスの INF ファイルに列挙されているすべてのドライバーを含むドライバーノードの一覧を作成済みであることを示します。HDEVINFO セットまたはデバイスに関連付けられたクラスがないために、指定されたセットアップクラスが NULL である場合、この一覧には利用可能なすべての INF ファイルのすべてのドライバーノードが含まれます。このフラグは読み取り専用です。

- FlagsEx.DI_FLAGSEX_DRIVERLIST_FROM_URL

設定されている場合、SP_DEVINSTALL_PARAMS.DriverPath で指定された URL から取得した INF に基づいてドライバー一覧を作成します。DriverPath が空の文字列の場合は、Windows Update の Web サイトを使用します。

現在、オペレーティングシステムは URL をサポートしていません。SetupDiBuildDriverInfoList に Windows Update の Web サイトを検索させるために、このフラグを使用してください。

DI_QUIETINSTALL が設定されている場合は、このフラグを設定しないでください。

- FlagsEx.DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS

設定されている場合、ドライバー一覧の作成時に古いインターネットドライバーを含めません。デバイスの候補となるドライバーの一覧を作成する場合は、常にこのフラグを設定してください。デバイスに現在インストールされているドライバーの一覧を取得するだけであれば、このフラグをクリアできます。

- FlagsEx.DI_FLAGSEX_FILTERCLASSES

設定されている場合、SetupDiBuildClassInfoList はクラスの包含フィルターを確認します。つまり、クラスが NoInstallClass とマークされているデバイスは、クラス一覧に含まれません。

- FlagsEx.DI_FLAGSEX_FILTERSIMILARDRIVERS

(Windows XP 以降。) 設定されている場合、SetupDiBuildDriverInfoList はクラスドライバー一覧の作成時に「類似」ドライバーを含めます。「類似」ドライバーとは、INF ファイル内のハードウェア ID または互換 ID のいずれかが、ハードウェアのハードウェア ID または互換 ID のいずれかと部分的に (または完全に) 一致するドライバーです。

- FlagsEx.DI_FLAGSEX_INET_DRIVER

設定されている場合、そのドライバーはインターネットから取得されたものです。Windows はインターネットからドライバーファイルを再度取得できることを保証できないため、そのデバイスの INF を将来のデバイスのインストールに使用しません。

- FlagsEx.DI_FLAGSEX_INSTALLEDDRIVER

(Windows XP 以降。) 設定されている場合、SetupDiBuildDriverInfoList は、クラスドライバーまたはデバイス互換ドライバーの一覧を作成する際に、現在インストールされているドライバーのみを含めます。

- FlagsEx.DI_FLAGSEX_IN_SYSTEM_SETUP

設定されている場合、インストールは初期システムセットアップ中に行われています。このフラグは読み取り専用です。

- FlagsEx.DI_FLAGSEX_NO_DRVREG_MODIFY

デバイスのハードウェアキーおよびソフトウェア (ドライバー) キーに対する AddReg エントリと DelReg エントリを処理しません。つまり、INF ファイルの DDInstall セクションおよび DDInstall.HW セクション内の AddReg エントリと DelReg エントリです。

- FlagsEx.DI_FLAGSEX_POWERPAGE_ADDED

設定されている場合、インストーラーが電源プロパティダイアログ用に独自のページを追加しています。オペレーティングシステムはシステム提供の電源プロパティページを表示しません。このフラグは、デバイスが電源管理をサポートしている場合にのみ関係します。

- FlagsEx.DI_FLAGSEX_PROPCHANGE_PENDING

設定されている場合、ユーザーが 1 つ以上のデバイスプロパティシートに変更を加えています。通常は、プロパティページプロバイダーがこのフラグを設定します。

ユーザーがデバイスプロパティシートを閉じると、デバイスマネージャーは DI_FLAGSEX_PROPCHANGE_PENDING フラグを確認します。設定されている場合、デバイスマネージャーはこのフラグをクリアして DI_PROPERTIES_CHANGE フラグを設定し、何かが変更されたことを通知するために DIF_PROPERTYCHANGE 要求をインストーラーに送信します。

- FlagsEx.DI_FLAGSEX_SETFAILEDINSTALL

インストールが失敗した場合に設定します。このフラグが設定されている場合、SetupDiInstallDevice 関数は、デバイスの ConfigFlags レジストリ値に FAILEDINSTALL フラグを設定するだけです。DI_FLAGSEX_SETFAILEDINSTALL が設定されている場合、コインストーラーは DIF_INSTALLDEVICE に応答して NO_ERROR を返さなければならず、クラスインストーラーは NO_ERROR または ERROR_DI_DO_DEFAULT を返さなければなりません。

- FlagsEx.DI_FLAGSEX_USECLASSFORCOMPAT

互換ドライバーの一覧を作成する際に、デバイスのセットアップクラスで INF ファイルをフィルターします。デバイスのセットアップクラスが判明している場合、このフラグを設定すると、事前コンパイルされていない INF ファイルを検索する際に互換ドライバーの一覧を作成するために必要な時間が短縮されます。DI_COMPAT_FROM_CLASS が設定されている場合、このフラグは無視されます。

公式ドキュメント

SP_DEVINSTALL_PARAMS 構造体には、特定のデバイス情報要素に関連付けられた、またはデバイス情報セット全体にグローバルに関連付けられたデバイスインストールパラメーターが格納されます。

解説(Remarks)

メモ

setupapi.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして SP_DEVINSTALL_PARAMS を定義しています。エンコーディング非依存のエイリアスと、エンコーディング非依存ではないコードを混在させて使用すると、不一致が生じてコンパイルエラーや実行時エラーの原因となる可能性があります。詳細については、関数プロトタイプの規則を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// SP_DEVINSTALL_PARAMS_W  (x64 576 / x86 556 バイト)
#pragma pack(push, 1)
typedef struct SP_DEVINSTALL_PARAMS_W {
    DWORD cbSize;
    SETUP_DI_DEVICE_INSTALL_FLAGS Flags;
    SETUP_DI_DEVICE_INSTALL_FLAGS_EX FlagsEx;
    HWND hwndParent;
    PSP_FILE_CALLBACK_W InstallMsgHandler;
    void* InstallMsgHandlerContext;
    void* FileQueue;
    UINT_PTR ClassInstallReserved;
    DWORD Reserved;
    WCHAR DriverPath[260];
} SP_DEVINSTALL_PARAMS_W;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct SP_DEVINSTALL_PARAMS_W
{
    public uint cbSize;
    public uint Flags;
    public uint FlagsEx;
    public IntPtr hwndParent;
    public IntPtr InstallMsgHandler;
    public IntPtr InstallMsgHandlerContext;
    public IntPtr FileQueue;
    public UIntPtr ClassInstallReserved;
    public uint Reserved;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string DriverPath;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure SP_DEVINSTALL_PARAMS_W
    Public cbSize As UInteger
    Public Flags As UInteger
    Public FlagsEx As UInteger
    Public hwndParent As IntPtr
    Public InstallMsgHandler As IntPtr
    Public InstallMsgHandlerContext As IntPtr
    Public FileQueue As IntPtr
    Public ClassInstallReserved As UIntPtr
    Public Reserved As UInteger
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> Public DriverPath As String
End Structure
import ctypes
from ctypes import wintypes

class SP_DEVINSTALL_PARAMS_W(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("cbSize", wintypes.DWORD),
        ("Flags", wintypes.DWORD),
        ("FlagsEx", wintypes.DWORD),
        ("hwndParent", ctypes.c_void_p),
        ("InstallMsgHandler", ctypes.c_void_p),
        ("InstallMsgHandlerContext", ctypes.c_void_p),
        ("FileQueue", ctypes.c_void_p),
        ("ClassInstallReserved", ctypes.c_size_t),
        ("Reserved", wintypes.DWORD),
        ("DriverPath", ctypes.c_wchar * 260),
    ]
#[repr(C, packed(1))]
pub struct SP_DEVINSTALL_PARAMS_W {
    pub cbSize: u32,
    pub Flags: u32,
    pub FlagsEx: u32,
    pub hwndParent: *mut core::ffi::c_void,
    pub InstallMsgHandler: *mut core::ffi::c_void,
    pub InstallMsgHandlerContext: *mut core::ffi::c_void,
    pub FileQueue: *mut core::ffi::c_void,
    pub ClassInstallReserved: usize,
    pub Reserved: u32,
    pub DriverPath: [u16; 260],
}
import "golang.org/x/sys/windows"

type SP_DEVINSTALL_PARAMS_W struct {
	cbSize uint32
	Flags uint32
	FlagsEx uint32
	hwndParent uintptr
	InstallMsgHandler uintptr
	InstallMsgHandlerContext uintptr
	FileQueue uintptr
	ClassInstallReserved uintptr
	Reserved uint32
	DriverPath [260]uint16
}
type
  SP_DEVINSTALL_PARAMS_W = packed record
    cbSize: DWORD;
    Flags: DWORD;
    FlagsEx: DWORD;
    hwndParent: Pointer;
    InstallMsgHandler: Pointer;
    InstallMsgHandlerContext: Pointer;
    FileQueue: Pointer;
    ClassInstallReserved: NativeUInt;
    Reserved: DWORD;
    DriverPath: array[0..259] of WideChar;
  end;
const SP_DEVINSTALL_PARAMS_W = extern struct {
    cbSize: u32,
    Flags: u32,
    FlagsEx: u32,
    hwndParent: ?*anyopaque,
    InstallMsgHandler: ?*anyopaque,
    InstallMsgHandlerContext: ?*anyopaque,
    FileQueue: ?*anyopaque,
    ClassInstallReserved: usize,
    Reserved: u32,
    DriverPath: [260]u16,
};
type
  SP_DEVINSTALL_PARAMS_W {.packed.} = object
    cbSize: uint32
    Flags: uint32
    FlagsEx: uint32
    hwndParent: pointer
    InstallMsgHandler: pointer
    InstallMsgHandlerContext: pointer
    FileQueue: pointer
    ClassInstallReserved: uint
    Reserved: uint32
    DriverPath: array[260, uint16]
align(1)
struct SP_DEVINSTALL_PARAMS_W
{
    uint cbSize;
    uint Flags;
    uint FlagsEx;
    void* hwndParent;
    void* InstallMsgHandler;
    void* InstallMsgHandlerContext;
    void* FileQueue;
    size_t ClassInstallReserved;
    uint Reserved;
    wchar[260] DriverPath;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; SP_DEVINSTALL_PARAMS_W サイズ: 556 バイト(x86)
dim st, 139    ; 4byte整数×139(構造体サイズ 556 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Flags : SETUP_DI_DEVICE_INSTALL_FLAGS (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; FlagsEx : SETUP_DI_DEVICE_INSTALL_FLAGS_EX (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; hwndParent : HWND (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; InstallMsgHandler : PSP_FILE_CALLBACK_W (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; InstallMsgHandlerContext : void* (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; FileQueue : void* (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ClassInstallReserved : UINT_PTR (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; Reserved : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; DriverPath : WCHAR (+36, 520byte)  varptr(st)+36 を基点に操作(520byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SP_DEVINSTALL_PARAMS_W サイズ: 576 バイト(x64)
dim st, 144    ; 4byte整数×144(構造体サイズ 576 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Flags : SETUP_DI_DEVICE_INSTALL_FLAGS (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; FlagsEx : SETUP_DI_DEVICE_INSTALL_FLAGS_EX (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; hwndParent : HWND (+12, 8byte)  qpoke st,12,値 / qpeek(st,12)  ※IronHSPのみ。3.7/3.8は lpoke st,12,下位 : lpoke st,16,上位
; InstallMsgHandler : PSP_FILE_CALLBACK_W (+20, 8byte)  qpoke st,20,値 / qpeek(st,20)  ※IronHSPのみ。3.7/3.8は lpoke st,20,下位 : lpoke st,24,上位
; InstallMsgHandlerContext : void* (+28, 8byte)  qpoke st,28,値 / qpeek(st,28)  ※IronHSPのみ。3.7/3.8は lpoke st,28,下位 : lpoke st,32,上位
; FileQueue : void* (+36, 8byte)  qpoke st,36,値 / qpeek(st,36)  ※IronHSPのみ。3.7/3.8は lpoke st,36,下位 : lpoke st,40,上位
; ClassInstallReserved : UINT_PTR (+44, 8byte)  qpoke st,44,値 / qpeek(st,44)  ※IronHSPのみ。3.7/3.8は lpoke st,44,下位 : lpoke st,48,上位
; Reserved : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; DriverPath : WCHAR (+56, 520byte)  varptr(st)+56 を基点に操作(520byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global SP_DEVINSTALL_PARAMS_W, pack=1
    #field int cbSize
    #field int Flags
    #field int FlagsEx
    #field intptr hwndParent
    #field intptr InstallMsgHandler
    #field intptr InstallMsgHandlerContext
    #field intptr FileQueue
    #field intptr ClassInstallReserved
    #field int Reserved
    #field wchar DriverPath 260
#endstruct

stdim st, SP_DEVINSTALL_PARAMS_W        ; NSTRUCT 変数を確保
st->cbSize = 100
mes "cbSize=" + st->cbSize