#ifndef _SETUPAPI_H_
#define _SETUPAPI_H_

#include <commctrl.h>
#if defined(_WIN64)
#include <pshpack8.h>
#else
#include <pshpack1.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif

#ifndef _SETUPAPI_
#define WINSETUPAPI DECLSPEC_IMPORT
#else
#define WINSETUPAPI
#endif

#define LINE_LEN	256
#define MAX_INF_STRING_LENGTH	4096
#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 SP_MAX_MACHINENAME_LENGTH	(MAX_PATH + 3)

#define COPYFLG_WARN_IF_SKIP	0x00000001
#define COPYFLG_NOSKIP	0x00000002
#define COPYFLG_NOVERSIONCHECK	0x00000004
#define COPYFLG_FORCE_FILE_IN_USE	0x00000008
#define COPYFLG_NO_OVERWRITE	0x00000010
#define COPYFLG_NO_VERSION_DIALOG	0x00000020
#define COPYFLG_OVERWRITE_OLDER_ONLY	0x00000040
#define COPYFLG_REPLACEONLY	0x00000400
#define COPYFLG_NODECOMP	0x00000800
#define COPYFLG_REPLACE_BOOT_FILE	0x00001000
#define COPYFLG_NOPRUNE	0x00002000
#define DELFLG_IN_USE	0x00000001
#define DELFLG_IN_USE1	0x00010000
#define DI_REMOVEDEVICE_GLOBAL	0x00000001
#define DI_REMOVEDEVICE_CONFIGSPECIFIC	0x00000002
#define DI_UNREMOVEDEVICE_CONFIGSPECIFIC	0x00000002
#define DI_SHOWOEM	0x00000001
#define DI_SHOWCOMPAT	0x00000002
#define DI_SHOWCLASS	0x00000004
#define DI_SHOWALL	0x00000007
#define DI_NOVCP	0x00000008
#define DI_DIDCOMPAT	0x00000010
#define DI_DIDCLASS	0x00000020
#define DI_AUTOASSIGNRES	0x00000040
#define DI_NEEDRESTART	0x00000080
#define DI_NEEDREBOOT	0x00000100
#define DI_NOBROWSE	0x00000200
#define DI_MULTMFGS	0x00000400
#define DI_DISABLED	0x00000800
#define DI_GENERALPAGE_ADDED	0x00001000
#define DI_RESOURCEPAGE_ADDED	0x00002000
#define DI_PROPERTIES_CHANGE	0x00004000
#define DI_INF_IS_SORTED	0x00008000
#define DI_ENUMSINGLEINF	0x00010000
#define DI_DONOTCALLCONFIGMG	0x00020000
#define DI_INSTALLDISABLED	0x00040000
#define DI_COMPAT_FROM_CLASS	0x00080000
#define DI_CLASSINSTALLPARAMS	0x00100000
#define DI_NODI_DEFAULTACTION	0x00200000
#define DI_QUIETINSTALL	0x00800000
#define DI_NOFILECOPY	0x01000000
#define DI_FORCECOPY	0x02000000
#define DI_DRIVERPAGE_ADDED	0x04000000
#define DI_USECI_SELECTSTRINGS	0x08000000
#define DI_OVERRIDE_INFFLAGS	0x10000000
#define DI_PROPS_NOCHANGEUSAGE	0x20000000
#define DI_NOSELECTICONS	0x40000000
#define DI_NOWRITE_IDS	0x80000000
#define DI_FLAGSEX_USEOLDINFSEARCH	0x00000001
#define DI_FLAGSEX_AUTOSELECTRANK0	0x00000002
#define DI_FLAGSEX_CI_FAILED	0x00000004
#define DI_FLAGSEX_DIDINFOLIST	0x00000010
#define DI_FLAGSEX_DIDCOMPATINFO	0x00000020
#define DI_FLAGSEX_FILTERCLASSES	0x00000040
#define DI_FLAGSEX_SETFAILEDINSTALL	0x00000080
#define DI_FLAGSEX_DEVICECHANGE	0x00000100
#define DI_FLAGSEX_ALWAYSWRITEIDS	0x00000200
#define DI_FLAGSEX_PROPCHANGE_PENDING	0x00000400
#define DI_FLAGSEX_ALLOWEXCLUDEDDRVS	0x00000800
#define DI_FLAGSEX_NOUIONQUERYREMOVE	0x00001000
#define DI_FLAGSEX_USECLASSFORCOMPAT	0x00002000
#define DI_FLAGSEX_OLDINF_IN_CLASSLIST	0x00004000
#define DI_FLAGSEX_NO_DRVREG_MODIFY	0x00008000
#define DI_FLAGSEX_IN_SYSTEM_SETUP	0x00010000
#define DI_FLAGSEX_INET_DRIVER	0x00020000
#define DI_FLAGSEX_APPENDDRIVERLIST	0x00040000
#define DI_FLAGSEX_PREINSTALLBACKUP	0x00080000
#define DI_FLAGSEX_BACKUPONREPLACE	0x00100000
#define DI_FLAGSEX_DRIVERLIST_FROM_URL	0x00200000
#define DI_FLAGSEX_RESERVED1	0x00400000
#define DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS	0x00800000
#define DI_FLAGSEX_POWERPAGE_ADDED	0x01000000
#if (_SETUPAPI_VER >= 0x0501)
#define DI_FLAGSEX_FILTERSIMILARDRIVERS	0x02000000
#define DI_FLAGSEX_INSTALLEDDRIVER	0x04000000
#define DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE	0x08000000
#define DI_FLAGSEX_ALTPLATFORM_DRVSEARCH	0x10000000
#define DI_FLAGSEX_RESTART_DEVICE_ONLY	0x20000000
#endif
#define DIBCI_NOINSTALLCLASS	0x00000001
#define DIBCI_NODISPLAYCLASS	0x00000002
#define DICD_GENERATE_ID	0x00000001
#define DICD_INHERIT_CLASSDRVS	0x00000002
#define DICS_ENABLE	1
#define DICS_FLAG_GLOBAL	1
#define DICS_DISABLE	2
#define DICS_FLAG_CONFIGSPECIFIC	2
#define DICS_PROPCHANGE	3
#define DICS_START	4
#define DICS_FLAG_CONFIGGENERAL	4
#define DICS_STOP	5
#define DIF_SELECTDEVICE                    1
#define DIF_INSTALLDEVICE                   2
#define DIF_ASSIGNRESOURCES                 3
#define DIF_PROPERTIES                      4
#define DIF_REMOVE                          5
#define DIF_FIRSTTIMESETUP                  6
#define DIF_FOUNDDEVICE                     7
#define DIF_SELECTCLASSDRIVERS              8
#define DIF_VALIDATECLASSDRIVERS            9
#define DIF_INSTALLCLASSDRIVERS            10
#define DIF_CALCDISKSPACE                  11
#define DIF_DESTROYPRIVATEDATA             12
#define DIF_VALIDATEDRIVER                 13
#define DIF_MOVEDEVICE                     14
#define DIF_DETECT                         15
#define DIF_INSTALLWIZARD                  16
#define DIF_DESTROYWIZARDDATA              17
#define DIF_PROPERTYCHANGE                 18
#define DIF_ENABLECLASS                    19
#define DIF_DETECTVERIFY                   20
#define DIF_INSTALLDEVICEFILES             21
#define DIF_UNREMOVE                       22
#define DIF_SELECTBESTCOMPATDRV            23
#define DIF_ALLOW_INSTALL                  24
#define DIF_REGISTERDEVICE                 25
#define DIF_NEWDEVICEWIZARD_PRESELECT      26
#define DIF_NEWDEVICEWIZARD_SELECT         27
#define DIF_NEWDEVICEWIZARD_PREANALYZE     28
#define DIF_NEWDEVICEWIZARD_POSTANALYZE    29
#define DIF_NEWDEVICEWIZARD_FINISHINSTALL  30
#define DIF_UNUSED1                        31
#define DIF_INSTALLINTERFACES              32
#define DIF_DETECTCANCEL                   33
#define DIF_REGISTER_COINSTALLERS          34
#define DIF_ADDPROPERTYPAGE_ADVANCED       35
#define DIF_ADDPROPERTYPAGE_BASIC          36
#define DIF_RESERVED1                      37
#define DIF_TROUBLESHOOTER                 38
#define DIF_POWERMESSAGEWAKE               39
#define DIF_ADDREMOTEPROPERTYPAGE_ADVANCED 40
#define DIF_UPDATEDRIVER_UI                41
#define DIF_FINISHINSTALL_ACTION           42
#define DIF_RESERVED2                      48

#define DIGCDP_FLAG_BASIC	0x00000001
#define DIGCDP_FLAG_ADVANCED	0x00000002
#if (_SETUPAPI_VER >= 0x0501)
#define DIGCDP_FLAG_REMOTE_BASIC    0x00000003
#define DIGCDP_FLAG_REMOTE_ADVANCED 0x00000004
#endif
#define DIGCF_DEFAULT	0x00000001
#define DIGCF_PRESENT	0x00000002
#define DIGCF_ALLCLASSES	0x00000004
#define DIGCF_PROFILE	0x00000008
#define DIGCF_DEVICEINTERFACE	0x00000010
#define DIGCF_INTERFACEDEVICE	0x00000010
#define DIOCR_INSTALLER	0x00000001
#define DIOCR_INTERFACE	0x00000002
#define DIODI_NO_ADD	0x00000001
#define DIOD_INHERIT_CLASSDRVS	0x00000002
#define DIOD_CANCEL_REMOVE	0x00000004
#define DIREG_DEV	0x00000001
#define DIREG_DRV	0x00000002
#define DIREG_BOTH	0x00000004
#define DIRID_ABSOLUTE	-1
#define DIRID_NULL	0
#define DIRID_SRCPATH	1
#define DIRID_WINDOWS	10
#define DIRID_SYSTEM	11
#define DIRID_DRIVERS	12
#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_COMMON_STARTMENU	16406
#define DIRID_COMMON_PROGRAMS	16407
#define DIRID_COMMON_STARTUP	16408
#define DIRID_COMMON_DESKTOPDIRECTORY	16409
#define DIRID_COMMON_FAVORITES	16415
#define DIRID_COMMON_APPDATA	16419
#define DIRID_PROGRAM_FILES	16422
#define DIRID_SYSTEM_X86	16425
#define DIRID_PROGRAM_FILES_X86	16426
#define DIRID_PROGRAM_FILES_COMMON	16427
#define DIRID_PROGRAM_FILES_COMMONX86	16428
#define DIRID_COMMON_TEMPLATES	16429
#define DIRID_COMMON_DOCUMENTS	16430
#define DIRID_USER	0x8000
#define DIRID_ABSOLUTE_16BIT	0xffff
#define DIRID_IOSUBSYS	DIRID_DRIVERS
#define DIRID_DEFAULT	DIRID_SYSTEM
#define DMI_MASK	0x00000001
#define DMI_BKCOLOR	0x00000002
#define DMI_USERECT	0x00000004
#define DN_ROOT_ENUMERATED	0x00000001
#define DN_DRIVER_LOADED	0x00000002
#define DN_ENUM_LOADED	0x00000004
#define DN_STARTED	0x00000008
#define DN_MANUAL	0x00000010
#define DN_NEED_TO_ENUM	0x00000020
#define DN_NOT_FIRST_TIME	0x00000040
#define DN_HARDWARE_ENUM	0x00000080
#define DN_LIAR	0x00000100
#define DN_HAS_MARK	0x00000200
#define DN_HAS_PROBLEM	0x00000400
#define DN_FILTERED	0x00000800
#define DN_MOVED	0x00001000
#define DN_DISABLEABLE	0x00002000
#define DN_REMOVABLE	0x00004000
#define DN_PRIVATE_PROBLEM	0x00008000
#define DN_MF_PARENT	0x00010000
#define DN_MF_CHILD	0x00020000
#define DN_WILL_BE_REMOVED	0x00040000
#define DN_NOT_FIRST_TIMEE	0x00080000
#define DN_STOP_FREE_RES	0x00100000
#define DN_REBAL_CANDIDATE	0x00200000
#define DN_BAD_PARTIAL	0x00400000
#define DN_NT_ENUMERATOR	0x00800000
#define DN_NT_DRIVER	0x01000000
#define DN_NEEDS_LOCKING	0x02000000
#define DN_ARM_WAKEUP	0x04000000
#define DN_APM_ENUMERATOR	0x08000000
#define DN_APM_DRIVER	0x10000000
#define DN_SILENT_INSTALL	0x20000000
#define DN_NO_SHOW_IN_DM	0x40000000
#define DN_BOOT_LOG_PROB	0x80000000
#define DNF_DUPDESC	0x00000001
#define DNF_OLDDRIVER	0x00000002
#define DNF_EXCLUDEFROMLIST	0x00000004
#define DNF_NODRIVER	0x00000008
#define DNF_LEGACYINF	0x00000010
#define DNF_CLASS_DRIVER	0x00000020
#define DNF_COMPATIBLE_DRIVER	0x00000040
#define DNF_INET_DRIVER	0x00000080
#define DNF_UNUSED1	0x00000100
#define DNF_INDEXED_DRIVER	0x00000200
#define DNF_OLD_INET_DRIVER	0x00000400
#define DNF_BAD_DRIVER	0x00000800
#define DNF_DUPPROVIDER	0x00001000
#define DPROMPT_SUCCESS	0
#define DPROMPT_CANCEL	1
#define DPROMPT_SKIPFILE	2
#define DPROMPT_BUFFERTOOSMALL	3
#define DPROMPT_OUTOFMEMORY	4
#define DRIVER_HARDWAREID_RANK	0x00000FFF
#if (_SETUPAPI_VER >= 0x0600)
#define DRIVER_UNTRUSTED_RANK   0x80000000
#else
#define DRIVER_UNTRUSTED_RANK   0x00008000
#endif
#define DYNAWIZ_FLAG_PAGESADDED	0x00000001
#define DYNAWIZ_FLAG_INSTALLDET_NEXT	0x00000002
#define DYNAWIZ_FLAG_INSTALLDET_PREV	0x00000004
#define DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT	0x00000008
#define ENABLECLASS_QUERY	0
#define ENABLECLASS_SUCCESS	1
#define ENABLECLASS_FAILURE	2
#define ERROR_EXPECTED_SECTION_NAME	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0)
#define ERROR_BAD_SECTION_NAME_LINE	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|1)
#define ERROR_SECTION_NAME_TOO_LONG	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|2)
#define ERROR_GENERAL_SYNTAX	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|3)
#define ERROR_WRONG_INF_STYLE	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x100)
#define ERROR_NOT_INSTALLED	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x1000)
#define ERROR_SECTION_NOT_FOUND	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x101)
#define ERROR_LINE_NOT_FOUND	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x102)
#define ERROR_NO_BACKUP	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x103)
#define ERROR_NO_ASSOCIATED_CLASS	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x200)
#define ERROR_CLASS_MISMATCH	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x201)
#define ERROR_DUPLICATE_FOUND	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x202)
#define ERROR_NO_DRIVER_SELECTED	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x203)
#define ERROR_KEY_DOES_NOT_EXIST	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x204)
#define ERROR_INVALID_DEVINST_NAME	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x205)
#define ERROR_INVALID_CLASS	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x206)
#define ERROR_DEVINST_ALREADY_EXISTS	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x207)
#define ERROR_DEVINFO_NOT_REGISTERED	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x208)
#define ERROR_INVALID_REG_PROPERTY	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x209)
#define ERROR_NO_INF	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20A)
#define ERROR_NO_SUCH_DEVINST	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20B)
#define ERROR_CANT_LOAD_CLASS_ICON	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20C)
#define ERROR_INVALID_CLASS_INSTALLER	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20D)
#define ERROR_DI_DO_DEFAULT	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20E)
#define ERROR_DI_NOFILECOPY	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20F)
#define ERROR_INVALID_HWPROFILE	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x210)
#define ERROR_NO_DEVICE_SELECTED	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x211)
#define ERROR_DEVINFO_LIST_LOCKED	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x212)
#define ERROR_DEVINFO_DATA_LOCKED	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x213)
#define ERROR_DI_BAD_PATH	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x214)
#define ERROR_NO_CLASSINSTALL_PARAMS	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x215)
#define ERROR_FILEQUEUE_LOCKED	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x216)
#define ERROR_BAD_SERVICE_INSTALLSECT	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x217)
#define ERROR_NO_CLASS_DRIVER_LIST	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x218)
#define ERROR_NO_ASSOCIATED_SERVICE	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x219)
#define ERROR_NO_DEFAULT_DEVICE_INTERFACE	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21A)
#define ERROR_DEVICE_INTERFACE_ACTIVE	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21B)
#define ERROR_DEVICE_INTERFACE_REMOVED	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21C)
#define ERROR_BAD_INTERFACE_INSTALLSECT	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21D)
#define ERROR_NO_SUCH_INTERFACE_CLASS	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21E)
#define ERROR_INVALID_REFERENCE_STRING	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21F)
#define ERROR_INVALID_MACHINENAME	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x220)
#define ERROR_REMOTE_COMM_FAILURE	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x221)
#define ERROR_MACHINE_UNAVAILABLE	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x222)
#define ERROR_NO_CONFIGMGR_SERVICES	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x223)
#define ERROR_INVALID_PROPPAGE_PROVIDER	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x224)
#define ERROR_NO_SUCH_DEVICE_INTERFACE	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x225)
#define ERROR_DI_POSTPROCESSING_REQUIRED	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x226)
#define ERROR_INVALID_COINSTALLER	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x227)
#define ERROR_NO_COMPAT_DRIVERS	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x228)
#define ERROR_NO_DEVICE_ICON	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x229)
#define ERROR_INVALID_INF_LOGCONFIG	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22A)
#define ERROR_DI_DONT_INSTALL	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22B)
#define ERROR_INVALID_FILTER_DRIVER	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22C)
#define ERROR_NON_WINDOWS_NT_DRIVER	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22D)
#define ERROR_NON_WINDOWS_DRIVER	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22E)
#define ERROR_NO_CATALOG_FOR_OEM_INF	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22F)
#define ERROR_DEVINSTALL_QUEUE_NONNATIVE	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x230)
#define ERROR_NOT_DISABLEABLE	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x231)
#define ERROR_CANT_REMOVE_DEVINST	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x232)
#define ERROR_IN_WOW64	(APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x235)
#define ERROR_INTERFACE_DEVICE_ACTIVE	ERROR_DEVICE_INTERFACE_ACTIVE
#define ERROR_INTERFACE_DEVICE_REMOVED	ERROR_DEVICE_INTERFACE_REMOVED
#define ERROR_NO_DEFAULT_INTERFACE_DEVICE	ERROR_NO_DEFAULT_DEVICE_INTERFACE
#define ERROR_NO_SUCH_INTERFACE_DEVICE	ERROR_NO_SUCH_DEVICE_INTERFACE
#define ERROR_WRONG_INF_TYPE              (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x24A)

