📄 setupapi.h
字号:
/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
setupapi.h
Abstract:
Public header file for Windows NT Setup and Device Installer services Dll.
--*/
#ifndef _INC_SETUPAPI
#define _INC_SETUPAPI
#if _MSC_VER > 1000
#pragma once
#endif
//
// Define API decoration for direct importing of DLL references.
//
#if !defined(_SETUPAPI_)
#define WINSETUPAPI DECLSPEC_IMPORT
#else
#define WINSETUPAPI
#endif
//
// determine version of setupapi based on _WIN32_WINDOWS and _WIN32_WINNT
//
// NT4 version of setupapi (0x0400) is earliest, and installed onto Win95 by IE.
// Win2k version of setupapi (0x0500) also shipped in WinME
// we'll use "0x0410" to indicate version of setupapi shipped with Win98
//
#ifndef _SETUPAPI_VER
#if defined(_WIN32_WINNT) && (!defined(_WIN32_WINDOWS) || (_WIN32_WINNT < _WIN32_WINDOWS))
#define _SETUPAPI_VER _WIN32_WINNT // SetupAPI version follows Windows NT version
#elif defined(_WIN32_WINDOWS)
#if _WIN32_WINDOWS >= 0x0490
#define _SETUPAPI_VER 0x0500 // WinME uses same version of SetupAPI as Win2k
#elif _WIN32_WINDOWS >= 0x0410
#define _SETUPAPI_VER 0x0410 // Indicates version of SetupAPI shipped with Win98
#else
#define _SETUPAPI_VER 0x0400 // Earliest SetupAPI version
#endif // _WIN32_WINDOWS
#else // _WIN32_WINNT/_WIN32_WINDOWS
#define _SETUPAPI_VER 0x0501
#endif // _WIN32_WINNT/_WIN32_WINDOWS
#endif // !_SETUPAPI_VER
#ifndef __LPGUID_DEFINED__
#define __LPGUID_DEFINED__
typedef GUID *LPGUID;
#endif
//
// Include commctrl.h for our use of HIMAGELIST and wizard support.
//
#include <commctrl.h>
#ifdef _WIN64
#include <pshpack8.h> // Assume 8-byte (64-bit) packing throughout
#else
#include <pshpack1.h> // Assume byte packing throughout (32-bit processor)
#endif
#ifdef __cplusplus
extern "C" {
#endif
//
// Define maximum string length constants as specified by
// Windows 95.
//
#define LINE_LEN 256 // Win95-compatible maximum for displayable
// strings coming from a device INF.
#define MAX_INF_STRING_LENGTH 4096 // Actual maximum size of an INF string
// (including string substitutions).
#define MAX_TITLE_LEN 60
#define MAX_INSTRUCTION_LEN 256
#define MAX_LABEL_LEN 30
#define MAX_SERVICE_NAME_LEN 256
#define MAX_SUBTITLE_LEN 256
//
// Define maximum length of a machine name in the format expected by ConfigMgr32
// CM_Connect_Machine (i.e., "\\\\MachineName\0").
//
#define SP_MAX_MACHINENAME_LENGTH (MAX_PATH + 3)
//
// Define type for reference to loaded inf file
//
typedef PVOID HINF;
//
// Inf context structure. Applications must not interpret or
// overwrite values in these structures.
//
typedef struct _INFCONTEXT {
PVOID Inf;
PVOID CurrentInf;
UINT Section;
UINT Line;
} INFCONTEXT, *PINFCONTEXT;
//
// Inf file information structure.
//
typedef struct _SP_INF_INFORMATION {
DWORD InfStyle;
DWORD InfCount;
BYTE VersionData[ANYSIZE_ARRAY];
} SP_INF_INFORMATION, *PSP_INF_INFORMATION;
//
// Define structure for passing alternate platform info into
// SetupSetFileQueueAlternatePlatform and SetupQueryInfOriginalFileInformation.
//
typedef struct _SP_ALTPLATFORM_INFO_V2 {
DWORD cbSize;
//
// platform to use (VER_PLATFORM_WIN32_WINDOWS or VER_PLATFORM_WIN32_NT)
//
DWORD Platform;
//
// major and minor version numbers to use
//
DWORD MajorVersion;
DWORD MinorVersion;
//
// processor architecture to use (PROCESSOR_ARCHITECTURE_INTEL,
// PROCESSOR_ARCHITECTURE_ALPHA, PROCESSOR_ARCHITECTURE_IA64, or
// PROCESSOR_ARCHITECTURE_ALPHA64)
//
WORD ProcessorArchitecture;
union {
WORD Reserved; // for compatibility with V1 structure
WORD Flags; // indicates validity of non V1 fields
};
//
// specify SP_ALTPLATFORM_FLAGS_VERSION_RANGE in Flags
// to use FirstValidatedMajorVersion and FirstValidatedMinorVersion
//
// Major and minor versions of the oldest previous OS for which this
// package's digital signature may be considered valid. For example, say
// the alternate platform is VER_PLATFORM_WIN32_NT, version 5.1. However,
// it is wished that driver packages signed with a 5.0 osattr also be
// considered valid. In this case, you'd have a MajorVersion/MinorVersion
// of 5.1, and a FirstValidatedMajorVersion/FirstValidatedMinorVersion of
// 5.0. To validate packages signed for any previous OS release, specify
// 0 for these fields. To only validate against the target alternate
// platform, specify the same values as those in the MajorVersion and
// MinorVersion fields.
//
DWORD FirstValidatedMajorVersion;
DWORD FirstValidatedMinorVersion;
} SP_ALTPLATFORM_INFO_V2, *PSP_ALTPLATFORM_INFO_V2;
typedef struct _SP_ALTPLATFORM_INFO_V1 {
DWORD cbSize;
//
// platform to use (VER_PLATFORM_WIN32_WINDOWS or VER_PLATFORM_WIN32_NT)
//
DWORD Platform;
//
// major and minor version numbers to use
//
DWORD MajorVersion;
DWORD MinorVersion;
//
// processor architecture to use (PROCESSOR_ARCHITECTURE_INTEL,
// PROCESSOR_ARCHITECTURE_ALPHA, PROCESSOR_ARCHITECTURE_IA64, or
// PROCESSOR_ARCHITECTURE_ALPHA64)
//
WORD ProcessorArchitecture;
WORD Reserved; // must be zero.
} SP_ALTPLATFORM_INFO_V1, *PSP_ALTPLATFORM_INFO_V1;
#if USE_SP_ALTPLATFORM_INFO_V1 || (_SETUPAPI_VER < 0x0501) // use version 1 altplatform info data structure
typedef SP_ALTPLATFORM_INFO_V1 SP_ALTPLATFORM_INFO;
typedef PSP_ALTPLATFORM_INFO_V1 PSP_ALTPLATFORM_INFO;
#else // use version 2 altplatform info data structure
typedef SP_ALTPLATFORM_INFO_V2 SP_ALTPLATFORM_INFO;
typedef PSP_ALTPLATFORM_INFO_V2 PSP_ALTPLATFORM_INFO;
//
// the following flags are available to SP_ALTPLATFORM_INFO_V2
//
#define SP_ALTPLATFORM_FLAGS_VERSION_RANGE (0x0001) // FirstValidatedMajor/MinorVersion
#endif // use current version of altplatform info data structure
//
// Define structure that is filled in by SetupQueryInfOriginalFileInformation
// to indicate the INF's original name and the original name of the (potentially
// platform-specific) catalog file specified by that INF.
//
typedef struct _SP_ORIGINAL_FILE_INFO_A {
DWORD cbSize;
CHAR OriginalInfName[MAX_PATH];
CHAR OriginalCatalogName[MAX_PATH];
} SP_ORIGINAL_FILE_INFO_A, *PSP_ORIGINAL_FILE_INFO_A;
typedef struct _SP_ORIGINAL_FILE_INFO_W {
DWORD cbSize;
WCHAR OriginalInfName[MAX_PATH];
WCHAR OriginalCatalogName[MAX_PATH];
} SP_ORIGINAL_FILE_INFO_W, *PSP_ORIGINAL_FILE_INFO_W;
#ifdef UNICODE
typedef SP_ORIGINAL_FILE_INFO_W SP_ORIGINAL_FILE_INFO;
typedef PSP_ORIGINAL_FILE_INFO_W PSP_ORIGINAL_FILE_INFO;
#else
typedef SP_ORIGINAL_FILE_INFO_A SP_ORIGINAL_FILE_INFO;
typedef PSP_ORIGINAL_FILE_INFO_A PSP_ORIGINAL_FILE_INFO;
#endif
//
// SP_INF_INFORMATION.InfStyle values
//
#define INF_STYLE_NONE 0x00000000 // unrecognized or non-existent
#define INF_STYLE_OLDNT 0x00000001 // winnt 3.x
#define INF_STYLE_WIN4 0x00000002 // Win95
//
// Additional InfStyle flags that may be specified when calling SetupOpenInfFile.
//
//
#define INF_STYLE_CACHE_ENABLE 0x00000010 // always cache INF, even outside of %windir%\Inf
#define INF_STYLE_CACHE_DISABLE 0x00000020 // delete cached INF information
//
// Target directory specs.
//
#define DIRID_ABSOLUTE -1 // real 32-bit -1
#define DIRID_ABSOLUTE_16BIT 0xffff // 16-bit -1 for compat w/setupx
#define DIRID_NULL 0
#define DIRID_SRCPATH 1
#define DIRID_WINDOWS 10
#define DIRID_SYSTEM 11 // system32
#define DIRID_DRIVERS 12
#define DIRID_IOSUBSYS DIRID_DRIVERS
#define DIRID_INF 17
#define DIRID_HELP 18
#define DIRID_FONTS 20
#define DIRID_VIEWERS 21
#define DIRID_COLOR 23
#define DIRID_APPS 24
#define DIRID_SHARED 25
#define DIRID_BOOT 30
#define DIRID_SYSTEM16 50
#define DIRID_SPOOL 51
#define DIRID_SPOOLDRIVERS 52
#define DIRID_USERPROFILE 53
#define DIRID_LOADER 54
#define DIRID_PRINTPROCESSOR 55
#define DIRID_DEFAULT DIRID_SYSTEM
//
// The following DIRIDs are for commonly-used shell "special folders". The
// complete list of such folders is contained in shlobj.h. In that headerfile,
// each folder is assigned a CSIDL_* value. The DIRID values below are created
// by taking the CSIDL value in shlobj.h and OR'ing it with 0x4000. Thus, if
// an INF needs to reference other special folders not defined below, it may
// generate one using the above mechanism, and setupapi will automatically deal
// with it and use the corresponding shell's path where appropriate. (Remember
// that DIRIDs must be specified in decimal, not hex, in an INF when used for
// string substitution.)
//
#define DIRID_COMMON_STARTMENU 16406 // All Users\Start Menu
#define DIRID_COMMON_PROGRAMS 16407 // All Users\Start Menu\Programs
#define DIRID_COMMON_STARTUP 16408 // All Users\Start Menu\Programs\Startup
#define DIRID_COMMON_DESKTOPDIRECTORY 16409 // All Users\Desktop
#define DIRID_COMMON_FAVORITES 16415 // All Users\Favorites
#define DIRID_COMMON_APPDATA 16419 // All Users\Application Data
#define DIRID_PROGRAM_FILES 16422 // Program Files
#define DIRID_SYSTEM_X86 16425 // system32 on RISC
#define DIRID_PROGRAM_FILES_X86 16426 // Program Files on RISC
#define DIRID_PROGRAM_FILES_COMMON 16427 // Program Files\Common
#define DIRID_PROGRAM_FILES_COMMONX86 16428 // x86 Program Files\Common on RISC
#define DIRID_COMMON_TEMPLATES 16429 // All Users\Templates
#define DIRID_COMMON_DOCUMENTS 16430 // All Users\Documents
//
// First user-definable dirid. See SetupSetDirectoryId().
//
#define DIRID_USER 0x8000
//
// Setup callback notification routine type
//
typedef UINT (CALLBACK* PSP_FILE_CALLBACK_A)(
IN PVOID Context,
IN UINT Notification,
IN UINT_PTR Param1,
IN UINT_PTR Param2
);
typedef UINT (CALLBACK* PSP_FILE_CALLBACK_W)(
IN PVOID Context,
IN UINT Notification,
IN UINT_PTR Param1,
IN UINT_PTR Param2
);
#ifdef UNICODE
#define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_W
#else
#define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_A
#endif
//
// Operation/queue start/end notification. These are ordinal values.
//
#define SPFILENOTIFY_STARTQUEUE 0x00000001
#define SPFILENOTIFY_ENDQUEUE 0x00000002
#define SPFILENOTIFY_STARTSUBQUEUE 0x00000003
#define SPFILENOTIFY_ENDSUBQUEUE 0x00000004
#define SPFILENOTIFY_STARTDELETE 0x00000005
#define SPFILENOTIFY_ENDDELETE 0x00000006
#define SPFILENOTIFY_DELETEERROR 0x00000007
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -