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

SP_DRVINSTALL_PARAMS

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

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

フィールド

フィールドサイズx64x86説明
cbSizeDWORD4+0+0SP_DRVINSTALL_PARAMS 構造体のサイズ (バイト単位)。
RankDWORD4+4+4このドライバーのランク一致値。0 から n までの範囲で、0 が最も互換性が高いことを示します。
FlagsSETUP_DI_DRIVER_INSTALL_FLAGS4+8+8

このドライバーに対して動作する関数を制御するフラグ。次の値の組み合わせを指定できます。

DNF_ALWAYSEXCLUDEFROMLIST (Windows Vista 以降の Windows)

このフラグが設定されている場合、列挙を実行するクライアントに関係なく、ドライバー ノードは列挙されません。

DNF_AUTHENTICODE_SIGNED (Windows Server 2003 以降の Windows)

このドライバーの INF ファイルは Authenticode 署名によって署名されています。このフラグはインストーラーにとって読み取り専用です。

詳細については、「SetupAPI を使用したドライバーの Authenticode 署名の検証」を参照してください。

DNF_BAD_DRIVER

このドライバーを使用しません。インストーラーはこのフラグの読み取りと書き込みができます。

このフラグが設定されている場合、SetupDiSelectBestCompatDrvSetupDiSelectDevice はこのドライバーを無視します。

クラス インストーラーまたはコインストーラーは、ドライバーの選択ダイアログ ボックスに Windows がこのドライバーを一覧表示しないようにするために、このフラグを設定できます。たとえば、DIF_SELECTDEVICE 要求や DIF_SELECTBESTCOMPATDRV 要求を処理するときに、インストーラーがこのフラグを設定することがあります。

DNF_BASIC_DRIVER (Windows XP 以降の Windows)

このドライバーは基本ドライバーです。このフラグはインストーラーにとって読み取り専用です。

DNF_CLASS_DRIVER

このドライバーはクラス ドライバーです。このフラグはインストーラーにとって読み取り専用です。

DNF_COMPATIBLE_DRIVER

このドライバーは互換ドライバーです。このフラグはインストーラーにとって読み取り専用です。

DNF_DUPDESC

このドライバーと同じ説明を持つドライバーを提供する他のプロバイダーが存在します。このフラグはインストーラーにとって読み取り専用です。

DNF_DUPDRIVERVER (Windows XP 以降の Windows)

このドライバーと同じバージョンのドライバーを提供する他のプロバイダーが存在します。このフラグはインストーラーにとって読み取り専用です。

DNF_DUPPROVIDER

このドライバーと同じ説明を持つドライバーを提供する他のプロバイダーが存在します。このドライバーと一致するドライバーとの唯一の違いは、ドライバーの日付です。このフラグはインストーラーにとって読み取り専用です。

このフラグが設定されている場合、ユーザーが一致するドライバーと区別できるように、Windows はドライバーの横にドライバーの日付とドライバーのバージョンを表示します。

DNF_EXCLUDEFROMLIST

このドライバーを、ドライバー選択のダイアログに表示しません。

DNF_INBOX_DRIVER (Windows Vista 以降の Windows)

このドライバー ノードは、このバージョンの Windows に同梱されていた INF ファイルから派生しています。

DNF_INET_DRIVER

このドライバーはインターネットまたは Windows Update から取得されました。このフラグはインストーラーにとって読み取り専用です。

SetupCopyOEMInf を呼び出す場合は、SPOST_URL フラグを指定する必要があります。これにより、Windows がこの INF を %SystemRoot%\inf ディレクトリにコピーするときに、インターネット由来の INF としてマークされます。この手順を省略すると、Windows はこのデバイスを使用して他のデバイスをインストールしようとします。その結果、Windows はソース ファイルを保持していないため、無効なパスをユーザーに要求してしまうという問題が発生します。

DNF_INF_IS_SIGNED (Windows XP 以降の Windows)

このフラグはインストーラーにとって読み取り専用であり、次のいずれかの条件に当てはまる場合に設定されます。

  • ドライバーに WHQL リリース署名がある。
  • ドライバーがインボックス ドライバーである。
  • ドライバーに Authenticode 署名がある。
詳細については、「ドライバーの署名」を参照してください。

DNF_INSTALLEDDRIVER (Windows Vista 以降の Windows)

このドライバー ノードは、現在このデバイスに対してインストールされています。このフラグはインストーラーにとって読み取り専用です。

DNF_LEGACYINF

このドライバーはレガシ INF ファイルから取得されています。このフラグは NT ベースのオペレーティング システムでのみ有効です。このフラグはインストーラーにとって読み取り専用です。

DNF_NODRIVER

この論理ドライバーに対して物理ドライバーをインストールしない場合に設定します。

DNF_OEM_F6_INF (Windows XP 以降の Windows)

予約済みです。

DNF_OLD_INET_DRIVER

このドライバーはインターネットから取得されましたが、現在 Windows はそのソース ファイルにアクセスできません。このフラグはインストーラーにとって読み取り専用です。

Windows はソース ファイルを保持しておらず、無効なパスをユーザーに要求することになるため、システムはこのフラグが設定されたドライバーをインストールしません。このようなドライバーの INF は、デバイスのインストール以外のすべての用途で使用できます。

DNF_OLDDRIVER

このドライバーは、関連付けられたデバイスを現在制御している、または以前に制御していました。このフラグはインストーラーにとって読み取り専用です。

DNF_REQUESTADDITIONALSOFTWARE (Windows 7 以降の Windows)