#define FILEOP_COPY	0
#define FILEOP_ABORT	0
#define FILE_COMPRESSION_NONE	0
#define FILEOP_RENAME	1
#define FILEOP_DOIT	1
#define FILE_COMPRESSION_WINLZA	1
#define FILEOP_DELETE	2
#define FILEOP_SKIP	2
#define FILE_COMPRESSION_MSZIP	2
#define FILEOP_BACKUP	3
#define FILE_COMPRESSION_NTCAB	3
#define FILEOP_NEWPATH	4
#define FILEOP_RETRY	FILEOP_DOIT
#define FLG_ADDREG_TYPE_SZ	0x00000000
#define FLG_ADDREG_BINVALUETYPE	0x00000001
#define FLG_ADDREG_NOCLOBBER	0x00000002
#define FLG_ADDREG_DELVAL	0x00000004
#define FLG_ADDREG_APPEND	0x00000008
#define FLG_ADDREG_KEYONLY	0x00000010
#define FLG_ADDREG_OVERWRITEONLY	0x00000020
#if (_SETUPAPI_VER >= 0x0501)
#define FLG_ADDREG_64BITKEY	0x00001000
#define FLG_ADDREG_KEYONLY_COMMON	0x00002000
#define FLG_ADDREG_32BITKEY	0x00004000
#define FLG_ADDREG_DELREG_BIT	0x00008000
#endif
#define FLG_ADDREG_TYPE_MULTI_SZ	0x00010000
#define FLG_ADDREG_TYPE_EXPAND_SZ	0x00020000
#define FLG_ADDREG_TYPE_BINARY	(0x00000000|FLG_ADDREG_BINVALUETYPE)
#define FLG_ADDREG_TYPE_DWORD	(0x00010000|FLG_ADDREG_BINVALUETYPE)
#define FLG_ADDREG_TYPE_NONE	(0x00020000|FLG_ADDREG_BINVALUETYPE)
#define FLG_ADDREG_TYPE_MASK	(0xFFFF0000|FLG_ADDREG_BINVALUETYPE)
#define FLG_DELREG_VALUE	0x00000000
#if (_SETUPAPI_VER >= 0x0501)
#define FLG_DELREG_TYPE_MASK	FLG_ADDREG_TYPE_MASK
#define FLG_DELREG_TYPE_SZ	FLG_ADDREG_TYPE_SZ
#define FLG_DELREG_TYPE_MULTI_SZ	FLG_ADDREG_TYPE_MULTI_SZ
#define FLG_DELREG_TYPE_EXPAND_SZ	FLG_ADDREG_TYPE_EXPAND_SZ
#define FLG_DELREG_TYPE_BINARY	FLG_ADDREG_TYPE_BINARY
#define FLG_DELREG_TYPE_DWORD	FLG_ADDREG_TYPE_DWORD
#define FLG_DELREG_TYPE_NONE	FLG_ADDREG_TYPE_NONE
#define FLG_DELREG_64BITKEY	FLG_ADDREG_64BITKEY
#define FLG_DELREG_KEYONLY_COMMON	FLG_ADDREG_KEYONLY_COMMON
#define FLG_DELREG_32BITKEY	FLG_ADDREG_32BITKEY
#define FLG_DELREG_OPERATION_MASK	0x000000FE
#define FLG_DELREG_MULTI_SZ_DELSTRING	(0x00000002|FLG_DELREG_TYPE_MULTI_SZ|FLG_ADDREG_DELREG_BIT)
#endif
#define FLG_BITREG_CLEARBITS	0x00000000
#define FLG_BITREG_SETBITS	0x00000001
#define FLG_PROFITEM_CURRENTUSER	0x00000001
#define FLG_PROFITEM_DELETE	0x00000002
#define FLG_PROFITEM_GROUP	0x00000004
#define FLG_PROFITEM_CSIDL	0x00000008
#define FLG_REGSVR_DLLREGISTER	0x00000001
#define FLG_REGSVR_DLLINSTALL	0x00000002
#define MIN_IDD_DYNAWIZ_RESOURCE_ID	10000
#define MAX_IDD_DYNAWIZ_RESOURCE_ID	11000
#define IDD_DYNAWIZ_FIRSTPAGE	10000
#define IDD_DYNAWIZ_SELECT_PREVPAGE	10001
#define IDD_DYNAWIZ_SELECT_NEXTPAGE	10002
#define IDD_DYNAWIZ_ANALYZE_PREVPAGE	10003
#define IDD_DYNAWIZ_ANALYZE_NEXTPAGE	10004
#define IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE	10006
#define IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE	10007
#define IDD_DYNAWIZ_INSTALLDETECTED_NODEVS	10008
#define IDD_DYNAWIZ_SELECTDEV_PAGE	10009
#define IDD_DYNAWIZ_ANALYZEDEV_PAGE	10010
#define IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE	10011
#define IDD_DYNAWIZ_SELECTCLASS_PAGE	10012
#define IDF_NOBROWSE	0x00000001
#define IDF_NOSKIP	0x00000002
#define IDF_NODETAILS	0x00000004
#define IDF_NOCOMPRESSED	0x00000008
#define IDF_CHECKFIRST	0x00000100
#define IDF_NOBEEP	0x00000200
#define IDF_NOFOREGROUND	0x00000400
#define IDF_WARNIFSKIP	0x00000800
#define IDF_OEMDISK	0x80000000
#define IDI_RESOURCEFIRST	159
#define IDI_RESOURCE	159
#define IDI_RESOURCELAST	161
#define IDI_RESOURCEOVERLAYFIRST	161
#define IDI_RESOURCEOVERLAYLAST	161
#define IDI_CONFLICT	161
#define IDI_PROBLEM_OVL	500
#define IDI_DISABLED_OVL	501
#define IDI_FORCED_OVL	502
#define IDI_CLASSICON_OVERLAYFIRST	500
#define IDI_CLASSICON_OVERLAYLAST	502
#define INF_STYLE_NONE	0x00000000
#define INF_STYLE_OLDNT	0x00000001
#define INF_STYLE_WIN4	0x00000002
#define INF_STYLE_CACHE_ENABLE	0x00000010
#define INF_STYLE_CACHE_DISABLE	0x00000020
#define INFINFO_INF_SPEC_IS_HINF	1
#define INFINFO_INF_NAME_IS_ABSOLUTE	2
#define INFINFO_DEFAULT_SEARCH	3
#define INFINFO_REVERSE_DEFAULT_SEARCH	4
#define INFINFO_INF_PATH_LIST_SEARCH	5
#define LogSevInformation	0
#define LogSevWarning	1
#define LogSevError	2
#define LogSevFatalError	3
#define LogSevMaximum	4
#define LogSeverity	DWORD
#define MAX_INSTALLWIZARD_DYNAPAGES	20
#define NDW_INSTALLFLAG_DIDFACTDEFS	0x00000001
#define NDW_INSTALLFLAG_HARDWAREALLREADYIN	0x00000002
#define NDW_INSTALLFLAG_NEEDSHUTDOWN	0x00000200
#define NDW_INSTALLFLAG_EXPRESSINTRO	0x00000400
#define NDW_INSTALLFLAG_SKIPISDEVINSTALLED	0x00000800
#define NDW_INSTALLFLAG_NODETECTEDDEVS	0x00001000
#define NDW_INSTALLFLAG_INSTALLSPECIFIC	0x00002000
#define NDW_INSTALLFLAG_SKIPCLASSLIST	0x00004000
#define NDW_INSTALLFLAG_CI_PICKED_OEM	0x00008000
#define NDW_INSTALLFLAG_PCMCIAMODE	0x00010000
#define NDW_INSTALLFLAG_PCMCIADEVICE	0x00020000
#define NDW_INSTALLFLAG_USERCANCEL	0x00040000
#define NDW_INSTALLFLAG_KNOWNCLASS	0x00080000
#define NDW_INSTALLFLAG_NEEDRESTART	0x00000080
#define NDW_INSTALLFLAG_NEEDREBOOT	0x00000100
#define SETDIRID_NOT_FULL_PATH	0x00000001
#define SP_COPY_DELETESOURCE	0x0000001
#define SP_COPY_REPLACEONLY	0x0000002
#define SP_COPY_NEWER	0x0000004
#define SP_COPY_NEWER_OR_SAME	0x0000004
#define SP_COPY_NOOVERWRITE	0x0000008
#define SP_COPY_NODECOMP	0x0000010
#define SP_COPY_LANGUAGEAWARE	0x0000020
#define SP_COPY_SOURCE_ABSOLUTE	0x0000040
#define SP_COPY_SOURCEPATH_ABSOLUTE	0x0000080
#define SP_COPY_IN_USE_NEEDS_REBOOT	0x0000100
#define SP_COPY_FORCE_IN_USE	0x0000200
#define SP_COPY_NOSKIP	0x0000400
#define SP_COPY_FORCE_NOOVERWRITE	0x0001000
#define SP_COPY_FORCE_NEWER	0x0002000
#define SP_COPY_WARNIFSKIP	0x0004000
#define SP_COPY_NOBROWSE	0x0008000
#define SP_COPY_NEWER_ONLY	0x0010000
#define SP_COPY_SOURCE_SIS_MASTER	0x0020000
#define SP_COPY_OEMINF_CATALOG_ONLY	0x0040000
#define SP_COPY_REPLACE_BOOT_FILE	0x0080000
#define SP_COPY_NOPRUNE	0x0100000
#define SP_FLAG_CABINETCONTINUATION	0x0000800
#define SPCRP_SECURITY	23
#define SPCRP_SECURITY_SDS	24
#define SPCRP_DEVTYPE	25
#define SPCRP_EXCLUSIVE	26
#define SPCRP_CHARACTERISTICS	27
#define SPCRP_MAXIMUM_PROPERTY	28
#define SPDIT_NODRIVER	0
#define SPDIT_CLASSDRIVER	1
#define SPDIT_COMPATDRIVER	2
#define SPDRP_DEVICEDESC	0
#define SPDRP_HARDWAREID	1
#define SPDRP_COMPATIBLEIDS	2
#define SPDRP_UNUSED0	3
#define SPDRP_SERVICE	4
#define SPDRP_UNUSED1	5
#define SPDRP_UNUSED2	6
#define SPDRP_CLASS	7
#define SPDRP_CLASSGUID	8
#define SPDRP_DRIVER	9
#define SPDRP_CONFIGFLAGS	10
#define SPDRP_MFG	11
#define SPDRP_FRIENDLYNAME	12
#define SPDRP_LOCATION_INFORMATION	13
#define SPDRP_PHYSICAL_DEVICE_OBJECT_NAME	14
#define SPDRP_CAPABILITIES	15
#define SPDRP_UI_NUMBER	16
#define SPDRP_UPPERFILTERS	17
#define SPDRP_LOWERFILTERS	18
#define SPDRP_BUSTYPEGUID	19
#define SPDRP_LEGACYBUSTYPE	20
#define SPDRP_BUSNUMBER	21
#define SPDRP_ENUMERATOR_NAME	22
#define SPDRP_SECURITY	23
#define SPDRP_SECURITY_SDS	24
#define SPDRP_DEVTYPE	25
#define SPDRP_EXCLUSIVE	26
#define SPDRP_CHARACTERISTICS	27
#define SPDRP_ADDRESS	28
#define SPDRP_UI_NUMBER_DESC_FORMAT	29
#define SPDRP_DEVICE_POWER_DATA	30
#define SPDRP_REMOVAL_POLICY	31
#define SPDRP_REMOVAL_POLICY_HW_DEFAULT	32
#define SPDRP_REMOVAL_POLICY_OVERRIDE	33
#define SPDRP_INSTALL_STATE	34
#define SPDRP_MAXIMUM_PROPERTY	35
#define SPDSL_IGNORE_DISK	1
#define SPDSL_DISALLOW_NEGATIVE_ADJUST	2

#define SPFILENOTIFY_STARTQUEUE	1
#define SPFILENOTIFY_ENDQUEUE	2
#define SPFILENOTIFY_STARTSUBQUEUE	3
#define SPFILENOTIFY_ENDSUBQUEUE	4
#define SPFILENOTIFY_STARTDELETE	5
#define SPFILENOTIFY_ENDDELETE	6
#define SPFILENOTIFY_DELETEERROR	7
#define SPFILENOTIFY_STARTRENAME	8
#define SPFILENOTIFY_ENDRENAME	9
#define SPFILENOTIFY_RENAMEERROR	10
#define SPFILENOTIFY_STARTCOPY	11
#define SPFILENOTIFY_ENDCOPY	12
#define SPFILENOTIFY_COPYERROR	13
#define SPFILENOTIFY_NEEDMEDIA	14
#define SPFILENOTIFY_QUEUESCAN	15
#define SPFILENOTIFY_CABINETINFO	16
#define SPFILENOTIFY_FILEINCABINET	17
#define SPFILENOTIFY_NEEDNEWCABINET	18
#define SPFILENOTIFY_FILEEXTRACTED	19
#define SPFILENOTIFY_FILEOPDELAYED	20
#define SPFILENOTIFY_STARTBACKUP	21
#define SPFILENOTIFY_BACKUPERROR	22
#define SPFILENOTIFY_ENDBACKUP	23
#define SPFILENOTIFY_QUEUESCAN_EX	24
#define SPFILENOTIFY_STARTREGISTRATION	25
#define SPFILENOTIFY_ENDREGISTRATION	26
#define SPFILENOTIFY_LANGMISMATCH	0x00010000
#define SPFILENOTIFY_TARGETEXISTS	0x00020000
#define SPFILENOTIFY_TARGETNEWER	0x00040000
#define SPFILELOG_SYSTEMLOG	0x00000001
#define SPFILELOG_OEMFILE	0x00000001
#define SPFILELOG_FORCENEW	0x00000002
#define SPFILELOG_QUERYONLY	0x00000004
#define SPFILEQ_FILE_IN_USE	0x00000001
#define SPFILEQ_REBOOT_RECOMMENDED	0x00000002
#define SPFILEQ_REBOOT_IN_PROGRESS	0x00000004
#define SPINT_ACTIVE	0x00000001
#define SPINT_DEFAULT	0x00000002
#define SPINT_REMOVED	0x00000004
#define SPID_ACTIVE	0x00000001
#define SPID_DEFAULT	0x00000002
#define SPID_REMOVED	0x00000004
#define SPINST_LOGCONFIG	0x00000001
#define SPINST_INIFILES	0x00000002
#define SPINST_REGISTRY	0x00000004
#define SPINST_INI2REG	0x00000008
#define SPINST_FILES	0x00000010
#define SPINST_BITREG	0x00000020
#define SPINST_REGSVR	0x00000040
#define SPINST_UNREGSVR	0x00000080
#define SPINST_PROFILEITEMS	0x00000100
#if (_SETUPAPI_VER >= 0x0501)
#define SPINST_COPYINF	0x00000200
#define SPINST_ALL	0x000003ff
#else
#define SPINST_ALL	0x000001ff
#endif
#define SPINST_SINGLESECTION	0x00010000
#define SPINST_LOGCONFIG_IS_FORCED	0x00020000
#define SPINST_LOGCONFIGS_ARE_OVERRIDES	0x00040000
#if (_SETUPAPI_VER >= 0x0501)
#define SPINST_REGISTERCALLBACKAWARE	0x00080000
#endif
#define SPOST_NONE	0
#define SPOST_PATH	1
#define SPOST_URL	2
#define SPOST_MAX	3
#define SPPSR_SELECT_DEVICE_RESOURCES	1
#define SPPSR_ENUM_BASIC_DEVICE_PROPERTIES	2
#define SPPSR_ENUM_ADV_DEVICE_PROPERTIES	3
#define SPQ_SCAN_FILE_PRESENCE	0x00000001
#define SPQ_DELAYED_COPY	0x00000001
#define SPQ_SCAN_FILE_VALIDITY	0x00000002
#define SPQ_SCAN_USE_CALLBACK	0x00000004
#define SPQ_SCAN_USE_CALLBACKEX	0x00000008
#define SPQ_SCAN_INFORM_USER	0x00000010
#define SPQ_SCAN_PRUNE_COPY_QUEUE	0x00000020
#define SPRDI_FIND_DUPS	0x00000001

#define SPSVCINST_TAGTOFRONT               0x00000001
#define SPSVCINST_ASSOCSERVICE             0x00000002
#define SPSVCINST_DELETEEVENTLOGENTRY      0x00000004
#define SPSVCINST_NOCLOBBER_DISPLAYNAME    0x00000008
#define SPSVCINST_NOCLOBBER_STARTTYPE      0x00000010
#define SPSVCINST_NOCLOBBER_ERRORCONTROL   0x00000020
#define SPSVCINST_NOCLOBBER_LOADORDERGROUP 0x00000040
#define SPSVCINST_NOCLOBBER_DEPENDENCIES   0x00000080
#define SPSVCINST_NOCLOBBER_DESCRIPTION    0x00000100
#define SPSVCINST_STOPSERVICE              0x00000200
#define SPSVCINST_CLOBBER_SECURITY         0x00000400
#define SPSVCINST_STARTSERVICE             0x00000800

#define SPWPT_SELECTDEVICE	0x00000001
#define SPWP_USE_DEVINFO_DATA	0x00000001
#define SRCINFO_PATH	1
#define SRCINFO_TAGFILE	2
#define SRCINFO_DESCRIPTION	3
#define SRCINFO_FLAGS	4
#define SRCLIST_TEMPORARY	0x00000001
#define SRCLIST_NOBROWSE	0x00000002
#define SRCLIST_SYSTEM	0x00000010
#define SRCLIST_USER	0x00000020
#define SRCLIST_SYSIFADMIN	0x00000040
#define SRCLIST_SUBDIRS	0x00000100
#define SRCLIST_APPEND	0x00000200
#define SRCLIST_NOSTRIPPLATFORM	0x00000400
#define SPREG_SUCCESS	0x00000000
#define SPREG_LOADLIBRARY	0x00000001
#define SPREG_GETPROCADDR	0x00000002
#define SPREG_REGSVR	0x00000003
#define SPREG_DLLINSTALL	0x00000004
#define SPREG_TIMEOUT	0x00000005
#define SPREG_UNKNOWN	0xFFFFFFFF

/* Flags for StringTableAddString and StringTableLookUpString */
#define ST_CASE_SENSITIVE_COMPARE	0x00000001

/* SetupUninstallOEMInf Flags values */
#define SUOI_FORCEDELETE 0x00000001

#ifndef RC_INVOKED
typedef PVOID HINF;
typedef PVOID HDSKSPC;
typedef PVOID HDEVINFO;
typedef PVOID HSPFILEQ;
typedef PVOID HSPFILELOG;
typedef UINT DI_FUNCTION;

typedef PVOID HSTRING_TABLE;

typedef enum {
    SetupFileLogSourceFilename,
    SetupFileLogChecksum,
    SetupFileLogDiskTagfile,
    SetupFileLogDiskDescription,
    SetupFileLogOtherInfo,
    SetupFileLogMax
} SetupFileLogInfo;
typedef struct _INFCONTEXT {
    PVOID Inf;
    PVOID CurrentInf;
    UINT Section;
    UINT Line;
} INFCONTEXT, *PINFCONTEXT;
typedef struct _SP_INF_INFORMATION {
    DWORD InfStyle;
    DWORD InfCount;
    BYTE VersionData[ANYSIZE_ARRAY];
} SP_INF_INFORMATION, *PSP_INF_INFORMATION;
typedef struct _SP_INF_SIGNER_INFO_A {
  DWORD cbSize;
  CHAR CatalogFile;
  CHAR DigitalSigner;
  CHAR DigitalSignerVersion;
} SP_INF_SIGNER_INFO_A, *PSP_INF_SIGNER_INFO_A;
typedef struct _SP_INF_SIGNER_INFO_W {
  DWORD cbSize;
  WCHAR CatalogFile;
  WCHAR DigitalSigner;
  WCHAR DigitalSignerVersion;
} SP_INF_SIGNER_INFO_W, *PSP_INF_SIGNER_INFO_W;
typedef struct _SP_ALTPLATFORM_INFO_V1 {
    DWORD cbSize;
    DWORD Platform;
    DWORD MajorVersion;
    DWORD MinorVersion;
    WORD  ProcessorArchitecture;
    WORD  Reserved;
} SP_ALTPLATFORM_INFO_V1, *PSP_ALTPLATFORM_INFO_V1;
typedef struct _SP_ALTPLATFORM_INFO_V2 {
  DWORD cbSize;
  DWORD Platform;
  DWORD MajorVersion;
  DWORD MinorVersion;
  WORD  ProcessorArchitecture;
    union
    {
        WORD  Reserved;
        WORD  Flags;
    } DUMMYUNIONNAME;
  DWORD FirstValidatedMajorVersion;
  DWORD FirstValidatedMinorVersion;
} SP_ALTPLATFORM_INFO_V2, *PSP_ALTPLATFORM_INFO_V2;
#if _WIN32_WINNT <= 0x0500
typedef SP_ALTPLATFORM_INFO_V1 SP_ALTPLATFORM_INFO;
typedef PSP_ALTPLATFORM_INFO_V1 PSP_ALTPLATFORM_INFO;
#else
typedef SP_ALTPLATFORM_INFO_V2 SP_ALTPLATFORM_INFO;
typedef PSP_ALTPLATFORM_INFO_V2 PSP_ALTPLATFORM_INFO;
#endif
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;
typedef struct _FILEPATHS_A {
    PCSTR  Target;
    PCSTR  Source;
    UINT   Win32Error;
    DWORD  Flags;
} FILEPATHS_A, *PFILEPATHS_A;
typedef struct _FILEPATHS_W {
    PCWSTR Target;
    PCWSTR Source;
    UINT   Win32Error;
    DWORD  Flags;
} FILEPATHS_W, *PFILEPATHS_W;
typedef struct _SOURCE_MEDIA_A {
    PCSTR Reserved;
    PCSTR Tagfile;
    PCSTR Description;
    PCSTR SourcePath;
    PCSTR SourceFile;
    DWORD Flags;
} SOURCE_MEDIA_A, *PSOURCE_MEDIA_A;
typedef struct _SOURCE_MEDIA_W {
    PCWSTR Reserved;
    PCWSTR Tagfile;
    PCWSTR Description;
    PCWSTR SourcePath;
    PCWSTR SourceFile;
    DWORD  Flags;
} SOURCE_MEDIA_W, *PSOURCE_MEDIA_W;
typedef struct _CABINET_INFO_A {
    PCSTR CabinetPath;
    PCSTR CabinetFile;
    PCSTR DiskName;
    USHORT SetId;
    USHORT CabinetNumber;
} CABINET_INFO_A, *PCABINET_INFO_A;
typedef struct _CABINET_INFO_W {
    PCWSTR CabinetPath;
    PCWSTR CabinetFile;
    PCWSTR DiskName;
    USHORT SetId;
    USHORT CabinetNumber;
} CABINET_INFO_W, *PCABINET_INFO_W;
typedef struct _FILE_IN_CABINET_INFO_A {
    PCSTR NameInCabinet;
    DWORD FileSize;
    DWORD Win32Error;
    WORD  DosDate;
    WORD  DosTime;
    WORD  DosAttribs;
    CHAR  FullTargetName[MAX_PATH];
} FILE_IN_CABINET_INFO_A, *PFILE_IN_CABINET_INFO_A;
typedef struct _FILE_IN_CABINET_INFO_W {
    PCWSTR NameInCabinet;
    DWORD  FileSize;
    DWORD  Win32Error;
    WORD   DosDate;
    WORD   DosTime;
    WORD   DosAttribs;
    WCHAR  FullTargetName[MAX_PATH];
} FILE_IN_CABINET_INFO_W, *PFILE_IN_CABINET_INFO_W;
typedef struct _SP_FILE_COPY_PARAMS_A {
    DWORD    cbSize;
    HSPFILEQ QueueHandle;
    PCSTR    SourceRootPath;
    PCSTR    SourcePath;
    PCSTR    SourceFilename;
    PCSTR    SourceDescription;
    PCSTR    SourceTagfile;
    PCSTR    TargetDirectory;
    PCSTR    TargetFilename;
    DWORD    CopyStyle;
    HINF     LayoutInf;
    PCSTR    SecurityDescriptor;
} SP_FILE_COPY_PARAMS_A, *PSP_FILE_COPY_PARAMS_A;
typedef struct _SP_FILE_COPY_PARAMS_W {
    DWORD    cbSize;
    HSPFILEQ QueueHandle;
    PCWSTR   SourceRootPath;
    PCWSTR   SourcePath;
    PCWSTR   SourceFilename;
    PCWSTR   SourceDescription;
    PCWSTR   SourceTagfile;
    PCWSTR   TargetDirectory;
    PCWSTR   TargetFilename;
    DWORD    CopyStyle;
    HINF     LayoutInf;
    PCWSTR   SecurityDescriptor;
} SP_FILE_COPY_PARAMS_W, *PSP_FILE_COPY_PARAMS_W;
typedef struct _SP_DEVINFO_DATA {
    DWORD cbSize;
    GUID  ClassGuid;
    DWORD DevInst;
    ULONG_PTR Reserved;
} SP_DEVINFO_DATA, *PSP_DEVINFO_DATA;
typedef struct _SP_DEVICE_INTERFACE_DATA {
    DWORD cbSize;
    GUID  InterfaceClassGuid;
    DWORD Flags;
    ULONG_PTR Reserved;
} SP_DEVICE_INTERFACE_DATA, *PSP_DEVICE_INTERFACE_DATA;
/* For backward compatability */
typedef SP_DEVICE_INTERFACE_DATA  SP_INTERFACE_DEVICE_DATA, *PSP_INTERFACE_DEVICE_DATA;

typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_A {
    DWORD  cbSize;
    CHAR   DevicePath[ANYSIZE_ARRAY];
} SP_DEVICE_INTERFACE_DETAIL_DATA_A, *PSP_DEVICE_INTERFACE_DETAIL_DATA_A;
typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_W {
    DWORD  cbSize;
    WCHAR  DevicePath[ANYSIZE_ARRAY];
} SP_DEVICE_INTERFACE_DETAIL_DATA_W, *PSP_DEVICE_INTERFACE_DETAIL_DATA_W;
/* For backward compatability */
typedef SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_INTERFACE_DEVICE_DETAIL_DATA_A,
    *PSP_INTERFACE_DEVICE_DETAIL_DATA_A;
typedef SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_INTERFACE_DEVICE_DETAIL_DATA_W,
    *PSP_INTERFACE_DEVICE_DETAIL_DATA_W;

typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_A {
    DWORD  cbSize;
    GUID   ClassGuid;
    HANDLE RemoteMachineHandle;
    CHAR   RemoteMachineName[SP_MAX_MACHINENAME_LENGTH];
} SP_DEVINFO_LIST_DETAIL_DATA_A, *PSP_DEVINFO_LIST_DETAIL_DATA_A;
typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_W {
    DWORD  cbSize;
    GUID   ClassGuid;
    HANDLE RemoteMachineHandle;
    WCHAR  RemoteMachineName[SP_MAX_MACHINENAME_LENGTH];
} SP_DEVINFO_LIST_DETAIL_DATA_W, *PSP_DEVINFO_LIST_DETAIL_DATA_W;

typedef UINT (CALLBACK* PSP_FILE_CALLBACK_A)(PVOID,UINT,UINT_PTR,UINT_PTR);
typedef UINT (CALLBACK* PSP_FILE_CALLBACK_W)(PVOID,UINT,UINT_PTR,UINT_PTR);
typedef struct _SP_DEVINSTALL_PARAMS_A {
    DWORD             cbSize;
    DWORD             Flags;
    DWORD             FlagsEx;
    HWND              hwndParent;
    PSP_FILE_CALLBACK_A InstallMsgHandler;
    PVOID             InstallMsgHandlerContext;
    HSPFILEQ          FileQueue;
    ULONG_PTR         ClassInstallReserved;
    DWORD             Reserved;
    CHAR              DriverPath[MAX_PATH];
} SP_DEVINSTALL_PARAMS_A, *PSP_DEVINSTALL_PARAMS_A;
typedef struct _SP_DEVINSTALL_PARAMS_W {
    DWORD             cbSize;
    DWORD             Flags;
    DWORD             FlagsEx;
    HWND              hwndParent;
    PSP_FILE_CALLBACK_W InstallMsgHandler;
    PVOID             InstallMsgHandlerContext;
    HSPFILEQ          FileQueue;
    ULONG_PTR         ClassInstallReserved;
    DWORD             Reserved;
    WCHAR             DriverPath[MAX_PATH];
} SP_DEVINSTALL_PARAMS_W, *PSP_DEVINSTALL_PARAMS_W;
typedef struct _SP_CLASSINSTALL_HEADER {
    DWORD       cbSize;
    DI_FUNCTION InstallFunction;
} SP_CLASSINSTALL_HEADER, *PSP_CLASSINSTALL_HEADER;
typedef struct _SP_ENABLECLASS_PARAMS {
    SP_CLASSINSTALL_HEADER ClassInstallHeader;
    GUID                   ClassGuid;
    DWORD                  EnableMessage;
} SP_ENABLECLASS_PARAMS, *PSP_ENABLECLASS_PARAMS;
typedef struct _SP_MOVEDEV_PARAMS {
    SP_CLASSINSTALL_HEADER ClassInstallHeader;
    SP_DEVINFO_DATA        SourceDeviceInfoData;
} SP_MOVEDEV_PARAMS, *PSP_MOVEDEV_PARAMS;
typedef struct _SP_PROPCHANGE_PARAMS {
    SP_CLASSINSTALL_HEADER ClassInstallHeader;
    DWORD                  StateChange;
    DWORD                  Scope;
    DWORD                  HwProfile;
} SP_PROPCHANGE_PARAMS, *PSP_PROPCHANGE_PARAMS;
typedef struct _SP_REMOVEDEVICE_PARAMS {
    SP_CLASSINSTALL_HEADER ClassInstallHeader;
    DWORD Scope;
    DWORD HwProfile;
} SP_REMOVEDEVICE_PARAMS, *PSP_REMOVEDEVICE_PARAMS;
typedef struct _SP_UNREMOVEDEVICE_PARAMS {
    SP_CLASSINSTALL_HEADER ClassInstallHeader;
    DWORD Scope;
    DWORD HwProfile;
} SP_UNREMOVEDEVICE_PARAMS, *PSP_UNREMOVEDEVICE_PARAMS;
typedef struct _SP_SELECTDEVICE_PARAMS_A {
    SP_CLASSINSTALL_HEADER ClassInstallHeader;
    CHAR                   Title[MAX_TITLE_LEN];
    CHAR                   Instructions[MAX_INSTRUCTION_LEN];
    CHAR                   ListLabel[MAX_LABEL_LEN];
    CHAR                   SubTitle[MAX_SUBTITLE_LEN];
    BYTE                   Reserved[2];
} SP_SELECTDEVICE_PARAMS_A, *PSP_SELECTDEVICE_PARAMS_A;
typedef struct _SP_SELECTDEVICE_PARAMS_W {
    SP_CLASSINSTALL_HEADER ClassInstallHeader;
    WCHAR                  Title[MAX_TITLE_LEN];
    WCHAR                  Instructions[MAX_INSTRUCTION_LEN];
    WCHAR                  ListLabel[MAX_LABEL_LEN];
    WCHAR                  SubTitle[MAX_SUBTITLE_LEN];
} SP_SELECTDEVICE_PARAMS_W, *PSP_SELECTDEVICE_PARAMS_W;
typedef struct _SP_REGISTER_CONTROL_STATUSA {
    DWORD                  cbSize;
    PCSTR                  FileName;
    DWORD                  Win32Error;
    DWORD                  FailureCode;
} SP_REGISTER_CONTROL_STATUSA, *PSP_REGISTER_CONTROL_STATUSA;
typedef struct _SP_REGISTER_CONTROL_STATUSW {
    DWORD                  cbSize;
    PCWSTR                 FileName;
    DWORD                  Win32Error;
    DWORD                  FailureCode;
} SP_REGISTER_CONTROL_STATUSW, *PSP_REGISTER_CONTROL_STATUSW;

typedef BOOL (CALLBACK* PDETECT_PROGRESS_NOTIFY)(PVOID,DWORD);
typedef struct _SP_DETECTDEVICE_PARAMS {
    SP_CLASSINSTALL_HEADER  ClassInstallHeader;
    PDETECT_PROGRESS_NOTIFY DetectProgressNotify;
    PVOID                   ProgressNotifyParam;
} SP_DETECTDEVICE_PARAMS, *PSP_DETECTDEVICE_PARAMS;
typedef struct _SP_INSTALLWIZARD_DATA {
    SP_CLASSINSTALL_HEADER ClassInstallHeader;
    DWORD                  Flags;
    HPROPSHEETPAGE         DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES];
    DWORD                  NumDynamicPages;
    DWORD                  DynamicPageFlags;
    DWORD                  PrivateFlags;
    LPARAM                 PrivateData;
    HWND                   hwndWizardDlg;
} SP_INSTALLWIZARD_DATA, *PSP_INSTALLWIZARD_DATA;
typedef struct _SP_NEWDEVICEWIZARD_DATA {
    SP_CLASSINSTALL_HEADER ClassInstallHeader;
    DWORD                  Flags;
    HPROPSHEETPAGE         DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES];
    DWORD                  NumDynamicPages;
    HWND                   hwndWizardDlg;
} SP_NEWDEVICEWIZARD_DATA, *PSP_NEWDEVICEWIZARD_DATA;
typedef SP_NEWDEVICEWIZARD_DATA SP_ADDPROPERTYPAGE_DATA,
    *PSP_ADDPROPERTYPAGE_DATA;
typedef struct _SP_TROUBLESHOOTER_PARAMS_A {
    SP_CLASSINSTALL_HEADER ClassInstallHeader;
    CHAR                   ChmFile[MAX_PATH];
    CHAR                   HtmlTroubleShooter[MAX_PATH];
} SP_TROUBLESHOOTER_PARAMS_A, *PSP_TROUBLESHOOTER_PARAMS_A;
typedef struct _SP_TROUBLESHOOTER_PARAMS_W {
    SP_CLASSINSTALL_HEADER ClassInstallHeader;
    WCHAR                  ChmFile[MAX_PATH];
    WCHAR                  HtmlTroubleShooter[MAX_PATH];
} SP_TROUBLESHOOTER_PARAMS_W, *PSP_TROUBLESHOOTER_PARAMS_W;
typedef struct _SP_POWERMESSAGEWAKE_PARAMS_A {
    SP_CLASSINSTALL_HEADER ClassInstallHeader;
    CHAR                   PowerMessageWake[LINE_LEN*2];
} SP_POWERMESSAGEWAKE_PARAMS_A, *PSP_POWERMESSAGEWAKE_PARAMS_A;
typedef struct _SP_POWERMESSAGEWAKE_PARAMS_W {
    SP_CLASSINSTALL_HEADER ClassInstallHeader;
    WCHAR                  PowerMessageWake[LINE_LEN*2];
} SP_POWERMESSAGEWAKE_PARAMS_W, *PSP_POWERMESSAGEWAKE_PARAMS_W;
typedef struct _SP_DRVINFO_DATA_V2_A {
    DWORD     cbSize;
    DWORD     DriverType;
    ULONG_PTR Reserved;
    CHAR      Description[LINE_LEN];
    CHAR      MfgName[LINE_LEN];
    CHAR      ProviderName[LINE_LEN];
    FILETIME  DriverDate;
    DWORDLONG DriverVersion;
} SP_DRVINFO_DATA_V2_A, *PSP_DRVINFO_DATA_V2_A;
typedef struct _SP_DRVINFO_DATA_V2_W {
    DWORD     cbSize;
    DWORD     DriverType;
    ULONG_PTR Reserved;
    WCHAR     Description[LINE_LEN];
    WCHAR     MfgName[LINE_LEN];
    WCHAR     ProviderName[LINE_LEN];
    FILETIME  DriverDate;
    DWORDLONG DriverVersion;
} SP_DRVINFO_DATA_V2_W, *PSP_DRVINFO_DATA_V2_W;
typedef struct _SP_DRVINFO_DATA_V1_A {
    DWORD     cbSize;
    DWORD     DriverType;
    ULONG_PTR Reserved;
    CHAR      Description[LINE_LEN];
    CHAR      MfgName[LINE_LEN];
    CHAR      ProviderName[LINE_LEN];
} SP_DRVINFO_DATA_V1_A, *PSP_DRVINFO_DATA_V1_A;
typedef struct _SP_DRVINFO_DATA_V1_W {
    DWORD     cbSize;
    DWORD     DriverType;
    ULONG_PTR Reserved;
    WCHAR     Description[LINE_LEN];
    WCHAR     MfgName[LINE_LEN];
    WCHAR     ProviderName[LINE_LEN];
} SP_DRVINFO_DATA_V1_W, *PSP_DRVINFO_DATA_V1_W;

#ifdef UNICODE
typedef SP_DRVINFO_DATA_V1_W SP_DRVINFO_DATA_V1, *PSP_DRVINFO_DATA_V1;
typedef SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_V2, *PSP_DRVINFO_DATA_V2;
#else
typedef SP_DRVINFO_DATA_V1_A SP_DRVINFO_DATA_V1, *PSP_DRVINFO_DATA_V1;
typedef SP_DRVINFO_DATA_V2_A SP_DRVINFO_DATA_V2, *PSP_DRVINFO_DATA_V2;
#endif

#if USE_SP_DRVINFO_DATA_V1
typedef SP_DRVINFO_DATA_V1_A SP_DRVINFO_DATA_A, *PSP_DRVINFO_DATA_A;
typedef SP_DRVINFO_DATA_V1_W SP_DRVINFO_DATA_W, *PSP_DRVINFO_DATA_W;
typedef SP_DRVINFO_DATA_V1 SP_DRVINFO_DATA, *PSP_DRVINFO_DATA;
#else
typedef SP_DRVINFO_DATA_V2_A SP_DRVINFO_DATA_A, *PSP_DRVINFO_DATA_A;
typedef SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_W, *PSP_DRVINFO_DATA_W;
typedef SP_DRVINFO_DATA_V2 SP_DRVINFO_DATA, *PSP_DRVINFO_DATA;
#endif

typedef DWORD (CALLBACK* PSP_DETSIG_CMPPROC)(HDEVINFO,PSP_DEVINFO_DATA,PSP_DEVINFO_DATA,PVOID);

typedef struct _SP_DRVINFO_DETAIL_DATA_A {
    DWORD    cbSize;
    FILETIME InfDate;
    DWORD    CompatIDsOffset;
    DWORD    CompatIDsLength;
    ULONG_PTR Reserved;
    CHAR     SectionName[LINE_LEN];
    CHAR     InfFileName[MAX_PATH];
    CHAR     DrvDescription[LINE_LEN];
    CHAR     HardwareID[ANYSIZE_ARRAY];
} SP_DRVINFO_DETAIL_DATA_A, *PSP_DRVINFO_DETAIL_DATA_A;
typedef struct _SP_DRVINFO_DETAIL_DATA_W {
    DWORD    cbSize;
    FILETIME InfDate;
    DWORD    CompatIDsOffset;
    DWORD    CompatIDsLength;
    ULONG_PTR Reserved;
    WCHAR    SectionName[LINE_LEN];
    WCHAR    InfFileName[MAX_PATH];
    WCHAR    DrvDescription[LINE_LEN];
    WCHAR    HardwareID[ANYSIZE_ARRAY];
} SP_DRVINFO_DETAIL_DATA_W, *PSP_DRVINFO_DETAIL_DATA_W;
typedef struct _SP_DRVINSTALL_PARAMS {
    DWORD cbSize;
    DWORD Rank;
    DWORD Flags;
    DWORD_PTR PrivateData;
    DWORD Reserved;
} SP_DRVINSTALL_PARAMS, *PSP_DRVINSTALL_PARAMS;