ドライバー パッケージが、デバイスを動作させるために必要なソフトウェア ソリューションの一部にすぎない場合は、このフラグを設定します。この場合、ドライバー パッケージには追加のソフトウェアのインストールが必要になります。

詳細については、後述の「解説」セクションを参照してください。

PrivateDataUINT_PTR8/4+12+12クラス インストーラーがプライベート データの格納に使用できるフィールドです。コインストーラーはこのフィールドを使用しないでください。
ReservedDWORD4+20+16予約済みです。内部使用のみです。

公式ドキュメント

SP_DRVINSTALL_PARAMS 構造体は、特定のドライバー情報要素に関連付けられたドライバーのインストール パラメーターを格納します。

解説(Remarks)

Windows 7 以降では、インストーラーまたはコインストーラーが DNF_REQUESTADDITIONALSOFTWARE フラグを設定することで、ドライバー パッケージが、コンピューターにインストールされているとは限らない追加のソフトウェアを必要とすることを示せます。

デバイスのドライバー パッケージがインストールされた後、インストーラーが DNF_REQUESTADDITIONALSOFTWARE フラグを設定している場合、プラグ アンド プレイ (PnP) マネージャーは次の手順を実行します。

  1. PnP マネージャーは、RequestAddtionalSoftware という種類の問題レポートおよび解決策 (PRS) エラー レポートを生成します。このレポートには、デバイス固有のハードウェア ID とコンピューターのシステム アーキテクチャに関する情報が含まれます。
  2. デバイス固有のソフトウェアについて、独立系ハードウェア ベンダー (IHV) が提供するソリューションが存在する場合、そのソリューションがコンピューターにダウンロードされます。
    メモ ソリューションのダウンロードでは、ソフトウェア自体はインストールされません。
  3. デバイス固有のソフトウェアがコンピューターにインストールされていない場合、PnP マネージャーはそのソリューションをユーザーに提示し、ソフトウェアをダウンロードするためのリンクを提供します。ユーザーは、ソリューションに示された手順に従って、このソフトウェアをダウンロードしてインストールするかどうかを選択できます。
メモ ドライバー パッケージの INF ファイルが INF ControlFlags セクションRequestAdditionalSoftware フラグを設定している場合、インストーラーが DNF_REQUESTADDITIONALSOFTWARE フラグを設定する必要はありません。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// SP_DRVINSTALL_PARAMS  (x64 24 / x86 20 バイト)
#pragma pack(push, 1)
typedef struct SP_DRVINSTALL_PARAMS {
    DWORD cbSize;
    DWORD Rank;
    SETUP_DI_DRIVER_INSTALL_FLAGS Flags;
    UINT_PTR PrivateData;
    DWORD Reserved;
} SP_DRVINSTALL_PARAMS;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct SP_DRVINSTALL_PARAMS
{
    public uint cbSize;
    public uint Rank;
    public uint Flags;
    public UIntPtr PrivateData;
    public uint Reserved;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure SP_DRVINSTALL_PARAMS
    Public cbSize As UInteger
    Public Rank As UInteger
    Public Flags As UInteger
    Public PrivateData As UIntPtr
    Public Reserved As UInteger
End Structure
import ctypes
from ctypes import wintypes

class SP_DRVINSTALL_PARAMS(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("cbSize", wintypes.DWORD),
        ("Rank", wintypes.DWORD),
        ("Flags", wintypes.DWORD),
        ("PrivateData", ctypes.c_size_t),
        ("Reserved", wintypes.DWORD),
    ]
#[repr(C, packed(1))]
pub struct SP_DRVINSTALL_PARAMS {
    pub cbSize: u32,
    pub Rank: u32,
    pub Flags: u32,
    pub PrivateData: usize,
    pub Reserved: u32,
}
import "golang.org/x/sys/windows"

type SP_DRVINSTALL_PARAMS struct {
	cbSize uint32
	Rank uint32
	Flags uint32
	PrivateData uintptr
	Reserved uint32
}
type
  SP_DRVINSTALL_PARAMS = packed record
    cbSize: DWORD;
    Rank: DWORD;
    Flags: DWORD;
    PrivateData: NativeUInt;
    Reserved: DWORD;
  end;
const SP_DRVINSTALL_PARAMS = extern struct {
    cbSize: u32,
    Rank: u32,
    Flags: u32,
    PrivateData: usize,
    Reserved: u32,
};
type
  SP_DRVINSTALL_PARAMS {.packed.} = object
    cbSize: uint32
    Rank: uint32
    Flags: uint32
    PrivateData: uint
    Reserved: uint32
align(1)
struct SP_DRVINSTALL_PARAMS
{
    uint cbSize;
    uint Rank;
    uint Flags;
    size_t PrivateData;
    uint Reserved;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; SP_DRVINSTALL_PARAMS サイズ: 20 バイト(x86)
dim st, 5    ; 4byte整数×5(構造体サイズ 20 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Rank : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; Flags : SETUP_DI_DRIVER_INSTALL_FLAGS (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; PrivateData : UINT_PTR (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; Reserved : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SP_DRVINSTALL_PARAMS サイズ: 24 バイト(x64)
dim st, 6    ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Rank : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; Flags : SETUP_DI_DRIVER_INSTALL_FLAGS (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; PrivateData : UINT_PTR (+12, 8byte)  qpoke st,12,値 / qpeek(st,12)  ※IronHSPのみ。3.7/3.8は lpoke st,12,下位 : lpoke st,16,上位
; Reserved : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global SP_DRVINSTALL_PARAMS, pack=1
    #field int cbSize
    #field int Rank
    #field int Flags
    #field intptr PrivateData
    #field int Reserved
#endstruct

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