typedef struct _COINSTALLER_CONTEXT_DATA {
    BOOL  PostProcessing;
    DWORD InstallResult;
    PVOID PrivateData;
} COINSTALLER_CONTEXT_DATA, *PCOINSTALLER_CONTEXT_DATA;
typedef struct _SP_CLASSIMAGELIST_DATA {
    DWORD      cbSize;
    HIMAGELIST ImageList;
    ULONG_PTR  Reserved;
} SP_CLASSIMAGELIST_DATA, *PSP_CLASSIMAGELIST_DATA;
typedef struct _SP_PROPSHEETPAGE_REQUEST {
    DWORD            cbSize;
    DWORD            PageRequested;
    HDEVINFO         DeviceInfoSet;
    PSP_DEVINFO_DATA DeviceInfoData;
} SP_PROPSHEETPAGE_REQUEST, *PSP_PROPSHEETPAGE_REQUEST;
typedef struct _SP_BACKUP_QUEUE_PARAMS_A {
    DWORD    cbSize;
    CHAR     FullInfPath[MAX_PATH];
    INT      FilenameOffset;
} SP_BACKUP_QUEUE_PARAMS_A, *PSP_BACKUP_QUEUE_PARAMS_A;
typedef struct _SP_BACKUP_QUEUE_PARAMS_W {
    DWORD    cbSize;
    WCHAR    FullInfPath[MAX_PATH];
    INT      FilenameOffset;
} SP_BACKUP_QUEUE_PARAMS_W, *PSP_BACKUP_QUEUE_PARAMS_W;


#ifdef UNICODE
typedef SP_ORIGINAL_FILE_INFO_W SP_ORIGINAL_FILE_INFO, *PSP_ORIGINAL_FILE_INFO;
typedef FILEPATHS_W FILEPATHS, *PFILEPATHS;
typedef SOURCE_MEDIA_W SOURCE_MEDIA, *PSOURCE_MEDIA;
typedef CABINET_INFO_W CABINET_INFO, *PCABINET_INFO;
typedef FILE_IN_CABINET_INFO_W FILE_IN_CABINET_INFO, *PFILE_IN_CABINET_INFO;
typedef SP_FILE_COPY_PARAMS_W SP_FILE_COPY_PARAMS, PSP_FILE_COPY_PARAMS;
typedef SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_DEVICE_INTERFACE_DETAIL_DATA,
    *PSP_DEVICE_INTERFACE_DETAIL_DATA;
typedef SP_INTERFACE_DEVICE_DETAIL_DATA_W SP_INTERFACE_DEVICE_DETAIL_DATA,
    *PSP_INTERFACE_DEVICE_DETAIL_DATA; /* deprecated */
typedef SP_DEVINFO_LIST_DETAIL_DATA_W SP_DEVINFO_LIST_DETAIL_DATA,
    *PSP_DEVINFO_LIST_DETAIL_DATA;
typedef SP_DEVINSTALL_PARAMS_W SP_DEVINSTALL_PARAMS, *PSP_DEVINSTALL_PARAMS;
typedef SP_SELECTDEVICE_PARAMS_W SP_SELECTDEVICE_PARAMS, *PSP_SELECTDEVICE_PARAMS;
typedef SP_TROUBLESHOOTER_PARAMS_W SP_TROUBLESHOOTER_PARAMS,
    *PSP_TROUBLESHOOTER_PARAMS;
typedef SP_POWERMESSAGEWAKE_PARAMS_W SP_POWERMESSAGEWAKE_PARAMS,
    *PSP_POWERMESSAGEWAKE_PARAMS;
typedef SP_DRVINFO_DETAIL_DATA_W SP_DRVINFO_DETAIL_DATA,
     *PSP_DRVINFO_DETAIL_DATA;
typedef SP_BACKUP_QUEUE_PARAMS_W SP_BACKUP_QUEUE_PARAMS,
    *PSP_BACKUP_QUEUE_PARAMS;
typedef SP_REGISTER_CONTROL_STATUSW SP_REGISTER_CONTROL_STATUS, *PSP_REGISTER_CONTROL_STATUS;
#else
typedef SP_ORIGINAL_FILE_INFO_A SP_ORIGINAL_FILE_INFO, *PSP_ORIGINAL_FILE_INFO;
typedef FILEPATHS_A FILEPATHS, *PFILEPATHS;
typedef SOURCE_MEDIA_A SOURCE_MEDIA, *PSOURCE_MEDIA;
typedef CABINET_INFO_A CABINET_INFO, *PCABINET_INFO;
typedef FILE_IN_CABINET_INFO_A FILE_IN_CABINET_INFO, *PFILE_IN_CABINET_INFO;
typedef SP_FILE_COPY_PARAMS_A SP_FILE_COPY_PARAMS, *PSP_FILE_COPY_PARAMS;
typedef SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_DEVICE_INTERFACE_DETAIL_DATA,
    *PSP_DEVICE_INTERFACE_DETAIL_DATA;
typedef SP_INTERFACE_DEVICE_DETAIL_DATA_A SP_INTERFACE_DEVICE_DETAIL_DATA,
    *PSP_INTERFACE_DEVICE_DETAIL_DATA; /* deprecated */
typedef SP_DEVINFO_LIST_DETAIL_DATA_A SP_DEVINFO_LIST_DETAIL_DATA,
    *PSP_DEVINFO_LIST_DETAIL_DATA;
typedef SP_DEVINSTALL_PARAMS_A SP_DEVINSTALL_PARAMS, *PSP_DEVINSTALL_PARAMS;
typedef SP_SELECTDEVICE_PARAMS_A SP_SELECTDEVICE_PARAMS,
    *PSP_SELECTDEVICE_PARAMS;
typedef SP_TROUBLESHOOTER_PARAMS_A SP_TROUBLESHOOTER_PARAMS,
    *PSP_TROUBLESHOOTER_PARAMS;
typedef SP_POWERMESSAGEWAKE_PARAMS_A SP_POWERMESSAGEWAKE_PARAMS,
    *PSP_POWERMESSAGEWAKE_PARAMS;
typedef SP_DRVINFO_DETAIL_DATA_A SP_DRVINFO_DETAIL_DATA,
    *PSP_DRVINFO_DETAIL_DATA;
typedef SP_BACKUP_QUEUE_PARAMS_A SP_BACKUP_QUEUE_PARAMS,
    *PSP_BACKUP_QUEUE_PARAMS;
typedef SP_REGISTER_CONTROL_STATUSA SP_REGISTER_CONTROL_STATUS, *PSP_REGISTER_CONTROL_STATUS;
#endif /* UNICODE */


WINSETUPAPI LONG WINAPI AddTagToGroupOrderList(PCWSTR, DWORD, DWORD);
WINSETUPAPI VOID WINAPI AssertFail(LPSTR, UINT, LPSTR);
WINSETUPAPI DWORD WINAPI CaptureStringArg(PCWSTR, PWSTR*);
WINSETUPAPI BOOL WINAPI DelayedMove(PCWSTR, PCWSTR);
WINSETUPAPI BOOL WINAPI DoesUserHavePrivilege(PCWSTR);
WINSETUPAPI BOOL WINAPI FileExists(PCWSTR, PWIN32_FIND_DATAW);
WINSETUPAPI DWORD WINAPI GetSetFileTimestamp(PCWSTR, PFILETIME, PFILETIME, PFILETIME, BOOLEAN);
WINSETUPAPI VOID WINAPI InstallHinfSectionA(_In_ HWND, _In_ HINSTANCE, _In_ PCSTR, _In_ INT);
WINSETUPAPI VOID WINAPI InstallHinfSectionW(_In_ HWND, _In_ HINSTANCE, _In_ PCWSTR, _In_ INT);
WINSETUPAPI BOOL WINAPI IsUserAdmin(VOID);
WINSETUPAPI VOID WINAPI MyFree(PVOID);
WINSETUPAPI PVOID WINAPI MyMalloc(DWORD);
WINSETUPAPI PVOID WINAPI MyRealloc(PVOID, DWORD);
WINSETUPAPI LONG WINAPI QueryRegistryValue(HKEY, PCWSTR, PBYTE*, PDWORD, PDWORD);
WINSETUPAPI DWORD WINAPI RetreiveFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR*);

WINSETUPAPI BOOL WINAPI SetupAddInstallSectionToDiskSpaceListA(_In_ HDSKSPC, _In_ HINF, _In_opt_ HINF, _In_ PCSTR, _Reserved_ PVOID, _Reserved_ UINT);
WINSETUPAPI BOOL WINAPI SetupAddInstallSectionToDiskSpaceListW(_In_ HDSKSPC, _In_ HINF, _In_opt_ HINF, _In_ PCWSTR, _Reserved_ PVOID, _Reserved_ UINT);
WINSETUPAPI BOOL WINAPI SetupAddSectionToDiskSpaceListA(_In_ HDSKSPC, _In_ HINF, _In_opt_ HINF, _In_ PCSTR, _In_ UINT, _Reserved_ PVOID, _Reserved_ UINT);
WINSETUPAPI BOOL WINAPI SetupAddSectionToDiskSpaceListW(_In_ HDSKSPC, _In_ HINF, _In_opt_ HINF, _In_ PCWSTR, _In_ UINT, _Reserved_ PVOID, _Reserved_ UINT);
WINSETUPAPI BOOL WINAPI SetupAddToDiskSpaceListA(_In_ HDSKSPC, _In_ PCSTR, _In_ LONGLONG, _In_ UINT, _Reserved_ PVOID, _Reserved_ UINT);
WINSETUPAPI BOOL WINAPI SetupAddToDiskSpaceListW(_In_ HDSKSPC, _In_ PCWSTR, _In_ LONGLONG, _In_ UINT, _Reserved_ PVOID, _Reserved_ UINT);
WINSETUPAPI BOOL WINAPI SetupAddToSourceListA(_In_ DWORD, _In_ PCSTR);
WINSETUPAPI BOOL WINAPI SetupAddToSourceListW(_In_ DWORD, _In_ PCWSTR);
WINSETUPAPI BOOL WINAPI SetupAdjustDiskSpaceListA(_In_ HDSKSPC, _In_ LPCSTR, _In_ LONGLONG, _Reserved_ PVOID, _Reserved_ UINT);
WINSETUPAPI BOOL WINAPI SetupAdjustDiskSpaceListW(_In_ HDSKSPC, _In_ LPCWSTR, _In_ LONGLONG, _Reserved_ PVOID, _Reserved_ UINT);
WINSETUPAPI UINT WINAPI SetupBackupErrorA(_In_ HWND, _In_opt_ PCSTR, _In_ PCSTR, _In_opt_ PCSTR, _In_ UINT, _In_ DWORD);
WINSETUPAPI UINT WINAPI SetupBackupErrorW(_In_ HWND, _In_opt_ PCWSTR, _In_ PCWSTR, _In_opt_ PCWSTR, _In_ UINT, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupCancelTemporary(VOID);
WINSETUPAPI BOOL WINAPI SetupCloseFileQueue(_In_ HSPFILEQ);
WINSETUPAPI VOID WINAPI SetupCloseInfFile(_In_ HINF);
WINSETUPAPI VOID WINAPI SetupCloseLog(VOID);
WINSETUPAPI BOOL WINAPI SetupCommitFileQueueA(_In_opt_ HWND, _In_ HSPFILEQ, _In_ PSP_FILE_CALLBACK_A, _In_ PVOID);
WINSETUPAPI BOOL WINAPI SetupCommitFileQueueW(_In_opt_ HWND, _In_ HSPFILEQ, _In_ PSP_FILE_CALLBACK_W, _In_ PVOID);

WINSETUPAPI
UINT
WINAPI
SetupCopyErrorA(
  _In_ HWND hwndParent,
  _In_opt_ PCSTR DialogTitle,
  _In_opt_ PCSTR DiskName,
  _In_ PCSTR PathToSource,
  _In_ PCSTR SourceFile,
  _In_opt_ PCSTR TargetPathFile,
  _In_ UINT Win32ErrorCode,
  _In_ DWORD Style,
  _Out_writes_opt_(PathBufferSize) PSTR PathBuffer,
  _In_ DWORD PathBufferSize,
  _Out_opt_ PDWORD PathRequiredSize);

WINSETUPAPI
UINT
WINAPI
SetupCopyErrorW(
  _In_ HWND hwndParent,
  _In_opt_ PCWSTR DialogTitle,
  _In_opt_ PCWSTR DiskName,
  _In_ PCWSTR PathToSource,
  _In_ PCWSTR SourceFile,
  _In_opt_ PCWSTR TargetPathFile,
  _In_ UINT Win32ErrorCode,
  _In_ DWORD Style,
  _Out_writes_opt_(PathBufferSize) PWSTR PathBuffer,
  _In_ DWORD PathBufferSize,
  _Out_opt_ PDWORD PathRequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupCopyOEMInfA(
  _In_ PCSTR SourceInfFileName,
  _In_opt_ PCSTR OEMSourceMediaLocation,
  _In_ DWORD OEMSourceMediaType,
  _In_ DWORD CopyStyle,
  _Out_writes_opt_(DestinationInfFileNameSize) PSTR DestinationInfFileName,
  _In_ DWORD DestinationInfFileNameSize,
  _Out_opt_ PDWORD RequiredSize,
  _Out_opt_ PSTR *DestinationInfFileNameComponent);

WINSETUPAPI
BOOL
WINAPI
SetupCopyOEMInfW(
  _In_ PCWSTR SourceInfFileName,
  _In_opt_ PCWSTR OEMSourceMediaLocation,
  _In_ DWORD OEMSourceMediaType,
  _In_ DWORD CopyStyle,
  _Out_writes_opt_(DestinationInfFileNameSize) PWSTR DestinationInfFileName,
  _In_ DWORD DestinationInfFileNameSize,
  _Out_opt_ PDWORD RequiredSize,
  _Out_opt_ PWSTR  *DestinationInfFileNameComponent);

WINSETUPAPI HDSKSPC WINAPI SetupCreateDiskSpaceListA(_Reserved_ PVOID, _Reserved_ DWORD, _In_ UINT);
WINSETUPAPI HDSKSPC WINAPI SetupCreateDiskSpaceListW(_Reserved_ PVOID, _Reserved_ DWORD, _In_ UINT);
WINSETUPAPI DWORD WINAPI SetupDecompressOrCopyFileA(_In_ PCSTR, _In_ PCSTR, _In_opt_ PUINT);
WINSETUPAPI DWORD WINAPI SetupDecompressOrCopyFileW(_In_ PCWSTR, _In_ PCWSTR, _In_opt_ PUINT);
WINSETUPAPI UINT WINAPI SetupDefaultQueueCallbackA(_In_ PVOID, _In_ UINT, _In_ UINT_PTR, _In_ UINT_PTR);
WINSETUPAPI UINT WINAPI SetupDefaultQueueCallbackW(_In_ PVOID, _In_ UINT, _In_ UINT_PTR, _In_ UINT_PTR);
WINSETUPAPI UINT WINAPI SetupDeleteErrorA(_In_ HWND, _In_opt_ PCSTR, _In_ PCSTR, _In_ UINT, _In_ DWORD);
WINSETUPAPI UINT WINAPI SetupDeleteErrorW(_In_ HWND, _In_opt_ PCWSTR, _In_ PCWSTR, _In_ UINT, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupDestroyDiskSpaceList(_Inout_ HDSKSPC);
WINSETUPAPI BOOL WINAPI SetupDiAskForOEMDisk(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA);

_Success_(return != FALSE)
WINSETUPAPI
BOOL
WINAPI
SetupDiBuildClassInfoList(
  _In_ DWORD Flags,
  _Out_writes_to_opt_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList,
  _In_ DWORD ClassGuidListSize,
  _Out_ PDWORD RequiredSize);

_Success_(return != FALSE)
WINSETUPAPI
BOOL
WINAPI
SetupDiBuildClassInfoListExA(
  _In_ DWORD Flags,
  _Out_writes_to_opt_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList,
  _In_ DWORD ClassGuidListSize,
  _Out_ PDWORD RequiredSize,
  _In_opt_ PCSTR MachineName,
  _Reserved_ PVOID Reserved);

_Success_(return != FALSE)
WINSETUPAPI
BOOL
WINAPI
SetupDiBuildClassInfoListExW(
  _In_ DWORD Flags,
  _Out_writes_to_opt_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList,
  _In_ DWORD ClassGuidListSize,
  _Out_ PDWORD RequiredSize,
  _In_opt_ PCWSTR MachineName,
  _Reserved_ PVOID Reserved);

WINSETUPAPI BOOL WINAPI SetupDiBuildDriverInfoList(_In_ HDEVINFO, _Inout_opt_ PSP_DEVINFO_DATA, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupDiCallClassInstaller(_In_ DI_FUNCTION, _In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupDiCancelDriverInfoSearch(_In_ HDEVINFO);
WINSETUPAPI BOOL WINAPI SetupDiChangeState(_In_ HDEVINFO, _Inout_ PSP_DEVINFO_DATA);

_Success_(return != FALSE)
WINSETUPAPI
BOOL
WINAPI
SetupDiClassGuidsFromNameA(
  _In_ PCSTR ClassName,
  _Out_writes_to_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList,
  _In_ DWORD ClassGuidListSize,
  _Out_ PDWORD RequiredSize);

_Success_(return != FALSE)
WINSETUPAPI
BOOL
WINAPI
SetupDiClassGuidsFromNameW(
  _In_ PCWSTR ClassName,
  _Out_writes_to_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList,
  _In_ DWORD ClassGuidListSize,
  _Out_ PDWORD RequiredSize);

_Success_(return != FALSE)
WINSETUPAPI
BOOL
WINAPI
SetupDiClassGuidsFromNameExA(
  _In_ PCSTR ClassName,
  _Out_writes_to_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList,
  _In_ DWORD ClassGuidListSize,
  _Out_ PDWORD RequiredSize,
  _In_opt_ PCSTR MachineName,
  _Reserved_ PVOID Reserved);

_Success_(return != FALSE)
WINSETUPAPI
BOOL
WINAPI
SetupDiClassGuidsFromNameExW(
  _In_ PCWSTR ClassName,
  _Out_writes_to_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList,
  _In_ DWORD ClassGuidListSize,
  _Out_ PDWORD RequiredSize,
  _In_opt_ PCWSTR MachineName,
  _Reserved_ PVOID Reserved);

WINSETUPAPI
BOOL
WINAPI
SetupDiClassNameFromGuidA(
  _In_ CONST GUID *ClassGuid,
  _Out_writes_(ClassNameSize) PSTR ClassName,
  _In_ DWORD ClassNameSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupDiClassNameFromGuidW(
  _In_ CONST GUID *ClassGuid,
  _Out_writes_(ClassNameSize) PWSTR ClassName,
  _In_ DWORD ClassNameSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupDiClassNameFromGuidExA(
  _In_ CONST GUID *ClassGuid,
  _Out_writes_(ClassNameSize) PSTR ClassName,
  _In_ DWORD ClassNameSize,
  _Out_opt_ PDWORD RequiredSize,
  _In_opt_ PCSTR MachineName,
  _Reserved_ PVOID Reserved);

WINSETUPAPI
BOOL
WINAPI
SetupDiClassNameFromGuidExW(
  _In_ CONST GUID *ClassGuid,
  _Out_writes_(ClassNameSize) PWSTR ClassName,
  _In_ DWORD ClassNameSize,
  _Out_opt_ PDWORD RequiredSize,
  _In_opt_ PCWSTR MachineName,
  _Reserved_ PVOID Reserved);

WINSETUPAPI BOOL WINAPI SetupDiCreateDeviceInfoA(_In_ HDEVINFO, _In_ PCSTR, _In_ CONST GUID*, _In_opt_ PCSTR, _In_opt_ HWND, _In_ DWORD, _Out_opt_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupDiCreateDeviceInfoW(_In_ HDEVINFO, _In_ PCWSTR, _In_ CONST GUID*, _In_opt_ PCWSTR, _In_opt_ HWND, _In_ DWORD, _Out_opt_ PSP_DEVINFO_DATA);
_Check_return_ WINSETUPAPI HDEVINFO WINAPI SetupDiCreateDeviceInfoList(_In_opt_ CONST GUID*, _In_opt_ HWND);
_Check_return_ WINSETUPAPI HDEVINFO WINAPI SetupDiCreateDeviceInfoListExA(_In_opt_ CONST GUID*, _In_opt_ HWND, _In_opt_ PCSTR, _Reserved_ PVOID);
_Check_return_ WINSETUPAPI HDEVINFO WINAPI SetupDiCreateDeviceInfoListExW(_In_opt_ CONST GUID*, _In_opt_ HWND, _In_opt_ PCWSTR, _Reserved_ PVOID);
WINSETUPAPI BOOL WINAPI SetupDiCreateDeviceInterfaceA(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA, _In_ CONST GUID*, _In_opt_ PCSTR, _In_ DWORD, _Out_opt_ PSP_DEVICE_INTERFACE_DATA);
WINSETUPAPI BOOL WINAPI SetupDiCreateDeviceInterfaceW(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA, _In_ CONST GUID*, _In_opt_ PCWSTR, _In_ DWORD, _Out_opt_ PSP_DEVICE_INTERFACE_DATA);
_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyA(_In_ HDEVINFO, _In_ PSP_DEVICE_INTERFACE_DATA, _Reserved_ DWORD, _In_ REGSAM, _In_opt_ HINF, _In_opt_ PCSTR);
_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyW(_In_ HDEVINFO, _In_ PSP_DEVICE_INTERFACE_DATA, _Reserved_ DWORD, _In_ REGSAM, _In_opt_ HINF, _In_opt_ PCWSTR);
_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiCreateDevRegKeyA(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ HINF, _In_opt_ PCSTR);
_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiCreateDevRegKeyW(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ HINF, _In_opt_ PCWSTR);
WINSETUPAPI BOOL WINAPI SetupDiDeleteDeviceInfo(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupDiDeleteDeviceInterfaceData(_In_ HDEVINFO, _In_ PSP_DEVICE_INTERFACE_DATA);
WINSETUPAPI BOOL WINAPI SetupDiDeleteDeviceInterfaceRegKey(_In_ HDEVINFO, _In_ PSP_DEVICE_INTERFACE_DATA, _Reserved_ DWORD);
WINSETUPAPI BOOL WINAPI SetupDiDeleteDevRegKey(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA, _In_ DWORD, _In_ DWORD, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupDiDestroyClassImageList(_In_ PSP_CLASSIMAGELIST_DATA);
WINSETUPAPI BOOL WINAPI SetupDiDestroyDeviceInfoList(_In_ HDEVINFO);
WINSETUPAPI BOOL WINAPI SetupDiDestroyDriverInfoList(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ DWORD);
WINSETUPAPI INT WINAPI SetupDiDrawMiniIcon(_In_ HDC, _In_ RECT, _In_ INT, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupDiEnumDeviceInfo(_In_ HDEVINFO, _In_ DWORD, _Out_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupDiEnumDeviceInterfaces(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ CONST GUID*, _In_ DWORD, _Out_ PSP_DEVICE_INTERFACE_DATA);
WINSETUPAPI BOOL WINAPI SetupDiEnumDriverInfoA(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ DWORD, _In_ DWORD, _Out_ PSP_DRVINFO_DATA_A);
WINSETUPAPI BOOL WINAPI SetupDiEnumDriverInfoW(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ DWORD, _In_ DWORD, _Out_ PSP_DRVINFO_DATA_W);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetActualSectionToInstallA(
  _In_ HINF InfHandle,
  _In_ PCSTR InfSectionName,
  _Out_writes_opt_(InfSectionWithExtSize) PSTR InfSectionWithExt,
  _In_ DWORD InfSectionWithExtSize,
  _Out_opt_ PDWORD RequiredSize,
  _Out_opt_ PSTR *Extension);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetActualSectionToInstallW(
  _In_ HINF InfHandle,
  _In_ PCWSTR InfSectionName,
  _Out_writes_opt_(InfSectionWithExtSize) PWSTR InfSectionWithExt,
  _In_ DWORD InfSectionWithExtSize,
  _Out_opt_ PDWORD RequiredSize,
  _Out_opt_ PWSTR *Extension);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetActualSectionToInstallExA(
  _In_ HINF InfHandle,
  _In_ PCSTR InfSectionName,
  _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo,
  _Out_writes_opt_(InfSectionWithExtSize) PSTR InfSectionWithExt,
  _In_ DWORD InfSectionWithExtSize,
  _Out_opt_ PDWORD RequiredSize,
  _Out_opt_ PSTR *Extension,
  _Reserved_ PVOID Reserved);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetActualSectionToInstallExW(
  _In_ HINF InfHandle,
  _In_ PCWSTR InfSectionName,
  _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo,
  _Out_writes_opt_(InfSectionWithExtSize) PWSTR InfSectionWithExt,
  _In_ DWORD InfSectionWithExtSize,
  _Out_opt_ PDWORD RequiredSize,
  _Out_opt_ PWSTR *Extension,
  _Reserved_ PVOID Reserved);

WINSETUPAPI BOOL WINAPI SetupDiGetClassBitmapIndex(_In_opt_ CONST GUID*, _Out_ PINT);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetClassDescriptionA(
  _In_ CONST GUID *ClassGuid,
  _Out_writes_(ClassDescriptionSize) PSTR ClassDescription,
  _In_ DWORD ClassDescriptionSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetClassDescriptionW(
  _In_ CONST GUID *ClassGuid,
  _Out_writes_(ClassDescriptionSize) PWSTR ClassDescription,
  _In_ DWORD ClassDescriptionSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetClassDescriptionExA(
  _In_ CONST GUID *ClassGuid,
  _Out_writes_(ClassDescriptionSize) PSTR ClassDescription,
  _In_ DWORD ClassDescriptionSize,
  _Out_opt_ PDWORD RequiredSize,
  _In_opt_ PCSTR MachineName,
  _Reserved_ PVOID Reserved);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetClassDescriptionExW(
  _In_ CONST GUID *ClassGuid,
  _Out_writes_(ClassDescriptionSize) PWSTR ClassDescription,
  _In_ DWORD ClassDescriptionSize,
  _Out_opt_ PDWORD RequiredSize,
  _In_opt_ PCWSTR MachineName,
  _Reserved_ PVOID Reserved);

WINSETUPAPI BOOL WINAPI SetupDiGetClassDevPropertySheetsA(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ LPPROPSHEETHEADERA, _In_ DWORD, _Out_opt_ PDWORD, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupDiGetClassDevPropertySheetsW(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ LPPROPSHEETHEADERW, _In_ DWORD, _Out_opt_ PDWORD, _In_ DWORD);
_Check_return_ WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsA(_In_opt_ CONST GUID*, _In_opt_ PCSTR, _In_opt_ HWND, _In_ DWORD);
_Check_return_ WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsW(_In_opt_ CONST GUID*, _In_opt_ PCWSTR, _In_opt_ HWND, _In_ DWORD);
_Check_return_ WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsExA(_In_opt_ CONST GUID*, _In_opt_ PCSTR, _In_opt_ HWND, _In_ DWORD, _In_opt_ HDEVINFO, _In_opt_ PCSTR, _Reserved_ PVOID);
_Check_return_ WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsExW(_In_opt_ CONST GUID*, _In_opt_ PCWSTR, _In_opt_ HWND, _In_ DWORD, _In_opt_ HDEVINFO, _In_opt_ PCWSTR, _Reserved_ PVOID);
WINSETUPAPI BOOL WINAPI SetupDiGetClassImageIndex(_In_ PSP_CLASSIMAGELIST_DATA, _In_ CONST GUID*, _Out_ PINT);
WINSETUPAPI BOOL WINAPI SetupDiGetClassImageList(_Out_ PSP_CLASSIMAGELIST_DATA);
WINSETUPAPI BOOL WINAPI SetupDiGetClassImageListExA(_Out_ PSP_CLASSIMAGELIST_DATA, _In_opt_ PCSTR, _Reserved_ PVOID);
WINSETUPAPI BOOL WINAPI SetupDiGetClassImageListExW(_Out_ PSP_CLASSIMAGELIST_DATA, _In_opt_ PCWSTR, _Reserved_ PVOID);

_Success_(return != FALSE)
WINSETUPAPI
BOOL
WINAPI
SetupDiGetClassInstallParamsA(
  _In_ HDEVINFO DeviceInfoSet,
  _In_opt_ PSP_DEVINFO_DATA DeviceInfoData,
  _Out_writes_bytes_to_opt_(ClassInstallParamsSize, *RequiredSize) PSP_CLASSINSTALL_HEADER ClassInstallParams,
  _In_ DWORD ClassInstallParamsSize,
  _Out_opt_ PDWORD RequiredSize);

_Success_(return != FALSE)
WINSETUPAPI
BOOL
WINAPI
SetupDiGetClassInstallParamsW(
  _In_ HDEVINFO DeviceInfoSet,
  _In_opt_ PSP_DEVINFO_DATA DeviceInfoData,
  _Out_writes_bytes_to_opt_(ClassInstallParamsSize, *RequiredSize) PSP_CLASSINSTALL_HEADER ClassInstallParams,
  _In_ DWORD ClassInstallParamsSize,
  _Out_opt_ PDWORD RequiredSize);

_Success_(return != FALSE)
WINSETUPAPI
BOOL
WINAPI
SetupDiGetClassRegistryPropertyA(
  _In_ CONST GUID *ClassGuid,
  _In_ DWORD Property,
  _Out_opt_ PDWORD PropertyRegDataType,
  _Out_writes_bytes_to_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer,
  _In_ DWORD PropertyBufferSize,
  _Out_opt_ PDWORD RequiredSize,
  _In_opt_ PCSTR MachineName,
  _Reserved_ PVOID Reserved);

_Success_(return != FALSE)
WINSETUPAPI
BOOL
WINAPI
SetupDiGetClassRegistryPropertyW(
  _In_ CONST GUID *ClassGuid,
  _In_ DWORD Property,
  _Out_opt_ PDWORD PropertyRegDataType,
  _Out_writes_bytes_to_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer,
  _In_ DWORD PropertyBufferSize,
  _Out_opt_ PDWORD RequiredSize,
  _In_opt_ PCWSTR MachineName,
  _Reserved_ PVOID Reserved);

WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInfoListClass(_In_ HDEVINFO, _Out_ LPGUID);
WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInfoListDetailA(_In_ HDEVINFO, _Out_ PSP_DEVINFO_LIST_DETAIL_DATA_A);
WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInfoListDetailW(_In_ HDEVINFO, _Out_ PSP_DEVINFO_LIST_DETAIL_DATA_W);
WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInstallParamsA(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _Out_ PSP_DEVINSTALL_PARAMS_A);
WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInstallParamsW(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _Out_ PSP_DEVINSTALL_PARAMS_W);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetDeviceInstanceIdA(
  _In_ HDEVINFO DeviceInfoSet,
  _In_ PSP_DEVINFO_DATA DeviceInfoData,
  _Out_writes_opt_(DeviceInstanceIdSize) PSTR DeviceInstanceId,
  _In_ DWORD DeviceInstanceIdSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetDeviceInstanceIdW(
  _In_ HDEVINFO DeviceInfoSet,
  _In_ PSP_DEVINFO_DATA DeviceInfoData,
  _Out_writes_opt_(DeviceInstanceIdSize) PWSTR DeviceInstanceId,
  _In_ DWORD DeviceInstanceIdSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInterfaceAlias(_In_ HDEVINFO, _In_ PSP_DEVICE_INTERFACE_DATA, _In_ CONST GUID*, _Out_ PSP_DEVICE_INTERFACE_DATA);

_Success_(return != FALSE)
_At_((LPSTR)DeviceInterfaceDetailData->DevicePath, _Post_z_)
WINSETUPAPI
BOOL
WINAPI
SetupDiGetDeviceInterfaceDetailA(
  _In_ HDEVINFO DeviceInfoSet,
  _In_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,
  _Inout_updates_bytes_to_opt_(DeviceInterfaceDetailDataSize, *RequiredSize) PSP_DEVICE_INTERFACE_DETAIL_DATA_A DeviceInterfaceDetailData,
  _In_ DWORD DeviceInterfaceDetailDataSize,
  _Out_opt_ _Out_range_(>=, sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A)) PDWORD RequiredSize,
  _Out_opt_ PSP_DEVINFO_DATA DeviceInfoData);

_Success_(return != FALSE)
_At_((LPWSTR)DeviceInterfaceDetailData->DevicePath, _Post_z_)
WINSETUPAPI
BOOL
WINAPI
SetupDiGetDeviceInterfaceDetailW(
  _In_ HDEVINFO DeviceInfoSet,
  _In_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,
  _Out_writes_bytes_to_opt_(DeviceInterfaceDetailDataSize, *RequiredSize) PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData,
  _In_ DWORD DeviceInterfaceDetailDataSize,
  _Out_opt_ _Out_range_(>=, sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W)) PDWORD RequiredSize,
  _Out_opt_ PSP_DEVINFO_DATA DeviceInfoData);

_Success_(return != FALSE)
_When_((*PropertyRegDataType == REG_SZ), _At_((PSTR) PropertyBuffer, _Post_valid_))
_When_((*PropertyRegDataType == REG_MULTI_SZ), _At_((PZZSTR) PropertyBuffer, _Post_valid_))
WINSETUPAPI
BOOL
WINAPI
SetupDiGetDeviceRegistryPropertyA(
  _In_ HDEVINFO DeviceInfoSet,
  _In_ PSP_DEVINFO_DATA DeviceInfoData,
  _In_ DWORD Property,
  _Out_opt_ PDWORD PropertyRegDataType,
  _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer,
  _In_ DWORD PropertyBufferSize,
  _Out_opt_ PDWORD RequiredSize);

_Success_(return != FALSE)
_When_((*PropertyRegDataType == REG_SZ), _At_((PWSTR) PropertyBuffer, _Post_valid_))
_When_((*PropertyRegDataType == REG_MULTI_SZ), _At_((PZZWSTR) PropertyBuffer, _Post_valid_))
WINSETUPAPI
BOOL
WINAPI
SetupDiGetDeviceRegistryPropertyW(
  _In_ HDEVINFO DeviceInfoSet,
  _In_ PSP_DEVINFO_DATA DeviceInfoData,
  _In_ DWORD Property,
  _Out_opt_ PDWORD PropertyRegDataType,
  _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer,
  _In_ DWORD PropertyBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetDriverInfoDetailA(
  _In_ HDEVINFO DeviceInfoSet,
  _In_opt_ PSP_DEVINFO_DATA DeviceInfoData,
  _In_ PSP_DRVINFO_DATA_A DriverInfoData,
  _Inout_updates_bytes_opt_(DriverInfoDetailDataSize) PSP_DRVINFO_DETAIL_DATA_A DriverInfoDetailData,
  _In_ DWORD DriverInfoDetailDataSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetDriverInfoDetailW(
  _In_ HDEVINFO DeviceInfoSet,
  _In_opt_ PSP_DEVINFO_DATA DeviceInfoData,
  _In_ PSP_DRVINFO_DATA_W DriverInfoData,
  _Inout_updates_bytes_opt_(DriverInfoDetailDataSize) PSP_DRVINFO_DETAIL_DATA_W DriverInfoDetailData,
  _In_ DWORD DriverInfoDetailDataSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI BOOL WINAPI SetupDiGetDriverInstallParamsA(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ PSP_DRVINFO_DATA_A, _Out_ PSP_DRVINSTALL_PARAMS);
WINSETUPAPI BOOL WINAPI SetupDiGetDriverInstallParamsW(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ PSP_DRVINFO_DATA_W, _Out_ PSP_DRVINSTALL_PARAMS);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetHwProfileFriendlyNameA(
  _In_ DWORD HwProfile,
  _Out_writes_(FriendlyNameSize) PSTR FriendlyName,
  _In_ DWORD FriendlyNameSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetHwProfileFriendlyNameW(
  _In_ DWORD HwProfile,
  _Out_writes_(FriendlyNameSize) PWSTR FriendlyName,
  _In_ DWORD FriendlyNameSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetHwProfileFriendlyNameExA(
  _In_ DWORD HwProfile,
  _Out_writes_(FriendlyNameSize) PSTR FriendlyName,
  _In_ DWORD FriendlyNameSize,
  _Out_opt_ PDWORD RequiredSize,
  _In_opt_ PCSTR MachineName,
  _Reserved_ PVOID Reserved);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetHwProfileFriendlyNameExW(
  _In_ DWORD HwProfile,
  _Out_writes_(FriendlyNameSize) PWSTR FriendlyName,
  _In_ DWORD FriendlyNameSize,
  _Out_opt_ PDWORD RequiredSize,
  _In_opt_ PCWSTR MachineName,
  _Reserved_ PVOID Reserved);

WINSETUPAPI BOOL WINAPI SetupDiGetHwProfileFriendlyNameW(DWORD,PWSTR,DWORD,PDWORD);

_Success_(return != FALSE)
WINSETUPAPI
BOOL
WINAPI
SetupDiGetHwProfileList(
  _Out_writes_to_(HwProfileListSize, *RequiredSize) PDWORD HwProfileList,
  _In_ DWORD HwProfileListSize,
  _Out_ PDWORD RequiredSize,
  _Out_opt_ PDWORD CurrentlyActiveIndex);

_Success_(return != FALSE)
WINSETUPAPI
BOOL
WINAPI
SetupDiGetHwProfileListExA(
  _Out_writes_to_(HwProfileListSize, *RequiredSize) PDWORD HwProfileList,
  _In_ DWORD HwProfileListSize,
  _Out_ PDWORD RequiredSize,
  _Out_opt_ PDWORD CurrentlyActiveIndex,
  _In_opt_ PCSTR MachineName,
  _Reserved_ PVOID Reserved);

_Success_(return != FALSE)
WINSETUPAPI
BOOL
WINAPI
SetupDiGetHwProfileListExW(
  _Out_writes_to_(HwProfileListSize, *RequiredSize) PDWORD HwProfileList,
  _In_ DWORD HwProfileListSize,
  _Out_ PDWORD RequiredSize,
  _Out_opt_ PDWORD CurrentlyActiveIndex,
  _In_opt_ PCWSTR MachineName,
  _Reserved_ PVOID Reserved);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetINFClassA(
  _In_ PCSTR InfName,
  _Out_ LPGUID ClassGuid,
  _Out_writes_(ClassNameSize) PSTR ClassName,
  _In_ DWORD ClassNameSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupDiGetINFClassW(
  _In_ PCWSTR InfName,
  _Out_ LPGUID ClassGuid,
  _Out_writes_(ClassNameSize) PWSTR ClassName,
  _In_ DWORD ClassNameSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI BOOL WINAPI SetupDiGetSelectedDevice(_In_ HDEVINFO, _Out_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupDiGetSelectedDriverA(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _Out_ PSP_DRVINFO_DATA_A);
WINSETUPAPI BOOL WINAPI SetupDiGetSelectedDriverW(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _Out_ PSP_DRVINFO_DATA_W);
WINSETUPAPI HPROPSHEETPAGE WINAPI SetupDiGetWizardPage(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ PSP_INSTALLWIZARD_DATA, _In_ DWORD, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupDiInstallClassA(_In_opt_ HWND, _In_ PCSTR, _In_ DWORD, _In_opt_ HSPFILEQ);
WINSETUPAPI BOOL WINAPI SetupDiInstallClassW(_In_opt_ HWND, _In_ PCWSTR, _In_ DWORD, _In_opt_ HSPFILEQ);
WINSETUPAPI BOOL WINAPI SetupDiInstallClassExA(_In_opt_ HWND, _In_opt_ PCSTR, _In_ DWORD, _In_opt_ HSPFILEQ, _In_opt_ CONST GUID*, _Reserved_ PVOID, _Reserved_ PVOID);
WINSETUPAPI BOOL WINAPI SetupDiInstallClassExW(_In_opt_ HWND, _In_opt_ PCWSTR, _In_ DWORD, _In_opt_ HSPFILEQ, _In_opt_ CONST GUID*, _Reserved_ PVOID, _Reserved_ PVOID);
WINSETUPAPI BOOL WINAPI SetupDiInstallDevice(_In_ HDEVINFO, _Inout_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupDiInstallDeviceInterfaces(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupDiInstallDriverFiles(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupDiLoadClassIcon(_In_ CONST GUID*, _Out_opt_ HICON*, _Out_opt_ PINT);
WINSETUPAPI BOOL WINAPI SetupDiMoveDuplicateDevice(HDEVINFO,PSP_DEVINFO_DATA);
_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiOpenClassRegKey(_In_opt_ CONST GUID*, _In_ REGSAM);
_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiOpenClassRegKeyExA(_In_opt_ CONST GUID*, _In_ REGSAM, _In_ DWORD, _In_opt_ PCSTR, _Reserved_ PVOID);
_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiOpenClassRegKeyExW(_In_opt_ CONST GUID*, _In_ REGSAM, _In_ DWORD, _In_opt_ PCWSTR, _Reserved_ PVOID);
WINSETUPAPI BOOL WINAPI SetupDiOpenDeviceInfoA(_In_ HDEVINFO, _In_ PCSTR, _In_opt_ HWND, _In_ DWORD, _Out_opt_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupDiOpenDeviceInfoW(_In_ HDEVINFO, _In_ PCWSTR, _In_opt_ HWND, _In_ DWORD, _Out_opt_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupDiOpenDeviceInterfaceA(_In_ HDEVINFO, _In_ PCSTR, _In_ DWORD, _Out_opt_ PSP_DEVICE_INTERFACE_DATA);
WINSETUPAPI BOOL WINAPI SetupDiOpenDeviceInterfaceW(_In_ HDEVINFO, _In_ PCWSTR, _In_ DWORD, _Out_opt_ PSP_DEVICE_INTERFACE_DATA);
_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiOpenDeviceInterfaceRegKey(_In_ HDEVINFO, _In_ PSP_DEVICE_INTERFACE_DATA, _Reserved_ DWORD, _In_ REGSAM);
_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiOpenDevRegKey(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ REGSAM);
WINSETUPAPI BOOL WINAPI SetupDiRegisterCoDeviceInstallers(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupDiRegisterDeviceInfo(_In_ HDEVINFO, _Inout_ PSP_DEVINFO_DATA, _In_ DWORD, _In_opt_ PSP_DETSIG_CMPPROC, _In_opt_ PVOID, _Out_opt_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupDiRemoveDevice(_In_ HDEVINFO, _Inout_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupDiRemoveDeviceInterface(_In_ HDEVINFO, _Inout_ PSP_DEVICE_INTERFACE_DATA);
WINSETUPAPI BOOL WINAPI SetupDiRestartDevices(_In_ HDEVINFO, _Inout_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupDiSelectBestCompatDrv(_In_ HDEVINFO, _Inout_opt_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupDiSelectDevice(_In_ HDEVINFO, _Inout_opt_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupDiSelectOEMDrv(_In_opt_ HWND, _In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA);

WINSETUPAPI
BOOL
WINAPI
SetupDiSetClassInstallParamsA(
  _In_ HDEVINFO DeviceInfoSet,
  _In_opt_ PSP_DEVINFO_DATA DeviceInfoData,
  _In_reads_bytes_opt_(ClassInstallParamsSize) PSP_CLASSINSTALL_HEADER ClassInstallParams,
  _In_ DWORD ClassInstallParamsSize);

WINSETUPAPI
BOOL
WINAPI
SetupDiSetClassInstallParamsW(
  _In_ HDEVINFO DeviceInfoSet,
  _In_opt_ PSP_DEVINFO_DATA DeviceInfoData,
  _In_reads_bytes_opt_(ClassInstallParamsSize) PSP_CLASSINSTALL_HEADER ClassInstallParams,
  _In_ DWORD ClassInstallParamsSize);

WINSETUPAPI
BOOL
WINAPI
SetupDiSetClassRegistryPropertyA(
  _In_ CONST GUID *ClassGuid,
  _In_ DWORD Property,
  _In_reads_bytes_opt_(PropertyBufferSize) CONST BYTE *PropertyBuffer,
  _In_ DWORD PropertyBufferSize,
  _In_opt_ PCSTR MachineName,
  _Reserved_ PVOID Reserved);

WINSETUPAPI
BOOL
WINAPI
SetupDiSetClassRegistryPropertyW(
  _In_ CONST GUID *ClassGuid,
  _In_ DWORD Property,
  _In_reads_bytes_opt_(PropertyBufferSize) CONST BYTE *PropertyBuffer,
  _In_ DWORD PropertyBufferSize,
  _In_opt_ PCWSTR MachineName,
  _Reserved_ PVOID Reserved);

WINSETUPAPI BOOL WINAPI SetupDiSetDeviceInstallParamsA(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ PSP_DEVINSTALL_PARAMS_A);
WINSETUPAPI BOOL WINAPI SetupDiSetDeviceInstallParamsW(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ PSP_DEVINSTALL_PARAMS_W);

WINSETUPAPI
BOOL
WINAPI
SetupDiSetDeviceRegistryPropertyA(
  _In_ HDEVINFO DeviceInfoSet,
  _Inout_ PSP_DEVINFO_DATA DeviceInfoData,
  _In_ DWORD Property,
  _In_reads_bytes_opt_(PropertyBufferSize) CONST BYTE *PropertyBuffer,
  _In_ DWORD PropertyBufferSize);

WINSETUPAPI
BOOL
WINAPI
SetupDiSetDeviceRegistryPropertyW(
  _In_ HDEVINFO DeviceInfoSet,
  _Inout_ PSP_DEVINFO_DATA DeviceInfoData,
  _In_ DWORD Property,
  _In_reads_bytes_opt_(PropertyBufferSize) CONST BYTE *PropertyBuffer,
  _In_ DWORD PropertyBufferSize);

WINSETUPAPI BOOL WINAPI SetupDiSetDriverInstallParamsA(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ PSP_DRVINFO_DATA_A, _In_ PSP_DRVINSTALL_PARAMS);
WINSETUPAPI BOOL WINAPI SetupDiSetDriverInstallParamsW(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ PSP_DRVINFO_DATA_W, _In_ PSP_DRVINSTALL_PARAMS);
WINSETUPAPI BOOL WINAPI SetupDiSetSelectedDevice(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupDiSetSelectedDriverA(_In_ HDEVINFO, _Inout_opt_ PSP_DEVINFO_DATA, _Inout_opt_ PSP_DRVINFO_DATA_A);
WINSETUPAPI BOOL WINAPI SetupDiSetSelectedDriverW(_In_ HDEVINFO, _Inout_opt_ PSP_DEVINFO_DATA, _Inout_opt_ PSP_DRVINFO_DATA_W);
WINSETUPAPI BOOL WINAPI SetupDiUnremoveDevice(_In_ HDEVINFO, _Inout_ PSP_DEVINFO_DATA);
WINSETUPAPI HDSKSPC WINAPI SetupDuplicateDiskSpaceListA(_In_ HDSKSPC, _Reserved_ PVOID, _Reserved_ DWORD, _In_ UINT);
WINSETUPAPI HDSKSPC WINAPI SetupDuplicateDiskSpaceListW(_In_ HDSKSPC, _Reserved_ PVOID, _Reserved_ DWORD, _In_ UINT);
WINSETUPAPI BOOL WINAPI SetupFindFirstLineA(_In_ HINF, _In_ PCSTR, _In_opt_ PCSTR, _Out_ PINFCONTEXT);
WINSETUPAPI BOOL WINAPI SetupFindFirstLineW(_In_ HINF, _In_ PCWSTR, _In_opt_ PCWSTR, _Out_ PINFCONTEXT);
WINSETUPAPI BOOL WINAPI SetupFindNextLine(_In_ PINFCONTEXT, _Out_ PINFCONTEXT);
WINSETUPAPI BOOL WINAPI SetupFindNextMatchLineA(_In_ PINFCONTEXT, _In_opt_ PCSTR, _Out_ PINFCONTEXT);
WINSETUPAPI BOOL WINAPI SetupFindNextMatchLineW(_In_ PINFCONTEXT, _In_opt_ PCWSTR, _Out_ PINFCONTEXT);
WINSETUPAPI BOOL WINAPI SetupFreeA(PCSTR**,UINT);
WINSETUPAPI BOOL WINAPI SetupFreeW(PCWSTR**,UINT);
WINSETUPAPI BOOL WINAPI SetupGetBackupInformationA(_In_ HSPFILEQ, _Inout_ PSP_BACKUP_QUEUE_PARAMS_A);
WINSETUPAPI BOOL WINAPI SetupGetBackupInformationW(_In_ HSPFILEQ, _Inout_ PSP_BACKUP_QUEUE_PARAMS_W);

_Success_(return != FALSE)
WINSETUPAPI
BOOL
WINAPI
SetupGetBinaryField(
  _In_ PINFCONTEXT Context,
  _In_ DWORD FieldIndex,
  _Out_writes_bytes_to_opt_(ReturnBufferSize, *RequiredSize) PBYTE ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ LPDWORD RequiredSize);

WINSETUPAPI DWORD WINAPI SetupGetFieldCount(_In_ PINFCONTEXT);
WINSETUPAPI DWORD WINAPI SetupGetFileCompressionInfoA(_In_ PCSTR, _Out_ PSTR*, _Out_ PDWORD, _Out_ PDWORD, _Out_ PUINT);
WINSETUPAPI DWORD WINAPI SetupGetFileCompressionInfoW(_In_ PCWSTR, _Out_ PWSTR*, _Out_ PDWORD, _Out_ PDWORD, _Out_ PUINT);

WINSETUPAPI
BOOL
WINAPI
SetupGetFileCompressionInfoExA(
  _In_ PCSTR SourceFileName,
  _In_reads_opt_(ActualSourceFileNameBufferLen) PSTR ActualSourceFileNameBuffer,
  _In_ DWORD ActualSourceFileNameBufferLen,
  _Out_opt_ PDWORD RequiredBufferLen,
  _Out_ PDWORD SourceFileSize,
  _Out_ PDWORD TargetFileSize,
  _Out_ PUINT CompressionType);

WINSETUPAPI
BOOL
WINAPI
SetupGetFileCompressionInfoExW(
  _In_ PCWSTR SourceFileName,
  _In_reads_opt_(ActualSourceFileNameBufferLen) PWSTR ActualSourceFileNameBuffer,
  _In_ DWORD ActualSourceFileNameBufferLen,
  _Out_opt_ PDWORD RequiredBufferLen,
  _Out_ PDWORD SourceFileSize,
  _Out_ PDWORD TargetFileSize,
  _Out_ PUINT CompressionType);

WINSETUPAPI
BOOL
WINAPI
SetupGetInfFileListA(
  _In_opt_ PCSTR DirectoryPath,
  _In_ DWORD InfStyle,
  _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupGetInfFileListW(
  _In_opt_ PCWSTR DirectoryPath,
  _In_ DWORD InfStyle,
  _Out_writes_(ReturnBufferSize) PWSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

_Success_(return != FALSE)
WINSETUPAPI
BOOL
WINAPI
SetupGetInfInformationA(
  _In_ LPCVOID InfSpec,
  _In_ DWORD SearchControl,
  _Out_writes_bytes_to_opt_(ReturnBufferSize, *RequiredSize) PSP_INF_INFORMATION ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

_Success_(return != FALSE)
WINSETUPAPI
BOOL
WINAPI
SetupGetInfInformationW(
  _In_ LPCVOID InfSpec,
  _In_ DWORD SearchControl,
  _Out_writes_bytes_to_opt_(ReturnBufferSize, *RequiredSize) PSP_INF_INFORMATION ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI BOOL WINAPI SetupGetIntField(_In_ PINFCONTEXT, _In_ DWORD, _Out_ PINT);
WINSETUPAPI BOOL WINAPI SetupGetLineByIndexA(_In_ HINF, _In_ PCSTR, _In_ DWORD, _Out_ PINFCONTEXT);
WINSETUPAPI BOOL WINAPI SetupGetLineByIndexW(_In_ HINF, _In_ PCWSTR, _In_ DWORD, _Out_ PINFCONTEXT);
WINSETUPAPI LONG WINAPI SetupGetLineCountA(_In_ HINF, _In_ PCSTR);
WINSETUPAPI LONG WINAPI SetupGetLineCountW(_In_ HINF, _In_ PCWSTR);

WINSETUPAPI
BOOL
WINAPI
SetupGetLineTextA(
  _In_opt_ PINFCONTEXT Context,
  _In_opt_ HINF InfHandle,
  _In_opt_ PCSTR Section,
  _In_opt_ PCSTR Key,
  _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupGetLineTextW(
  _In_opt_ PINFCONTEXT Context,
  _In_opt_ HINF InfHandle,
  _In_opt_ PCWSTR Section,
  _In_opt_ PCWSTR Key,
  _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupGetMultiSzFieldA(
  _In_ PINFCONTEXT Context,
  _In_ DWORD FieldIndex,
  _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ LPDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupGetMultiSzFieldW(
  _In_ PINFCONTEXT Context,
  _In_ DWORD FieldIndex,
  _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ LPDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupGetSourceFileLocationA(
  _In_ HINF InfHandle,
  _In_opt_ PINFCONTEXT InfContext,
  _In_opt_ PCSTR FileName,
  _Out_ PUINT SourceId,
  _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupGetSourceFileLocationW(
  _In_ HINF InfHandle,
  _In_opt_ PINFCONTEXT InfContext,
  _In_opt_ PCWSTR FileName,
  _Out_ PUINT SourceId,
  _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI BOOL WINAPI SetupGetSourceFileSizeA(_In_ HINF, _In_opt_ PINFCONTEXT, _In_opt_ PCSTR, _In_opt_ PCSTR, _Out_ PDWORD, _In_ UINT);
WINSETUPAPI BOOL WINAPI SetupGetSourceFileSizeW(_In_ HINF, _In_opt_ PINFCONTEXT, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _Out_ PDWORD, _In_ UINT);

WINSETUPAPI
BOOL
WINAPI
SetupGetSourceInfoA(
  _In_ HINF InfHandle,
  _In_ UINT SourceId,
  _In_ UINT InfoDesired,
  _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupGetSourceInfoW(
  _In_ HINF InfHandle,
  _In_ UINT SourceId,
  _In_ UINT InfoDesired,
  _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupGetStringFieldA(
  _In_ PINFCONTEXT Context,
  _In_ DWORD FieldIndex,
  _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupGetStringFieldW(
  _In_ PINFCONTEXT Context,
  _In_ DWORD FieldIndex,
  _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupGetTargetPathA(
  _In_ HINF InfHandle,
  _In_opt_ PINFCONTEXT InfContext,
  _In_opt_ PCSTR Section,
  _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupGetTargetPathW(
  _In_ HINF InfHandle,
  _In_opt_ PINFCONTEXT InfContext,
  _In_opt_ PCWSTR Section,
  _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI PVOID WINAPI SetupInitDefaultQueueCallback(_In_opt_ HWND);
WINSETUPAPI PVOID WINAPI SetupInitDefaultQueueCallbackEx(_In_opt_ HWND, _In_opt_ HWND, _In_ UINT, _Reserved_ DWORD, _Reserved_ PVOID);
WINSETUPAPI HSPFILELOG WINAPI SetupInitializeFileLogA(_In_opt_ PCSTR, _In_ DWORD);
WINSETUPAPI HSPFILELOG WINAPI SetupInitializeFileLogW(_In_opt_ PCWSTR, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupInstallFileA(_In_opt_ HINF, _In_opt_ PINFCONTEXT, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_ DWORD, _In_opt_ PSP_FILE_CALLBACK_A, _In_opt_ PVOID);
WINSETUPAPI BOOL WINAPI SetupInstallFileW(_In_opt_ HINF, _In_opt_ PINFCONTEXT, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_ DWORD, _In_opt_ PSP_FILE_CALLBACK_W, _In_opt_ PVOID);
WINSETUPAPI BOOL WINAPI SetupInstallFileExA(_In_opt_ HINF, _In_opt_ PINFCONTEXT, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_ DWORD, _In_opt_ PSP_FILE_CALLBACK_A, _In_opt_ PVOID, _Out_ PBOOL);
WINSETUPAPI BOOL WINAPI SetupInstallFileExW(_In_opt_ HINF, _In_opt_ PINFCONTEXT, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_ DWORD, _In_opt_ PSP_FILE_CALLBACK_W, _In_opt_ PVOID, _Out_ PBOOL);
WINSETUPAPI BOOL WINAPI SetupInstallFilesFromInfSectionA(_In_ HINF, _In_opt_ HINF, _In_ HSPFILEQ, _In_ PCSTR, _In_opt_ PCSTR, _In_ UINT);
WINSETUPAPI BOOL WINAPI SetupInstallFilesFromInfSectionW(_In_ HINF, _In_opt_ HINF, _In_ HSPFILEQ, _In_ PCWSTR, _In_opt_ PCWSTR, _In_ UINT);
WINSETUPAPI BOOL WINAPI SetupInstallFromInfSectionA(_In_opt_ HWND, _In_ HINF, _In_ PCSTR, _In_ UINT, _In_opt_ HKEY, _In_opt_ PCSTR, _In_ UINT, _In_opt_ PSP_FILE_CALLBACK_A, _In_opt_ PVOID, _In_opt_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupInstallFromInfSectionW(_In_opt_ HWND, _In_ HINF, _In_ PCWSTR, _In_ UINT, _In_opt_ HKEY, _In_opt_ PCWSTR, _In_ UINT, _In_opt_ PSP_FILE_CALLBACK_W, _In_opt_ PVOID, _In_opt_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA);
WINSETUPAPI BOOL WINAPI SetupInstallServicesFromInfSectionA(_In_ HINF, _In_ PCSTR, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupInstallServicesFromInfSectionW(_In_ HINF, _In_ PCWSTR, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupInstallServicesFromInfSectionExA(_In_ HINF, _In_ PCSTR, _In_ DWORD, _In_opt_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _Reserved_ PVOID, _Reserved_ PVOID);
WINSETUPAPI BOOL WINAPI SetupInstallServicesFromInfSectionExW(_In_ HINF, _In_ PCWSTR, _In_ DWORD, _In_opt_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _Reserved_ PVOID, _Reserved_ PVOID);
WINSETUPAPI BOOL WINAPI SetupIterateCabinetA(_In_ PCSTR, _Reserved_ DWORD, _In_ PSP_FILE_CALLBACK_A, _In_ PVOID);
WINSETUPAPI BOOL WINAPI SetupIterateCabinetW(_In_ PCWSTR, _Reserved_ DWORD, _In_ PSP_FILE_CALLBACK_W, _In_ PVOID);
WINSETUPAPI BOOL WINAPI SetupLogErrorA(_In_ LPCSTR, _In_ LogSeverity);
WINSETUPAPI BOOL WINAPI SetupLogErrorW(_In_ LPCWSTR, _In_ LogSeverity);
WINSETUPAPI BOOL WINAPI SetupLogFileA(_In_ HSPFILELOG, _In_opt_ PCSTR, _In_ PCSTR, _In_ PCSTR, _In_ DWORD, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupLogFileW(_In_ HSPFILELOG, _In_opt_ PCWSTR, _In_ PCWSTR, _In_ PCWSTR, _In_ DWORD, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_ DWORD);

WINSETUPAPI
BOOL
WINAPI
SetupOpenAppendInfFileA(
  _In_opt_ PCSTR FileName,
  _In_ HINF InfHandle,
  _Out_opt_ PUINT ErrorLine);

WINSETUPAPI
BOOL
WINAPI
SetupOpenAppendInfFileW(
  _In_opt_ PCWSTR FileName,
  _In_ HINF InfHandle,
  _Out_opt_ PUINT ErrorLine);

WINSETUPAPI HSPFILEQ WINAPI SetupOpenFileQueue(VOID);

WINSETUPAPI
HINF
WINAPI
SetupOpenInfFileA(
  _In_ PCSTR FileName,
  _In_opt_ PCSTR InfClass,
  _In_ DWORD InfStyle,
  _Out_opt_ PUINT ErrorLine);

WINSETUPAPI
HINF
WINAPI
SetupOpenInfFileW(
  _In_ PCWSTR FileName,
  _In_opt_ PCWSTR InfClass,
  _In_ DWORD InfStyle,
  _Out_opt_ PUINT ErrorLine);

WINSETUPAPI BOOL WINAPI SetupOpenLog(_In_ BOOL);
WINSETUPAPI HINF WINAPI SetupOpenMasterInf(VOID);

WINSETUPAPI
UINT
WINAPI
SetupPromptForDiskA(
  _In_ HWND hwndParent,
  _In_opt_ PCSTR DialogTitle,
  _In_opt_ PCSTR DiskName,
  _In_opt_ PCSTR PathToSource,
  _In_ PCSTR FileSought,
  _In_opt_ PCSTR TagFile,
  _In_ DWORD DiskPromptStyle,
  _Out_writes_opt_(PathBufferSize) PSTR PathBuffer,
  _In_ DWORD PathBufferSize,
  _Out_opt_ PDWORD PathRequiredSize);

WINSETUPAPI
UINT
WINAPI
SetupPromptForDiskW(
  _In_ HWND hwndParent,
  _In_opt_ PCWSTR DialogTitle,
  _In_opt_ PCWSTR DiskName,
  _In_opt_ PCWSTR PathToSource,
  _In_ PCWSTR FileSought,
  _In_opt_ PCWSTR TagFile,
  _In_ DWORD DiskPromptStyle,
  _Out_writes_opt_(PathBufferSize) PWSTR PathBuffer,
  _In_ DWORD PathBufferSize,
  _Out_opt_ PDWORD PathRequiredSize);

WINSETUPAPI INT WINAPI SetupPromptReboot(_In_opt_ HSPFILEQ, _In_opt_ HWND, _In_ BOOL);
WINSETUPAPI BOOL WINAPI SetupQueryA(DWORD,PCSTR**,PUINT);
WINSETUPAPI BOOL WINAPI SetupQueryW(DWORD,PCWSTR**,PUINT);

WINSETUPAPI
BOOL
WINAPI
SetupQueryDrivesInDiskSpaceListA(
  _In_ HDSKSPC DiskSpace,
  _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupQueryDrivesInDiskSpaceListW(
  _In_ HDSKSPC DiskSpace,
  _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupQueryFileLogA(
  _In_ HSPFILELOG FileLogHandle,
  _In_opt_ PCSTR LogSectionName,
  _In_ PCSTR TargetFilename,
  _In_ SetupFileLogInfo DesiredInfo,
  _Out_writes_opt_(ReturnBufferSize) PSTR DataOut,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupQueryFileLogW(
  _In_ HSPFILELOG FileLogHandle,
  _In_opt_ PCWSTR LogSectionName,
  _In_ PCWSTR TargetFilename,
  _In_ SetupFileLogInfo DesiredInfo,
  _Out_writes_opt_(ReturnBufferSize) PWSTR DataOut,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupQueryInfFileInformationA(
  _In_ PSP_INF_INFORMATION InfInformation,
  _In_ UINT InfIndex,
  _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupQueryInfFileInformationW(
  _In_ PSP_INF_INFORMATION InfInformation,
  _In_ UINT InfIndex,
  _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupQueryInfOriginalFileInformationA(
  _In_ PSP_INF_INFORMATION InfInformation,
  _In_ UINT InfIndex,
  _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo,
  _Out_ PSP_ORIGINAL_FILE_INFO_A OriginalFileInfo);

WINSETUPAPI
BOOL
WINAPI
SetupQueryInfOriginalFileInformationW(
  _In_ PSP_INF_INFORMATION InfInformation,
  _In_ UINT InfIndex,
  _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo,
  _Out_ PSP_ORIGINAL_FILE_INFO_W OriginalFileInfo);

WINSETUPAPI
BOOL
WINAPI
SetupQueryInfVersionInformationA(
  _In_ PSP_INF_INFORMATION InfInformation,
  _In_ UINT InfIndex,
  _In_opt_ PCSTR Key,
  _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI
BOOL
WINAPI
SetupQueryInfVersionInformationW(
  _In_ PSP_INF_INFORMATION InfInformation,
  _In_ UINT InfIndex,
  _In_opt_ PCWSTR Key,
  _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer,
  _In_ DWORD ReturnBufferSize,
  _Out_opt_ PDWORD RequiredSize);

WINSETUPAPI BOOL WINAPI SetupQuerySpaceRequiredOnDriveA(_In_ HDSKSPC, _In_ PCSTR, _Out_ LONGLONG*, _Reserved_ PVOID, _Reserved_ UINT);
WINSETUPAPI BOOL WINAPI SetupQuerySpaceRequiredOnDriveW(_In_ HDSKSPC, _In_ PCWSTR, _Out_ LONGLONG*, _Reserved_ PVOID, _Reserved_ UINT);
WINSETUPAPI BOOL WINAPI SetupQueueCopyA(_In_ HSPFILEQ, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_ PCSTR, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_ PCSTR, _In_opt_ PCSTR, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupQueueCopyW(_In_ HSPFILEQ, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_ PCWSTR, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_ PCWSTR, _In_opt_ PCWSTR, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupQueueCopyIndirectA(_In_ PSP_FILE_COPY_PARAMS_A);
WINSETUPAPI BOOL WINAPI SetupQueueCopyIndirectW(_In_ PSP_FILE_COPY_PARAMS_W);
WINSETUPAPI BOOL WINAPI SetupQueueCopySectionA(_In_ HSPFILEQ, _In_opt_ PCSTR, _In_ HINF, _In_opt_ HINF, _In_ PCSTR, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupQueueCopySectionW(_In_ HSPFILEQ, _In_opt_ PCWSTR, _In_ HINF, _In_opt_ HINF, _In_ PCWSTR, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupQueueDefaultCopyA(_In_ HSPFILEQ, _In_ HINF, _In_opt_ PCSTR, _In_ PCSTR, _In_opt_ PCSTR, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupQueueDefaultCopyW(_In_ HSPFILEQ, _In_ HINF, _In_opt_ PCWSTR, _In_ PCWSTR, _In_opt_ PCWSTR, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupQueueDeleteA(_In_ HSPFILEQ, _In_ PCSTR, _In_opt_ PCSTR);
WINSETUPAPI BOOL WINAPI SetupQueueDeleteW(_In_ HSPFILEQ, _In_ PCWSTR, _In_opt_ PCWSTR);
WINSETUPAPI BOOL WINAPI SetupQueueDeleteSectionA(_In_ HSPFILEQ, _In_ HINF, _In_opt_ HINF, _In_ PCSTR);
WINSETUPAPI BOOL WINAPI SetupQueueDeleteSectionW(_In_ HSPFILEQ, _In_ HINF, _In_opt_ HINF, _In_ PCWSTR);
WINSETUPAPI BOOL WINAPI SetupQueueRenameA(_In_ HSPFILEQ, _In_ PCSTR, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_ PCSTR);
WINSETUPAPI BOOL WINAPI SetupQueueRenameW(_In_ HSPFILEQ, _In_ PCWSTR, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_ PCWSTR);
WINSETUPAPI BOOL WINAPI SetupQueueRenameSectionA(_In_ HSPFILEQ, _In_ HINF, _In_opt_ HINF, _In_ PCSTR);
WINSETUPAPI BOOL WINAPI SetupQueueRenameSectionW(_In_ HSPFILEQ, _In_ HINF, _In_opt_ HINF, _In_ PCWSTR);
WINSETUPAPI BOOL WINAPI SetupRemoveFileLogEntryA(_In_ HSPFILELOG, _In_opt_ PCSTR, _In_opt_ PCSTR);
WINSETUPAPI BOOL WINAPI SetupRemoveFileLogEntryW(_In_ HSPFILELOG, _In_opt_ PCWSTR, _In_opt_ PCWSTR);
WINSETUPAPI BOOL WINAPI SetupRemoveFromDiskSpaceListA(_In_ HDSKSPC, _In_ PCSTR, _In_ UINT, _Reserved_ PVOID, _Reserved_ UINT);
WINSETUPAPI BOOL WINAPI SetupRemoveFromDiskSpaceListW(_In_ HDSKSPC, _In_ PCWSTR, _In_ UINT, _Reserved_ PVOID, _Reserved_ UINT);
WINSETUPAPI BOOL WINAPI SetupRemoveFromSourceListA(_In_ DWORD, _In_ PCSTR);
WINSETUPAPI BOOL WINAPI SetupRemoveFromSourceListW(_In_ DWORD, _In_ PCWSTR);
WINSETUPAPI BOOL WINAPI SetupRemoveInstallSectionFromDiskSpaceListA(_In_ HDSKSPC, _In_ HINF, _In_opt_ HINF, _In_ PCSTR, _Reserved_ PVOID, _Reserved_ UINT);
WINSETUPAPI BOOL WINAPI SetupRemoveInstallSectionFromDiskSpaceListW(_In_ HDSKSPC, _In_ HINF, _In_opt_ HINF, _In_ PCWSTR, _Reserved_ PVOID, _Reserved_ UINT);
WINSETUPAPI BOOL WINAPI SetupRemoveSectionFromDiskSpaceListA(_In_ HDSKSPC, _In_ HINF, _In_opt_ HINF, _In_ PCSTR, _In_ UINT, _Reserved_ PVOID, _Reserved_ UINT);
WINSETUPAPI BOOL WINAPI SetupRemoveSectionFromDiskSpaceListW(_In_ HDSKSPC, _In_ HINF, _In_opt_ HINF, _In_ PCWSTR, _In_ UINT, _Reserved_ PVOID, _Reserved_ UINT);
WINSETUPAPI UINT WINAPI SetupRenameErrorA(_In_ HWND, _In_opt_ PCSTR, _In_ PCSTR, _In_ PCSTR, _In_ UINT, _In_ DWORD);
WINSETUPAPI UINT WINAPI SetupRenameErrorW(_In_ HWND, _In_opt_ PCWSTR, _In_ PCWSTR, _In_ PCWSTR, _In_ UINT, _In_ DWORD);
WINSETUPAPI BOOL WINAPI SetupScanFileQueueA(_In_ HSPFILEQ, _In_ DWORD, _In_opt_ HWND, _In_opt_ PSP_FILE_CALLBACK_A, _In_opt_ PVOID, _Out_ PDWORD);
WINSETUPAPI BOOL WINAPI SetupScanFileQueueW(_In_ HSPFILEQ, _In_ DWORD, _In_opt_ HWND, _In_opt_ PSP_FILE_CALLBACK_W, _In_opt_ PVOID, _Out_ PDWORD);
WINSETUPAPI BOOL WINAPI SetupSetDirectoryIdA(_In_ HINF, _In_ DWORD, _In_opt_ PCSTR);
WINSETUPAPI BOOL WINAPI SetupSetDirectoryIdW(_In_ HINF, _In_ DWORD, _In_opt_ PCWSTR);
WINSETUPAPI BOOL WINAPI SetupSetDirectoryIdExA(_In_ HINF, _In_ DWORD, _In_opt_ PCSTR, _In_ DWORD, _Reserved_ DWORD, _Reserved_ PVOID);
WINSETUPAPI BOOL WINAPI SetupSetDirectoryIdExW(_In_ HINF, _In_ DWORD, _In_opt_ PCWSTR, _In_ DWORD, _Reserved_ DWORD, _Reserved_ PVOID);
WINSETUPAPI BOOL WINAPI SetupSetFileQueueAlternatePlatformA(_In_ HSPFILEQ, _In_opt_ PSP_ALTPLATFORM_INFO, _In_opt_ PCSTR);
WINSETUPAPI BOOL WINAPI SetupSetFileQueueAlternatePlatformW(_In_ HSPFILEQ, _In_opt_ PSP_ALTPLATFORM_INFO, _In_opt_ PCWSTR);
WINSETUPAPI BOOL WINAPI SetupSetNonInteractiveMode(_In_ BOOL);
WINSETUPAPI BOOL WINAPI SetupSetPlatformPathOverrideA(_In_opt_ PCSTR);
WINSETUPAPI BOOL WINAPI SetupSetPlatformPathOverrideW(_In_opt_ PCWSTR);

WINSETUPAPI
BOOL
WINAPI
SetupSetSourceListA(
  _In_ DWORD Flags,
  _In_reads_(SourceCount) PCSTR *SourceList,
  _In_ UINT SourceCount);

WINSETUPAPI
BOOL
WINAPI
SetupSetSourceListW(
  _In_ DWORD Flags,
  _In_reads_(SourceCount) PCWSTR *SourceList,
  _In_ UINT SourceCount);

WINSETUPAPI VOID WINAPI SetupTermDefaultQueueCallback(_In_ PVOID);
WINSETUPAPI BOOL WINAPI SetupTerminateFileLog(_In_ HSPFILELOG);

WINSETUPAPI
BOOL
WINAPI
SetupUninstallOEMInfA(
  _In_ PCSTR InfFileName,
  _In_ DWORD Flags,
  _In_ PVOID Reserved);

WINSETUPAPI
BOOL
WINAPI
SetupUninstallOEMInfW(
  _In_ PCWSTR InfFileName,
  _In_ DWORD Flags,
  _In_ PVOID Reserved);

WINSETUPAPI DWORD WINAPI StampFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR);


WINSETUPAPI DWORD WINAPI pSetupCaptureAndConvertAnsiArg(PCSTR, PWSTR*);
WINSETUPAPI VOID WINAPI pSetupCenterWindowRelativeToParent(HWND);
WINSETUPAPI BOOL WINAPI pSetupConcatenatePaths(LPWSTR, LPCWSTR, DWORD, LPDWORD);
WINSETUPAPI PWSTR WINAPI pSetupDuplicateString(PCWSTR);
WINSETUPAPI BOOL WINAPI pSetupEnablePrivilege(PCWSTR, BOOL);
WINSETUPAPI PWSTR WINAPI pSetupGetFileTitle(PCWSTR);
WINSETUPAPI BOOL WINAPI pSetupGetVersionInfoFromImage(LPWSTR, PULARGE_INTEGER, LPWORD);
WINSETUPAPI DWORD WINAPI pSetupGuidFromString(PCWSTR, LPGUID);
WINSETUPAPI BOOL WINAPI pSetupIsGuidNull(LPGUID);
WINSETUPAPI BOOL WINAPI pSetupIsUserAdmin(VOID);
WINSETUPAPI PWSTR WINAPI pSetupMultiByteToUnicode(PCSTR, UINT);
WINSETUPAPI DWORD WINAPI pSetupOpenAndMapForRead(PCWSTR, PDWORD, PHANDLE, PHANDLE, PVOID*);
WINSETUPAPI DWORD WINAPI pSetupStringFromGuid(LPGUID, PWSTR, DWORD);


WINSETUPAPI DWORD  WINAPI pSetupStringTableAddString(HSTRING_TABLE, LPWSTR, DWORD);
WINSETUPAPI DWORD  WINAPI pSetupStringTableAddStringEx(HSTRING_TABLE, LPWSTR, DWORD, LPVOID, DWORD);
WINSETUPAPI VOID   WINAPI pSetupStringTableDestroy(HSTRING_TABLE);
WINSETUPAPI HSTRING_TABLE WINAPI pSetupStringTableDuplicate(HSTRING_TABLE);
WINSETUPAPI BOOL   WINAPI pSetupStringTableGetExtraData(HSTRING_TABLE, DWORD, LPVOID, DWORD);
WINSETUPAPI HSTRING_TABLE WINAPI pSetupStringTableInitialize(VOID);
WINSETUPAPI HSTRING_TABLE WINAPI pSetupStringTableInitializeEx(DWORD, DWORD);
WINSETUPAPI DWORD  WINAPI pSetupStringTableLookUpString(HSTRING_TABLE, LPWSTR, DWORD);
WINSETUPAPI DWORD  WINAPI pSetupStringTableLookUpStringEx(HSTRING_TABLE, LPWSTR, DWORD, LPVOID, DWORD);
WINSETUPAPI BOOL   WINAPI pSetupStringTableSetExtraData(HSTRING_TABLE, DWORD, LPVOID, DWORD);
WINSETUPAPI LPWSTR WINAPI pSetupStringTableStringFromId(HSTRING_TABLE, DWORD);
WINSETUPAPI BOOL   WINAPI pSetupStringTableStringFromIdEx(HSTRING_TABLE, DWORD, LPWSTR, LPDWORD);

WINSETUPAPI PSTR WINAPI pSetupUnicodeToMultiByte(PCWSTR lpUnicodeStr, UINT uCodePage);
WINSETUPAPI BOOL WINAPI pSetupUnmapAndCloseFile(HANDLE, HANDLE, PVOID);


WINSETUPAPI DWORD WINAPI TakeOwnershipOfFile(PCWSTR);
WINSETUPAPI PSTR WINAPI UnicodeToMultiByte(PCWSTR lpUnicodeStr, UINT uCodePage);


/* for backward compatability */
#define SetupDiCreateInterfaceDeviceW	SetupDiCreateDeviceInterfaceW
#define SetupDiCreateInterfaceDeviceRegKeyW	SetupDiCreateDeviceInterfaceRegKeyW
#define SetupDiOpenInterfaceDeviceW	SetupDiOpenDeviceInterfaceW
#define SetupDiGetInterfaceDeviceDetailW	SetupDiGetDeviceInterfaceDetailW
#define SetupDiCreateInterfaceDeviceA	SetupDiCreateDeviceInterfaceA
#define SetupDiCreateInterfaceDeviceRegKeyA	SetupDiCreateDeviceInterfaceRegKeyA
#define SetupDiOpenInterfaceDeviceA	SetupDiOpenDeviceInterfaceA
#define SetupDiGetInterfaceDeviceDetailA	SetupDiGetDeviceInterfaceDetailA

#ifdef UNICODE
#define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_W
#define InstallHinfSection InstallHinfSectionW
#define SetupAddInstallSectionToDiskSpaceList	SetupAddInstallSectionToDiskSpaceListW
#define SetupAddSectionToDiskSpaceList	SetupAddSectionToDiskSpaceListW
#define SetupAddToDiskSpaceList	SetupAddToDiskSpaceListW
#define SetupAddToSourceList	SetupAddToSourceListW
#define SetupAdjustDiskSpaceList	SetupAdjustDiskSpaceListW
#define SetupBackupError	SetupBackupErrorW
#define SetupCommitFileQueue	SetupCommitFileQueueW
#define SetupCopyError	SetupCopyErrorW
#define SetupCopyOEMInf	SetupCopyOEMInfW
#define SetupCreateDiskSpaceList	SetupCreateDiskSpaceListW
#define SetupDecompressOrCopyFile	SetupDecompressOrCopyFileW
#define SetupDefaultQueueCallback	SetupDefaultQueueCallbackW
#define SetupDeleteError	SetupDeleteErrorW
#define SetupDiBuildClassInfoListEx	SetupDiBuildClassInfoListExW
#define SetupDiClassGuidsFromNameEx	SetupDiClassGuidsFromNameExW
#define SetupDiClassGuidsFromName	SetupDiClassGuidsFromNameW
#define SetupDiClassNameFromGuidEx	SetupDiClassNameFromGuidExW
#define SetupDiClassNameFromGuid	SetupDiClassNameFromGuidW
#define SetupDiCreateDeviceInfoListEx	SetupDiCreateDeviceInfoListExW
#define SetupDiCreateDeviceInfo	SetupDiCreateDeviceInfoW
#define SetupDiCreateDeviceInterfaceRegKey	SetupDiCreateDeviceInterfaceRegKeyW
#define SetupDiCreateInterfaceDeviceRegKey	SetupDiCreateDeviceInterfaceRegKeyW
#define SetupDiCreateDeviceInterface	SetupDiCreateDeviceInterfaceW
#define SetupDiCreateInterfaceDevice	SetupDiCreateDeviceInterfaceW
#define SetupDiCreateDevRegKey	SetupDiCreateDevRegKeyW
#define SetupDiEnumDriverInfo	SetupDiEnumDriverInfoW
#define SetupDiGetActualSectionToInstall	SetupDiGetActualSectionToInstallW
#define SetupDiGetActualSectionToInstallEx	SetupDiGetActualSectionToInstallExW
#define SetupDiGetClassDescriptionEx	SetupDiGetClassDescriptionExW
#define SetupDiGetClassDescription	SetupDiGetClassDescriptionW
#define SetupDiGetClassDevPropertySheets	SetupDiGetClassDevPropertySheetsW
#define SetupDiGetClassDevsEx	SetupDiGetClassDevsExW
#define SetupDiGetClassDevs	SetupDiGetClassDevsW
#define SetupDiGetClassImageListEx	SetupDiGetClassImageListExW
#define SetupDiGetClassInstallParams	SetupDiGetClassInstallParamsW
#define SetupDiGetClassRegistryProperty	SetupDiGetClassRegistryPropertyW
#define SetupDiGetDeviceInfoListDetail	SetupDiGetDeviceInfoListDetailW
#define SetupDiGetDeviceInstallParams	SetupDiGetDeviceInstallParamsW
#define SetupDiGetDeviceInstanceId	SetupDiGetDeviceInstanceIdW
#define SetupDiGetDeviceInterfaceDetail	SetupDiGetDeviceInterfaceDetailW
#define SetupDiGetInterfaceDeviceDetail	SetupDiGetDeviceInterfaceDetailW
#define SetupDiGetDeviceRegistryProperty	SetupDiGetDeviceRegistryPropertyW
#define SetupDiGetDriverInfoDetail	SetupDiGetDriverInfoDetailW
#define SetupDiGetDriverInstallParams	SetupDiGetDriverInstallParamsW
#define SetupDiGetHwProfileFriendlyNameEx	SetupDiGetHwProfileFriendlyNameExW
#define SetupDiGetHwProfileFriendlyName	SetupDiGetHwProfileFriendlyNameW
#define SetupDiGetHwProfileListEx	SetupDiGetHwProfileListExW
#define SetupDiGetINFClass	SetupDiGetINFClassW
#define SetupDiGetSelectedDriver	SetupDiGetSelectedDriverW
#define SetupDiInstallClassEx	SetupDiInstallClassExW
#define SetupDiInstallClass	SetupDiInstallClassW
#define SetupDiOpenClassRegKeyEx	SetupDiOpenClassRegKeyExW
#define SetupDiOpenDeviceInfo	SetupDiOpenDeviceInfoW
#define SetupDiOpenDeviceInterface	SetupDiOpenDeviceInterfaceW
#define SetupDiOpenInterfaceDevice	SetupDiOpenDeviceInterfaceW
#define SetupDiSetClassInstallParams	SetupDiSetClassInstallParamsW
#define SetupDiSetClassRegistryProperty	SetupDiSetClassRegistryPropertyW
#define SetupDiSetDeviceInstallParams	SetupDiSetDeviceInstallParamsW
#define SetupDiSetDeviceRegistryProperty	SetupDiSetDeviceRegistryPropertyW
#define SetupDiSetDriverInstallParams	SetupDiSetDriverInstallParamsW
#define SetupDiSetSelectedDriver	SetupDiSetSelectedDriverW
#define SetupDuplicateDiskSpaceList	SetupDuplicateDiskSpaceListW
#define SetupFindFirstLine	SetupFindFirstLineW
#define SetupFindNextMatchLine	SetupFindNextMatchLineW
#define SetupFreeSourceList	SetupFreeSourceListW
#define SetupGetBackupInformation	SetupGetBackupInformationW
#define SetupGetFileCompressionInfo	SetupGetFileCompressionInfoW
#define SetupGetFileCompressionInfoEx	SetupGetFileCompressionInfoExW
#define SetupGetInfFileList	SetupGetInfFileListW
#define SetupGetInfInformation	SetupGetInfInformationW
#define SetupGetLineByIndex	SetupGetLineByIndexW
#define SetupGetLineCount	SetupGetLineCountW
#define SetupGetLineText	SetupGetLineTextW
#define SetupGetMultiSzField	SetupGetMultiSzFieldW
#define SetupGetSourceFileLocation	SetupGetSourceFileLocationW
#define SetupGetSourceFileSize	SetupGetSourceFileSizeW
#define SetupGetSourceInfo	SetupGetSourceInfoW
#define SetupGetStringField	SetupGetStringFieldW
#define SetupGetTargetPath	SetupGetTargetPathW
#define SetupInitializeFileLog	SetupInitializeFileLogW
#define SetupInstallFileEx	SetupInstallFileExW
#define SetupInstallFilesFromInfSection	SetupInstallFilesFromInfSectionW
#define SetupInstallFile	SetupInstallFileW
#define SetupInstallFromInfSection	SetupInstallFromInfSectionW
#define SetupInstallServicesFromInfSectionEx	SetupInstallServicesFromInfSectionExW
#define SetupInstallServicesFromInfSection	SetupInstallServicesFromInfSectionW
#define SetupIterateCabinet	SetupIterateCabinetW
#define SetupLogError	SetupLogErrorW
#define SetupLogFile	SetupLogFileW
#define SetupOpenAppendInfFile	SetupOpenAppendInfFileW
#define SetupOpenInfFile	SetupOpenInfFileW
#define SetupPromptForDisk	SetupPromptForDiskW
#define SetupQueryDrivesInDiskSpaceList	SetupQueryDrivesInDiskSpaceListW
#define SetupQueryFileLog	SetupQueryFileLogW
#define SetupQueryInfFileInformation	SetupQueryInfFileInformationW
#define SetupQueryInfOriginalFileInformation	SetupQueryInfOriginalFileInformationW
#define SetupQueryInfVersionInformation	SetupQueryInfVersionInformationW
#define SetupQuerySourceList	SetupQuerySourceListW
#define SetupQuerySpaceRequiredOnDrive	SetupQuerySpaceRequiredOnDriveW
#define SetupQueueCopyIndirect	SetupQueueCopyIndirectW
#define SetupQueueCopySection	SetupQueueCopySectionW
#define SetupQueueCopy	SetupQueueCopyW
#define SetupQueueDefaultCopy	SetupQueueDefaultCopyW
#define SetupQueueDeleteSection	SetupQueueDeleteSectionW
#define SetupQueueDelete	SetupQueueDeleteW
#define SetupQueueRenameSection	SetupQueueRenameSectionW
#define SetupQueueRename	SetupQueueRenameW
#define SetupRemoveFileLogEntry	SetupRemoveFileLogEntryW
#define SetupRemoveFromDiskSpaceList	SetupRemoveFromDiskSpaceListW
#define SetupRemoveFromSourceList	SetupRemoveFromSourceListW
#define SetupRemoveInstallSectionFromDiskSpaceList	SetupRemoveInstallSectionFromDiskSpaceListW
#define SetupRemoveSectionFromDiskSpaceList	SetupRemoveSectionFromDiskSpaceListW
#define SetupRenameError	SetupRenameErrorW
#define SetupScanFileQueue	SetupScanFileQueueW
#define SetupSetDirectoryIdEx	SetupSetDirectoryIdExW
#define SetupSetDirectoryId	SetupSetDirectoryIdW
#define SetupSetFileQueueAlternatePlatform	SetupSetFileQueueAlternatePlatformW
#define SetupSetPlatformPathOverride	SetupSetPlatformPathOverrideW
#define SetupSetSourceList	SetupSetSourceListW
#define SetupUninstallOEMInf    SetupUninstallOEMInfW
#else
#define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_A
#define InstallHinfSection InstallHinfSectionA
#define SetupAddInstallSectionToDiskSpaceList	SetupAddInstallSectionToDiskSpaceListA
#define SetupAddSectionToDiskSpaceList	SetupAddSectionToDiskSpaceListA
#define SetupAddToDiskSpaceList	SetupAddToDiskSpaceListA
#define SetupAddToSourceList	SetupAddToSourceListA
#define SetupAdjustDiskSpaceList	SetupAdjustDiskSpaceListA
#define SetupBackupError	SetupBackupErrorA
#define SetupCommitFileQueue	SetupCommitFileQueueA
#define SetupCopyError	SetupCopyErrorA
#define SetupCopyOEMInf	SetupCopyOEMInfA
#define SetupCreateDiskSpaceList	SetupCreateDiskSpaceListA
#define SetupDecompressOrCopyFile	SetupDecompressOrCopyFileA
#define SetupDefaultQueueCallback	SetupDefaultQueueCallbackA
#define SetupDeleteError	SetupDeleteErrorA
#define SetupDiBuildClassInfoListEx	SetupDiBuildClassInfoListExA
#define SetupDiClassGuidsFromName	SetupDiClassGuidsFromNameA
#define SetupDiClassGuidsFromNameEx	SetupDiClassGuidsFromNameExA
#define SetupDiClassNameFromGuid	SetupDiClassNameFromGuidA
#define SetupDiClassNameFromGuidEx	SetupDiClassNameFromGuidExA
#define SetupDiCreateDeviceInfo	SetupDiCreateDeviceInfoA
#define SetupDiCreateDeviceInfoListEx	SetupDiCreateDeviceInfoListExA
#define SetupDiCreateDeviceInterface	SetupDiCreateDeviceInterfaceA
#define SetupDiCreateInterfaceDevice	SetupDiCreateDeviceInterfaceA
#define SetupDiCreateDeviceInterfaceRegKey	SetupDiCreateDeviceInterfaceRegKeyA
#define SetupDiCreateInterfaceDeviceRegKey	SetupDiCreateDeviceInterfaceRegKeyA
#define SetupDiCreateDevRegKey	SetupDiCreateDevRegKeyA
#define SetupDiDeleteInterfaceDeviceData	SetupDiDeleteDeviceInterfaceData
#define SetupDiEnumDriverInfo	SetupDiEnumDriverInfoA
#define SetupDiGetActualSectionToInstall	SetupDiGetActualSectionToInstallA
#define SetupDiGetActualSectionToInstallEx	SetupDiGetActualSectionToInstallExA
#define SetupDiGetClassDescription	SetupDiGetClassDescriptionA
#define SetupDiGetClassDescriptionEx	SetupDiGetClassDescriptionExA
#define SetupDiGetClassDevPropertySheets	SetupDiGetClassDevPropertySheetsA
#define SetupDiGetClassDevs	SetupDiGetClassDevsA
#define SetupDiGetClassDevsEx	SetupDiGetClassDevsExA
#define SetupDiGetClassImageListEx	SetupDiGetClassImageListExA
#define SetupDiGetClassInstallParams	SetupDiGetClassInstallParamsA
#define SetupDiGetClassRegistryProperty	SetupDiGetClassRegistryPropertyA
#define SetupDiGetDeviceInfoListDetail	SetupDiGetDeviceInfoListDetailA
#define SetupDiGetDeviceInstallParams	SetupDiGetDeviceInstallParamsA
#define SetupDiGetDeviceInstanceId	SetupDiGetDeviceInstanceIdA
#define SetupDiGetDeviceInterfaceDetail	SetupDiGetDeviceInterfaceDetailA
#define SetupDiGetInterfaceDeviceDetail	SetupDiGetDeviceInterfaceDetailA
#define SetupDiGetDeviceRegistryProperty	SetupDiGetDeviceRegistryPropertyA
#define SetupDiGetDriverInfoDetail	SetupDiGetDriverInfoDetailA
#define SetupDiGetDriverInstallParams	SetupDiGetDriverInstallParamsA
#define SetupDiGetHwProfileFriendlyName	SetupDiGetHwProfileFriendlyNameA
#define SetupDiGetHwProfileFriendlyNameEx	SetupDiGetHwProfileFriendlyNameExA
#define SetupDiGetHwProfileListEx	SetupDiGetHwProfileListExA
#define SetupDiGetINFClass	SetupDiGetINFClassA
#define SetupDiGetSelectedDriver	SetupDiGetSelectedDriverA
#define SetupDiInstallClass	SetupDiInstallClassA
#define SetupDiInstallClassEx	SetupDiInstallClassExA
#define SetupDiOpenClassRegKeyEx	SetupDiOpenClassRegKeyExA
#define SetupDiOpenDeviceInfo	SetupDiOpenDeviceInfoA
#define SetupDiOpenDeviceInterface	SetupDiOpenDeviceInterfaceA
#define SetupDiOpenInterfaceDevice	SetupDiOpenDeviceInterfaceA
#define SetupDiSetClassInstallParams	SetupDiSetClassInstallParamsA
#define SetupDiSetClassRegistryProperty	SetupDiSetClassRegistryPropertyA
#define SetupDiSetDeviceInstallParams	SetupDiSetDeviceInstallParamsA
#define SetupDiSetDeviceRegistryProperty	SetupDiSetDeviceRegistryPropertyA
#define SetupDiSetDriverInstallParams	SetupDiSetDriverInstallParamsA
#define SetupDiSetSelectedDriver	SetupDiSetSelectedDriverA
#define SetupDuplicateDiskSpaceList	SetupDuplicateDiskSpaceListA
#define SetupFindFirstLine	SetupFindFirstLineA
#define SetupFindNextMatchLine	SetupFindNextMatchLineA
#define SetupFreeSourceList	SetupFreeSourceListA
#define SetupGetBackupInformation	SetupGetBackupInformationA
#define SetupGetFileCompressionInfo	SetupGetFileCompressionInfoA
#define SetupGetFileCompressionInfoEx	SetupGetFileCompressionInfoExA
#define SetupGetInfFileList	SetupGetInfFileListA
#define SetupGetInfInformation	SetupGetInfInformationA
#define SetupGetLineByIndex	SetupGetLineByIndexA
#define SetupGetLineCount	SetupGetLineCountA
#define SetupGetLineText	SetupGetLineTextA
#define SetupGetMultiSzField	SetupGetMultiSzFieldA
#define SetupGetSourceFileLocation	SetupGetSourceFileLocationA
#define SetupGetSourceFileSize	SetupGetSourceFileSizeA
#define SetupGetSourceInfo	SetupGetSourceInfoA
#define SetupGetStringField	SetupGetStringFieldA
#define SetupGetTargetPath	SetupGetTargetPathA
#define SetupInitializeFileLog	SetupInitializeFileLogA
#define SetupInstallFile	SetupInstallFileA
#define SetupInstallFileEx	SetupInstallFileExA
#define SetupInstallFilesFromInfSection	SetupInstallFilesFromInfSectionA
#define SetupInstallFromInfSection	SetupInstallFromInfSectionA
#define SetupInstallServicesFromInfSection	SetupInstallServicesFromInfSectionA
#define SetupInstallServicesFromInfSectionEx	SetupInstallServicesFromInfSectionExA
#define SetupIterateCabinet	SetupIterateCabinetA
#define SetupLogError	SetupLogErrorA
#define SetupLogFile	SetupLogFileA
#define SetupOpenAppendInfFile	SetupOpenAppendInfFileA
#define SetupOpenInfFile	SetupOpenInfFileA
#define SetupPromptForDisk	SetupPromptForDiskA
#define SetupQueryDrivesInDiskSpaceList	SetupQueryDrivesInDiskSpaceListA
#define SetupQueryFileLog	SetupQueryFileLogA
#define SetupQueryInfFileInformation	SetupQueryInfFileInformationA
#define SetupQueryInfOriginalFileInformation	SetupQueryInfOriginalFileInformationA
#define SetupQueryInfVersionInformation	SetupQueryInfVersionInformationA
#define SetupQuerySourceList	SetupQuerySourceListA
#define SetupQuerySpaceRequiredOnDrive	SetupQuerySpaceRequiredOnDriveA
#define SetupQueueCopy	SetupQueueCopyA
#define SetupQueueCopyIndirect	SetupQueueCopyIndirectA
#define SetupQueueCopySection	SetupQueueCopySectionA
#define SetupQueueDefaultCopy	SetupQueueDefaultCopyA
#define SetupQueueDelete	SetupQueueDeleteA
#define SetupQueueDeleteSection	SetupQueueDeleteSectionA
#define SetupQueueRename	SetupQueueRenameA
#define SetupQueueRenameSection	SetupQueueRenameSectionA
#define SetupRemoveFileLogEntry	SetupRemoveFileLogEntryA
#define SetupRemoveFromDiskSpaceList	SetupRemoveFromDiskSpaceListA
#define SetupRemoveFromSourceList	SetupRemoveFromSourceListA
#define SetupRemoveInstallSectionFromDiskSpaceList	SetupRemoveInstallSectionFromDiskSpaceListA
#define SetupRemoveSectionFromDiskSpaceList	SetupRemoveSectionFromDiskSpaceListA
#define SetupRenameError	SetupRenameErrorA
#define SetupScanFileQueue	SetupScanFileQueueA
#define SetupSetDirectoryId	SetupSetDirectoryIdA
#define SetupSetDirectoryIdEx	SetupSetDirectoryIdExA
#define SetupSetFileQueueAlternatePlatform	SetupSetFileQueueAlternatePlatformA
#define SetupSetPlatformPathOverride	SetupSetPlatformPathOverrideA
#define SetupSetSourceList	SetupSetSourceListA
#define SetupUninstallOEMInf    SetupUninstallOEMInfA
#endif	/* UNICODE */

#endif /* RC_INVOKED */

#ifdef __cplusplus
}
#endif

#include <poppack.h>
#endif /* _SETUPAPI_H_ */