1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW Windows headers
5  *
6  * Authors: Vladimir Vlasov
7  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8  * Source: $(DRUNTIMESRC src/core/sys/windows/_setupapi.d)
9  */
10 module core.sys.windows.setupapi;
version(Windows)11 version (Windows):
12 @system:
13 
14 version (ANSI) {} else version = Unicode;
15 pragma(lib, "setupapi");
16 
17 import core.sys.windows.basetyps, core.sys.windows.commctrl, core.sys.windows.prsht, core.sys.windows.w32api,
18   core.sys.windows.winreg, core.sys.windows.windef;
19 import core.sys.windows.winbase; // for SYSTEMTIME
20 
21 /*static if (_WIN32_WINNT < _WIN32_WINDOWS) {
22 enum UINT _SETUPAPI_VER = _WIN32_WINNT; // SetupAPI version follows Windows NT version
23 } else static if (_WIN32_WINDOWS) {
24     static if (_WIN32_WINDOWS >= 0x0490) {
25 enum UINT _SETUPAPI_VER = 0x0500;     // WinME uses same version of SetupAPI as Win2k
26     } else static if (_WIN32_WINDOWS >= 0x0410) {
27 enum UINT _SETUPAPI_VER = 0x0410;     // Indicates version of SetupAPI shipped with Win98
28     } else {
29 enum UINT _SETUPAPI_VER = 0x0400;     // Earliest SetupAPI version
30     }
31 } else {
32 enum UINT _SETUPAPI_VER = 0x0501;
33 }
34 
35 version (WindowsNTonly) {
36     static if (_WIN32_WINNT >= 0x500) {
37 enum UINT USE_SP_DRVINFO_DATA_V1 = 0;
38     } else {
39 enum UINT USE_SP_DRVINFO_DATA_V1 = 1;
40     }
41 } else {
42 enum UINT USE_SP_DRVINFO_DATA_V1 = 1;
43 }*/
44 /+
45 enum UINT _SETUPAPI_VER = 0x0400;     // Earliest SetupAPI version
46 enum UINT USE_SP_DRVINFO_DATA_V1 = 1;
47 +/
48 enum UINT _SETUPAPI_VER          = _WIN32_WINNT;
49 enum bool USE_SP_DRVINFO_DATA_V1 = _WIN32_WINNT < 0x500;
50 
51 enum : uint {
52     LINE_LEN                  = 256,
53     MAX_INF_STRING_LENGTH     = 4096,
54     MAX_TITLE_LEN             = 60,
55     MAX_INSTRUCTION_LEN       = 256,
56     MAX_LABEL_LEN             = 30,
57     MAX_SERVICE_NAME_LEN      = 256,
58     MAX_SUBTITLE_LEN          = 256,
59     SP_MAX_MACHINENAME_LENGTH = MAX_PATH + 3
60 }
61 
62 enum : DWORD {
63     COPYFLG_WARN_IF_SKIP         = 0x00000001,
64     COPYFLG_NOSKIP               = 0x00000002,
65     COPYFLG_NOVERSIONCHECK       = 0x00000004,
66     COPYFLG_FORCE_FILE_IN_USE    = 0x00000008,
67     COPYFLG_NO_OVERWRITE         = 0x00000010,
68     COPYFLG_NO_VERSION_DIALOG    = 0x00000020,
69     COPYFLG_OVERWRITE_OLDER_ONLY = 0x00000040,
70     COPYFLG_REPLACEONLY          = 0x00000400,
71     COPYFLG_NODECOMP             = 0x00000800,
72     COPYFLG_REPLACE_BOOT_FILE    = 0x00001000,
73     COPYFLG_NOPRUNE              = 0x00002000
74 }
75 
76 enum : DWORD {
77     DELFLG_IN_USE  = 0x00000001,
78     DELFLG_IN_USE1 = 0x00010000
79 }
80 
81 enum : DWORD {
82     DI_REMOVEDEVICE_GLOBAL              = 0x00000001,
83     DI_REMOVEDEVICE_CONFIGSPECIFIC      = 0x00000002,
84     DI_UNREMOVEDEVICE_CONFIGSPECIFIC    = 0x00000002,
85     DI_SHOWOEM                          = 0x00000001,
86     DI_SHOWCOMPAT                       = 0x00000002,
87     DI_SHOWCLASS                        = 0x00000004,
88     DI_SHOWALL                          = 0x00000007,
89     DI_NOVCP                            = 0x00000008,
90     DI_DIDCOMPAT                        = 0x00000010,
91     DI_DIDCLASS                         = 0x00000020,
92     DI_AUTOASSIGNRES                    = 0x00000040,
93     DI_NEEDRESTART                      = 0x00000080,
94     DI_NEEDREBOOT                       = 0x00000100,
95     DI_NOBROWSE                         = 0x00000200,
96     DI_MULTMFGS                         = 0x00000400,
97     DI_DISABLED                         = 0x00000800,
98     DI_GENERALPAGE_ADDED                = 0x00001000,
99     DI_RESOURCEPAGE_ADDED               = 0x00002000,
100     DI_PROPERTIES_CHANGE                = 0x00004000,
101     DI_INF_IS_SORTED                    = 0x00008000,
102     DI_ENUMSINGLEINF                    = 0x00010000,
103     DI_DONOTCALLCONFIGMG                = 0x00020000,
104     DI_INSTALLDISABLED                  = 0x00040000,
105     DI_COMPAT_FROM_CLASS                = 0x00080000,
106     DI_CLASSINSTALLPARAMS               = 0x00100000,
107     DI_NODI_DEFAULTACTION               = 0x00200000,
108     DI_QUIETINSTALL                     = 0x00800000,
109     DI_NOFILECOPY                       = 0x01000000,
110     DI_FORCECOPY                        = 0x02000000,
111     DI_DRIVERPAGE_ADDED                 = 0x04000000,
112     DI_USECI_SELECTSTRINGS              = 0x08000000,
113     DI_OVERRIDE_INFFLAGS                = 0x10000000,
114     DI_PROPS_NOCHANGEUSAGE              = 0x20000000,
115     DI_NOSELECTICONS                    = 0x40000000,
116     DI_NOWRITE_IDS                      = 0x80000000,
117     DI_FLAGSEX_USEOLDINFSEARCH          = 0x00000001,
118     DI_FLAGSEX_AUTOSELECTRANK0          = 0x00000002,
119     DI_FLAGSEX_CI_FAILED                = 0x00000004,
120     DI_FLAGSEX_DIDINFOLIST              = 0x00000010,
121     DI_FLAGSEX_DIDCOMPATINFO            = 0x00000020,
122     DI_FLAGSEX_FILTERCLASSES            = 0x00000040,
123     DI_FLAGSEX_SETFAILEDINSTALL         = 0x00000080,
124     DI_FLAGSEX_DEVICECHANGE             = 0x00000100,
125     DI_FLAGSEX_ALWAYSWRITEIDS           = 0x00000200,
126     DI_FLAGSEX_PROPCHANGE_PENDING       = 0x00000400,
127     DI_FLAGSEX_ALLOWEXCLUDEDDRVS        = 0x00000800,
128     DI_FLAGSEX_NOUIONQUERYREMOVE        = 0x00001000,
129     DI_FLAGSEX_USECLASSFORCOMPAT        = 0x00002000,
130     DI_FLAGSEX_OLDINF_IN_CLASSLIST      = 0x00004000,
131     DI_FLAGSEX_NO_DRVREG_MODIFY         = 0x00008000,
132     DI_FLAGSEX_IN_SYSTEM_SETUP          = 0x00010000,
133     DI_FLAGSEX_INET_DRIVER              = 0x00020000,
134     DI_FLAGSEX_APPENDDRIVERLIST         = 0x00040000,
135     DI_FLAGSEX_PREINSTALLBACKUP         = 0x00080000,
136     DI_FLAGSEX_BACKUPONREPLACE          = 0x00100000,
137     DI_FLAGSEX_DRIVERLIST_FROM_URL      = 0x00200000,
138     DI_FLAGSEX_RESERVED1                = 0x00400000,
139     DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS = 0x00800000,
140     DI_FLAGSEX_POWERPAGE_ADDED          = 0x01000000
141 }
142 
143 enum : DWORD {
144     DIBCI_NOINSTALLCLASS = 0x00000001,
145     DIBCI_NODISPLAYCLASS = 0x00000002
146 }
147 
148 enum : DWORD {
149     DICD_GENERATE_ID       = 0x00000001,
150     DICD_INHERIT_CLASSDRVS = 0x00000002
151 }
152 
153 enum : DWORD {
154     DICS_ENABLE = 1,
155     DICS_DISABLE,
156     DICS_PROPCHANGE,
157     DICS_START,
158     DICS_STOP // = 5
159 }
160 
161 enum : DWORD {
162     DICS_FLAG_GLOBAL         = 1,
163     DICS_FLAG_CONFIGSPECIFIC = 2,
164     DICS_FLAG_CONFIGGENERAL  = 4
165 }
166 
167 alias UINT DI_FUNCTION;
168 
169 enum : DI_FUNCTION {
170     DIF_SELECTDEVICE = 1,
171     DIF_INSTALLDEVICE,
172     DIF_ASSIGNRESOURCES,
173     DIF_PROPERTIES,
174     DIF_REMOVE,
175     DIF_FIRSTTIMESETUP,
176     DIF_FOUNDDEVICE,
177     DIF_SELECTCLASSDRIVERS,
178     DIF_VALIDATECLASSDRIVERS,
179     DIF_INSTALLCLASSDRIVERS,
180     DIF_CALCDISKSPACE,
181     DIF_DESTROYPRIVATEDATA,
182     DIF_VALIDATEDRIVER,
183     DIF_MOVEDEVICE,
184     DIF_DETECT,
185     DIF_INSTALLWIZARD,
186     DIF_DESTROYWIZARDDATA,
187     DIF_PROPERTYCHANGE,
188     DIF_ENABLECLASS,
189     DIF_DETECTVERIFY,
190     DIF_INSTALLDEVICEFILES,
191     DIF_UNREMOVE,
192     DIF_SELECTBESTCOMPATDRV,
193     DIF_ALLOW_INSTALL,
194     DIF_REGISTERDEVICE,
195     DIF_NEWDEVICEWIZARD_PRESELECT,
196     DIF_NEWDEVICEWIZARD_SELECT,
197     DIF_NEWDEVICEWIZARD_PREANALYZE,
198     DIF_NEWDEVICEWIZARD_POSTANALYZE,
199     DIF_NEWDEVICEWIZARD_FINISHINSTALL,
200     DIF_UNUSED1,
201     DIF_INSTALLINTERFACES,
202     DIF_DETECTCANCEL,
203     DIF_REGISTER_COINSTALLERS,
204     DIF_ADDPROPERTYPAGE_ADVANCED,
205     DIF_ADDPROPERTYPAGE_BASIC,
206     DIF_RESERVED1,
207     DIF_TROUBLESHOOTER,
208     DIF_POWERMESSAGEWAKE // = 39
209 }
210 
211 enum : DWORD {
212     DIGCF_DEFAULT         = 0x00000001,
213     DIGCF_PRESENT         = 0x00000002,
214     DIGCF_ALLCLASSES      = 0x00000004,
215     DIGCF_PROFILE         = 0x00000008,
216     DIGCF_DEVICEINTERFACE = 0x00000010
217 }
218 
219 deprecated enum : DWORD {
220     DIGCF_INTERFACEDEVICE = DIGCF_DEVICEINTERFACE
221 }
222 
223 enum : DWORD {
224     DIGCDP_FLAG_BASIC    = 0x00000001,
225     DIGCDP_FLAG_ADVANCED = 0x00000002
226 }
227 
228 enum : DWORD {
229     DIOCR_INSTALLER = 0x00000001,
230     DIOCR_INTERFACE = 0x00000002
231 }
232 
233 enum : DWORD {
234     DIODI_NO_ADD = 0x00000001
235 }
236 
237 enum : DWORD {
238     DIOD_INHERIT_CLASSDRVS = 0x00000002,
239     DIOD_CANCEL_REMOVE     = 0x00000004
240 }
241 
242 enum : DWORD {
243     DIREG_DEV  = 0x00000001,
244     DIREG_DRV  = 0x00000002,
245     DIREG_BOTH = 0x00000004
246 }
247 
248 enum : int {
249     DIRID_ABSOLUTE       = -1,
250     DIRID_NULL           = 0,
251     DIRID_SRCPATH        = 1,
252     DIRID_WINDOWS        = 10,
253     DIRID_SYSTEM         = 11,
254     DIRID_DRIVERS        = 12,
255     DIRID_IOSUBSYS       = DIRID_DRIVERS,
256     DIRID_INF            = 17,
257     DIRID_HELP           = 18,
258     DIRID_FONTS          = 20,
259     DIRID_VIEWERS        = 21,
260     DIRID_COLOR          = 23,
261     DIRID_APPS           = 24,
262     DIRID_SHARED         = 25,
263     DIRID_BOOT           = 30,
264     DIRID_SYSTEM16       = 50,
265     DIRID_SPOOL          = 51,
266     DIRID_SPOOLDRIVERS   = 52,
267     DIRID_USERPROFILE    = 53,
268     DIRID_LOADER         = 54,
269     DIRID_PRINTPROCESSOR = 55,
270     DIRID_DEFAULT        = DIRID_SYSTEM
271 }
272 
273 enum : int {
274     DIRID_COMMON_STARTMENU        = 16406,
275     DIRID_COMMON_PROGRAMS         = 16407,
276     DIRID_COMMON_STARTUP          = 16408,
277     DIRID_COMMON_DESKTOPDIRECTORY = 16409,
278     DIRID_COMMON_FAVORITES        = 16415,
279     DIRID_COMMON_APPDATA          = 16419,
280     DIRID_PROGRAM_FILES           = 16422,
281     DIRID_SYSTEM_X86              = 16425,
282     DIRID_PROGRAM_FILES_X86       = 16426,
283     DIRID_PROGRAM_FILES_COMMON    = 16427,
284     DIRID_PROGRAM_FILES_COMMONX86 = 16428,
285     DIRID_COMMON_TEMPLATES        = 16429,
286     DIRID_COMMON_DOCUMENTS        = 16430,
287     DIRID_USER                    = 0x8000,
288     DIRID_ABSOLUTE_16BIT          = 0xffff
289 }
290 
291 enum : DWORD {
292     DMI_MASK    = 0x00000001,
293     DMI_BKCOLOR = 0x00000002,
294     DMI_USERECT = 0x00000004
295 }
296 
297 enum : DWORD {
298     DNF_DUPDESC           = 0x00000001,
299     DNF_OLDDRIVER         = 0x00000002,
300     DNF_EXCLUDEFROMLIST   = 0x00000004,
301     DNF_NODRIVER          = 0x00000008,
302     DNF_LEGACYINF         = 0x00000010,
303     DNF_CLASS_DRIVER      = 0x00000020,
304     DNF_COMPATIBLE_DRIVER = 0x00000040,
305     DNF_INET_DRIVER       = 0x00000080,
306     DNF_UNUSED1           = 0x00000100,
307     DNF_INDEXED_DRIVER    = 0x00000200,
308     DNF_OLD_INET_DRIVER   = 0x00000400,
309     DNF_BAD_DRIVER        = 0x00000800,
310     DNF_DUPPROVIDER       = 0x00001000
311 }
312 
313 enum : UINT {
314     DPROMPT_SUCCESS,
315     DPROMPT_CANCEL,
316     DPROMPT_SKIPFILE,
317     DPROMPT_BUFFERTOOSMALL,
318     DPROMPT_OUTOFMEMORY // = 4
319 }
320 
321 enum : DWORD {
322     DRIVER_HARDWAREID_RANK             = 0x00000FFF,
323     DRIVER_COMPATID_RANK               = 0x00003FFF,
324     DRIVER_UNTRUSTED_RANK              = 0x00008000,
325     DRIVER_UNTRUSTED_HARDWAREID_RANK   = 0x00008FFF,
326     DRIVER_UNTRUSTED_COMPATID_RANK     = 0x0000BFFF,
327     DRIVER_W9X_SUSPECT_RANK            = 0x0000C000,
328     DRIVER_W9X_SUSPECT_HARDWAREID_RANK = 0x0000CFFF,
329     DRIVER_W9X_SUSPECT_COMPATID_RANK   = 0x0000FFFF
330 }
331 
332 enum : DWORD {
333     DYNAWIZ_FLAG_PAGESADDED             = 0x00000001,
334     DYNAWIZ_FLAG_INSTALLDET_NEXT        = 0x00000002,
335     DYNAWIZ_FLAG_INSTALLDET_PREV        = 0x00000004,
336     DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT = 0x00000008
337 }
338 
339 enum : WORD {
340     ENABLECLASS_QUERY,
341     ENABLECLASS_SUCCESS,
342     ENABLECLASS_FAILURE // = 2
343 }
344 
345 enum : DWORD {
346     ERROR_EXPECTED_SECTION_NAME       = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0,
347     ERROR_BAD_SECTION_NAME_LINE       = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 1,
348     ERROR_SECTION_NAME_TOO_LONG       = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 2,
349     ERROR_GENERAL_SYNTAX              = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 3,
350     ERROR_WRONG_INF_STYLE             = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x100,
351     ERROR_NOT_INSTALLED               = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x1000,
352     ERROR_SECTION_NOT_FOUND           = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x101,
353     ERROR_LINE_NOT_FOUND              = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x102,
354     ERROR_NO_BACKUP                   = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x103,
355     ERROR_NO_ASSOCIATED_CLASS         = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x200,
356     ERROR_CLASS_MISMATCH              = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x201,
357     ERROR_DUPLICATE_FOUND             = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x202,
358     ERROR_NO_DRIVER_SELECTED          = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x203,
359     ERROR_KEY_DOES_NOT_EXIST          = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x204,
360     ERROR_INVALID_DEVINST_NAME        = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x205,
361     ERROR_INVALID_CLASS               = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x206,
362     ERROR_DEVINST_ALREADY_EXISTS      = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x207,
363     ERROR_DEVINFO_NOT_REGISTERED      = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x208,
364     ERROR_INVALID_REG_PROPERTY        = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x209,
365     ERROR_NO_INF                      = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20A,
366     ERROR_NO_SUCH_DEVINST             = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20B,
367     ERROR_CANT_LOAD_CLASS_ICON        = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20C,
368     ERROR_INVALID_CLASS_INSTALLER     = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20D,
369     ERROR_DI_DO_DEFAULT               = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20E,
370     ERROR_DI_NOFILECOPY               = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20F,
371     ERROR_INVALID_HWPROFILE           = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x210,
372     ERROR_NO_DEVICE_SELECTED          = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x211,
373     ERROR_DEVINFO_LIST_LOCKED         = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x212,
374     ERROR_DEVINFO_DATA_LOCKED         = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x213,
375     ERROR_DI_BAD_PATH                 = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x214,
376     ERROR_NO_CLASSINSTALL_PARAMS      = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x215,
377     ERROR_FILEQUEUE_LOCKED            = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x216,
378     ERROR_BAD_SERVICE_INSTALLSECT     = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x217,
379     ERROR_NO_CLASS_DRIVER_LIST        = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x218,
380     ERROR_NO_ASSOCIATED_SERVICE       = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x219,
381     ERROR_NO_DEFAULT_DEVICE_INTERFACE = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21A,
382     ERROR_DEVICE_INTERFACE_ACTIVE     = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21B,
383     ERROR_DEVICE_INTERFACE_REMOVED    = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21C,
384     ERROR_BAD_INTERFACE_INSTALLSECT   = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21D,
385     ERROR_NO_SUCH_INTERFACE_CLASS     = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21E,
386     ERROR_INVALID_REFERENCE_STRING    = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21F,
387     ERROR_INVALID_MACHINENAME         = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x220,
388     ERROR_REMOTE_COMM_FAILURE         = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x221,
389     ERROR_MACHINE_UNAVAILABLE         = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x222,
390     ERROR_NO_CONFIGMGR_SERVICES       = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x223,
391     ERROR_INVALID_PROPPAGE_PROVIDER   = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x224,
392     ERROR_NO_SUCH_DEVICE_INTERFACE    = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x225,
393     ERROR_DI_POSTPROCESSING_REQUIRED  = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x226,
394     ERROR_INVALID_COINSTALLER         = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x227,
395     ERROR_NO_COMPAT_DRIVERS           = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x228,
396     ERROR_NO_DEVICE_ICON              = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x229,
397     ERROR_INVALID_INF_LOGCONFIG       = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22A,
398     ERROR_DI_DONT_INSTALL             = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22B,
399     ERROR_INVALID_FILTER_DRIVER       = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22C,
400     ERROR_NON_WINDOWS_NT_DRIVER       = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22D,
401     ERROR_NON_WINDOWS_DRIVER          = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22E,
402     ERROR_NO_CATALOG_FOR_OEM_INF      = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22F,
403     ERROR_DEVINSTALL_QUEUE_NONNATIVE  = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x230,
404     ERROR_NOT_DISABLEABLE             = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x231,
405     ERROR_CANT_REMOVE_DEVINST         = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x232
406 }
407 
408 deprecated enum : DWORD {
409     ERROR_NO_DEFAULT_INTERFACE_DEVICE = ERROR_NO_DEFAULT_DEVICE_INTERFACE,
410     ERROR_INTERFACE_DEVICE_ACTIVE     = ERROR_DEVICE_INTERFACE_ACTIVE,
411     ERROR_INTERFACE_DEVICE_REMOVED    = ERROR_DEVICE_INTERFACE_REMOVED,
412     ERROR_NO_SUCH_INTERFACE_DEVICE    = ERROR_NO_SUCH_DEVICE_INTERFACE,
413 }
414 
415 enum : UINT {
416     FILEOP_COPY,
417     FILEOP_RENAME,
418     FILEOP_DELETE,
419     FILEOP_BACKUP,
420     FILEOP_NEWPATH, // = 4
421     FILEOP_ABORT = 0,
422     FILEOP_DOIT,
423     FILEOP_SKIP, // = 2
424     FILEOP_RETRY = FILEOP_DOIT
425 }
426 
427 enum : UINT {
428     FILE_COMPRESSION_NONE,
429     FILE_COMPRESSION_WINLZA,
430     FILE_COMPRESSION_MSZIP,
431     FILE_COMPRESSION_NTCAB // = 3
432 }
433 
434 enum : DWORD {
435     FLG_ADDREG_TYPE_SZ        = 0x00000000,
436     FLG_ADDREG_BINVALUETYPE   = 0x00000001,
437     FLG_ADDREG_NOCLOBBER      = 0x00000002,
438     FLG_ADDREG_DELVAL         = 0x00000004,
439     FLG_ADDREG_APPEND         = 0x00000008,
440     FLG_ADDREG_KEYONLY        = 0x00000010,
441     FLG_ADDREG_OVERWRITEONLY  = 0x00000020,
442     FLG_ADDREG_TYPE_MULTI_SZ  = 0x00010000,
443     FLG_ADDREG_TYPE_EXPAND_SZ = 0x00020000,
444     FLG_ADDREG_TYPE_BINARY    = 0x00000000 | FLG_ADDREG_BINVALUETYPE,
445     FLG_ADDREG_TYPE_DWORD     = 0x00010000 | FLG_ADDREG_BINVALUETYPE,
446     FLG_ADDREG_TYPE_NONE      = 0x00020000 | FLG_ADDREG_BINVALUETYPE,
447     FLG_ADDREG_TYPE_MASK      = 0xFFFF0000 | FLG_ADDREG_BINVALUETYPE
448 }
449 
450 static if (_SETUPAPI_VER >= 0x0501) {
451     enum : DWORD {
452         FLG_ADDREG_64BITKEY       = 0x00001000,
453         FLG_ADDREG_KEYONLY_COMMON = 0x00002000,
454         FLG_ADDREG_32BITKEY       = 0x00004000,
455         FLG_ADDREG_DELREG_BIT     = 0x00008000
456     }
457 }
458 
459 enum : DWORD {
460     FLG_DELREG_VALUE = 0x00000000
461 }
462 
463 static if (_SETUPAPI_VER >= 0x0501) {
464     enum : DWORD {
465         FLG_DELREG_TYPE_MASK          = FLG_ADDREG_TYPE_MASK,
466         FLG_DELREG_TYPE_SZ            = FLG_ADDREG_TYPE_SZ,
467         FLG_DELREG_TYPE_MULTI_SZ      = FLG_ADDREG_TYPE_MULTI_SZ,
468         FLG_DELREG_TYPE_EXPAND_SZ     = FLG_ADDREG_TYPE_EXPAND_SZ,
469         FLG_DELREG_TYPE_BINARY        = FLG_ADDREG_TYPE_BINARY,
470         FLG_DELREG_TYPE_DWORD         = FLG_ADDREG_TYPE_DWORD,
471         FLG_DELREG_TYPE_NONE          = FLG_ADDREG_TYPE_NONE,
472         FLG_DELREG_64BITKEY           = FLG_ADDREG_64BITKEY,
473         FLG_DELREG_KEYONLY_COMMON     = FLG_ADDREG_KEYONLY_COMMON,
474         FLG_DELREG_32BITKEY           = FLG_ADDREG_32BITKEY,
475         FLG_DELREG_OPERATION_MASK     = 0x000000FE,
476         FLG_DELREG_MULTI_SZ_DELSTRING = 0x00000002 | FLG_DELREG_TYPE_MULTI_SZ | FLG_ADDREG_DELREG_BIT
477     }
478 }
479 
480 enum : DWORD {
481     FLG_BITREG_CLEARBITS = 0x00000000,
482     FLG_BITREG_SETBITS   = 0x00000001
483 }
484 
485 static if (_SETUPAPI_VER >= 0x0501) {
486     enum : DWORD {
487         FLG_BITREG_64BITKEY = 0x00001000,
488         FLG_BITREG_32BITKEY = 0x00004000
489     }
490 }
491 
492 enum : DWORD {
493     FLG_PROFITEM_CURRENTUSER = 0x00000001,
494     FLG_PROFITEM_DELETE      = 0x00000002,
495     FLG_PROFITEM_GROUP       = 0x00000004,
496     FLG_PROFITEM_CSIDL       = 0x00000008
497 }
498 
499 enum : DWORD {
500     FLG_REGSVR_DLLREGISTER = 0x00000001,
501     FLG_REGSVR_DLLINSTALL  = 0x00000002
502 }
503 
504 enum {
505     IDD_DYNAWIZ_FIRSTPAGE = 10000,
506     IDD_DYNAWIZ_SELECT_PREVPAGE,
507     IDD_DYNAWIZ_SELECT_NEXTPAGE,
508     IDD_DYNAWIZ_ANALYZE_PREVPAGE,
509     IDD_DYNAWIZ_ANALYZE_NEXTPAGE, // = 1004
510     IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE = 10006,
511     IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE,
512     IDD_DYNAWIZ_INSTALLDETECTED_NODEVS,
513     IDD_DYNAWIZ_SELECTDEV_PAGE,
514     IDD_DYNAWIZ_ANALYZEDEV_PAGE,
515     IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE,
516     IDD_DYNAWIZ_SELECTCLASS_PAGE, // = 10012
517     MIN_IDD_DYNAWIZ_RESOURCE_ID = 10000,
518     MAX_IDD_DYNAWIZ_RESOURCE_ID = 11000
519 }
520 
521 enum : DWORD {
522     IDF_NOBROWSE     = 0x00000001,
523     IDF_NOSKIP       = 0x00000002,
524     IDF_NODETAILS    = 0x00000004,
525     IDF_NOCOMPRESSED = 0x00000008,
526     IDF_CHECKFIRST   = 0x00000100,
527     IDF_NOBEEP       = 0x00000200,
528     IDF_NOFOREGROUND = 0x00000400,
529     IDF_WARNIFSKIP   = 0x00000800
530 }
531 
532 static if (_SETUPAPI_VER >= 0x0501) {
533     enum : DWORD {
534         IDF_NOREMOVABLEMEDIAPROMPT = 0x00001000,
535         IDF_USEDISKNAMEASPROMPT    = 0x00002000,
536         IDF_OEMDISK                = 0x80000000
537     }
538 }
539 
540 enum {
541     IDI_RESOURCEFIRST          = 159,
542     IDI_RESOURCE               = 159,
543     IDI_RESOURCELAST           = 161,
544     IDI_RESOURCEOVERLAYFIRST   = 161,
545     IDI_RESOURCEOVERLAYLAST    = 161,
546     IDI_CONFLICT               = 161,
547     IDI_PROBLEM_OVL            = 500,
548     IDI_DISABLED_OVL           = 501,
549     IDI_FORCED_OVL             = 502,
550     IDI_CLASSICON_OVERLAYFIRST = 500,
551     IDI_CLASSICON_OVERLAYLAST  = 502
552 }
553 
554 enum : DWORD {
555     INF_STYLE_NONE          = 0x00000000,
556     INF_STYLE_OLDNT         = 0x00000001,
557     INF_STYLE_WIN4          = 0x00000002,
558     INF_STYLE_CACHE_ENABLE  = 0x00000010,
559     INF_STYLE_CACHE_DISABLE = 0x00000020
560 }
561 
562 enum : DWORD {
563     INFINFO_INF_SPEC_IS_HINF = 1,
564     INFINFO_INF_NAME_IS_ABSOLUTE,
565     INFINFO_DEFAULT_SEARCH,
566     INFINFO_REVERSE_DEFAULT_SEARCH,
567     INFINFO_INF_PATH_LIST_SEARCH // = 5
568 }
569 
570 alias DWORD LogSeverity;
571 enum : LogSeverity {
572     LogSevInformation,
573     LogSevWarning,
574     LogSevError,
575     LogSevFatalError,
576     LogSevMaximum // = 4
577 }
578 
579 enum MAX_INSTALLWIZARD_DYNAPAGES = 20;
580 
581 enum : DWORD {
582     NDW_INSTALLFLAG_DIDFACTDEFS        = 0x00000001,
583     NDW_INSTALLFLAG_HARDWAREALLREADYIN = 0x00000002,
584     NDW_INSTALLFLAG_NEEDSHUTDOWN       = 0x00000200,
585     NDW_INSTALLFLAG_EXPRESSINTRO       = 0x00000400,
586     NDW_INSTALLFLAG_SKIPISDEVINSTALLED = 0x00000800,
587     NDW_INSTALLFLAG_NODETECTEDDEVS     = 0x00001000,
588     NDW_INSTALLFLAG_INSTALLSPECIFIC    = 0x00002000,
589     NDW_INSTALLFLAG_SKIPCLASSLIST      = 0x00004000,
590     NDW_INSTALLFLAG_CI_PICKED_OEM      = 0x00008000,
591     NDW_INSTALLFLAG_PCMCIAMODE         = 0x00010000,
592     NDW_INSTALLFLAG_PCMCIADEVICE       = 0x00020000,
593     NDW_INSTALLFLAG_USERCANCEL         = 0x00040000,
594     NDW_INSTALLFLAG_KNOWNCLASS         = 0x00080000,
595     NDW_INSTALLFLAG_NEEDRESTART        = 0x00000080,
596     NDW_INSTALLFLAG_NEEDREBOOT         = 0x00000100
597 }
598 
599 enum : DWORD {
600     SETDIRID_NOT_FULL_PATH = 0x00000001
601 }
602 
603 enum : DWORD {
604     SP_COPY_DELETESOURCE        = 0x0000001,
605     SP_COPY_REPLACEONLY         = 0x0000002,
606     SP_COPY_NEWER               = 0x0000004,
607     SP_COPY_NEWER_OR_SAME       = 0x0000004,
608     SP_COPY_NOOVERWRITE         = 0x0000008,
609     SP_COPY_NODECOMP            = 0x0000010,
610     SP_COPY_LANGUAGEAWARE       = 0x0000020,
611     SP_COPY_SOURCE_ABSOLUTE     = 0x0000040,
612     SP_COPY_SOURCEPATH_ABSOLUTE = 0x0000080,
613     SP_COPY_IN_USE_NEEDS_REBOOT = 0x0000100,
614     SP_COPY_FORCE_IN_USE        = 0x0000200,
615     SP_COPY_NOSKIP              = 0x0000400,
616     SP_FLAG_CABINETCONTINUATION = 0x0000800,
617     SP_COPY_FORCE_NOOVERWRITE   = 0x0001000,
618     SP_COPY_FORCE_NEWER         = 0x0002000,
619     SP_COPY_WARNIFSKIP          = 0x0004000,
620     SP_COPY_NOBROWSE            = 0x0008000,
621     SP_COPY_NEWER_ONLY          = 0x0010000,
622     SP_COPY_SOURCE_SIS_MASTER   = 0x0020000,
623     SP_COPY_OEMINF_CATALOG_ONLY = 0x0040000,
624     SP_COPY_REPLACE_BOOT_FILE   = 0x0080000,
625     SP_COPY_NOPRUNE             = 0x0100000
626 }
627 
628 static if (_SETUPAPI_VER >= 0x0501) {
629     enum : DWORD {
630         SP_COPY_OEM_F6_INF = 0x0200000
631     }
632 }
633 
634 enum : DWORD {
635     SPCRP_SECURITY = 23,
636     SPCRP_SECURITY_SDS,
637     SPCRP_DEVTYPE,
638     SPCRP_EXCLUSIVE,
639     SPCRP_CHARACTERISTICS,
640     SPCRP_MAXIMUM_PROPERTY // = 28
641 }
642 
643 enum : DWORD {
644     SPDIT_NODRIVER,
645     SPDIT_CLASSDRIVER,
646     SPDIT_COMPATDRIVER // = 2
647 }
648 
649 enum : DWORD {
650     SPDRP_DEVICEDESC,
651     SPDRP_HARDWAREID,
652     SPDRP_COMPATIBLEIDS,
653     SPDRP_UNUSED0,
654     SPDRP_SERVICE,
655     SPDRP_UNUSED1,
656     SPDRP_UNUSED2,
657     SPDRP_CLASS,
658     SPDRP_CLASSGUID,
659     SPDRP_DRIVER,
660     SPDRP_CONFIGFLAGS,
661     SPDRP_MFG,
662     SPDRP_FRIENDLYNAME,
663     SPDRP_LOCATION_INFORMATION,
664     SPDRP_PHYSICAL_DEVICE_OBJECT_NAME,
665     SPDRP_CAPABILITIES,
666     SPDRP_UI_NUMBER,
667     SPDRP_UPPERFILTERS,
668     SPDRP_LOWERFILTERS,
669     SPDRP_BUSTYPEGUID,
670     SPDRP_LEGACYBUSTYPE,
671     SPDRP_BUSNUMBER,
672     SPDRP_ENUMERATOR_NAME,
673     SPDRP_SECURITY,
674     SPDRP_SECURITY_SDS,
675     SPDRP_DEVTYPE,
676     SPDRP_EXCLUSIVE,
677     SPDRP_CHARACTERISTICS,
678     SPDRP_ADDRESS, // = 28
679     SPDRP_UI_NUMBER_DESC_FORMAT = 30,
680     SPDRP_MAXIMUM_PROPERTY      = 31
681 }
682 
683 enum : UINT {
684     SPDSL_IGNORE_DISK = 1,
685     SPDSL_DISALLOW_NEGATIVE_ADJUST
686 }
687 
688 enum : UINT {
689     SPFILENOTIFY_STARTQUEUE = 1,
690     SPFILENOTIFY_ENDQUEUE,
691     SPFILENOTIFY_STARTSUBQUEUE,
692     SPFILENOTIFY_ENDSUBQUEUE,
693     SPFILENOTIFY_STARTDELETE,
694     SPFILENOTIFY_ENDDELETE,
695     SPFILENOTIFY_DELETEERROR,
696     SPFILENOTIFY_STARTRENAME,
697     SPFILENOTIFY_ENDRENAME,
698     SPFILENOTIFY_RENAMEERROR,
699     SPFILENOTIFY_STARTCOPY,
700     SPFILENOTIFY_ENDCOPY,
701     SPFILENOTIFY_COPYERROR,
702     SPFILENOTIFY_NEEDMEDIA,
703     SPFILENOTIFY_QUEUESCAN,
704     SPFILENOTIFY_CABINETINFO,
705     SPFILENOTIFY_FILEINCABINET,
706     SPFILENOTIFY_NEEDNEWCABINET,
707     SPFILENOTIFY_FILEEXTRACTED,
708     SPFILENOTIFY_FILEOPDELAYED,
709     SPFILENOTIFY_STARTBACKUP,
710     SPFILENOTIFY_BACKUPERROR,
711     SPFILENOTIFY_ENDBACKUP,
712     SPFILENOTIFY_QUEUESCAN_EX,
713     SPFILENOTIFY_STARTREGISTRATION, // = 25
714     SPFILENOTIFY_ENDREGISTRATION = 32,
715     SPFILENOTIFY_LANGMISMATCH    = 0x00010000,
716     SPFILENOTIFY_TARGETEXISTS    = 0x00020000,
717     SPFILENOTIFY_TARGETNEWER     = 0x00040000
718 }
719 
720 static if (_SETUPAPI_VER >= 0x0501) {
721     enum : UINT {
722         SPFILENOTIFY_QUEUESCAN_SIGNERINFO = 0x00000040
723     }
724 }
725 
726 enum : DWORD {
727     SPFILELOG_SYSTEMLOG = 0x00000001,
728     SPFILELOG_OEMFILE   = 0x00000001,
729     SPFILELOG_FORCENEW  = 0x00000002,
730     SPFILELOG_QUERYONLY = 0x00000004
731 }
732 
733 enum : INT {
734     SPFILEQ_FILE_IN_USE        = 0x00000001,
735     SPFILEQ_REBOOT_RECOMMENDED = 0x00000002,
736     SPFILEQ_REBOOT_IN_PROGRESS = 0x00000004
737 }
738 
739 enum : DWORD {
740     SPINT_ACTIVE  = 0x00000001,
741     SPINT_DEFAULT = 0x00000002,
742     SPINT_REMOVED = 0x00000004
743 }
744 
745 deprecated enum : DWORD {
746     SPID_ACTIVE  = SPINT_ACTIVE,
747     SPID_DEFAULT = SPINT_DEFAULT,
748     SPID_REMOVED = SPINT_REMOVED
749 }
750 
751 enum : UINT {
752     SPINST_LOGCONFIG                = 0x00000001,
753     SPINST_INIFILES                 = 0x00000002,
754     SPINST_REGISTRY                 = 0x00000004,
755     SPINST_INI2REG                  = 0x00000008,
756     SPINST_FILES                    = 0x00000010,
757     SPINST_BITREG                   = 0x00000020,
758     SPINST_REGSVR                   = 0x00000040,
759     SPINST_UNREGSVR                 = 0x00000080,
760     SPINST_PROFILEITEMS             = 0x00000100,
761     SPINST_SINGLESECTION            = 0x00010000,
762     SPINST_LOGCONFIG_IS_FORCED      = 0x00020000,
763     SPINST_LOGCONFIGS_ARE_OVERRIDES = 0x00040000
764 }
765 
766 static if (_SETUPAPI_VER >= 0x0501) {
767     enum : UINT {
768         SPINST_COPYINF               = 0x00000200,
769         SPINST_ALL                   = 0x000003ff,
770         SPINST_REGISTERCALLBACKAWARE = 0x00080000
771     }
772 } else {
773     enum : UINT {
774         SPINST_ALL = 0x000001ff
775     }
776 }
777 
778 enum : DWORD {
779     SPOST_NONE,
780     SPOST_PATH,
781     SPOST_URL,
782     SPOST_MAX // = 3
783 }
784 
785 enum : DWORD {
786     SPPSR_SELECT_DEVICE_RESOURCES = 1,
787     SPPSR_ENUM_BASIC_DEVICE_PROPERTIES,
788     SPPSR_ENUM_ADV_DEVICE_PROPERTIES
789 }
790 
791 enum : DWORD {
792     SPQ_SCAN_FILE_PRESENCE    = 0x00000001,
793     SPQ_SCAN_FILE_VALIDITY    = 0x00000002,
794     SPQ_SCAN_USE_CALLBACK     = 0x00000004,
795     SPQ_SCAN_USE_CALLBACKEX   = 0x00000008,
796     SPQ_SCAN_INFORM_USER      = 0x00000010,
797     SPQ_SCAN_PRUNE_COPY_QUEUE = 0x00000020
798 }
799 
800 static if (_SETUPAPI_VER >= 0x0501) {
801     enum : DWORD {
802         SPQ_SCAN_USE_CALLBACK_SIGNERINFO = 0x00000040,
803         SPQ_SCAN_PRUNE_DELREN            = 0x00000080
804     }
805 }
806 
807 enum : UINT_PTR {
808     SPQ_DELAYED_COPY = 0x00000001
809 }
810 
811 enum : DWORD {
812     SPRDI_FIND_DUPS = 0x00000001,
813 }
814 
815 enum : DWORD {
816     SPSVCINST_TAGTOFRONT               = 0x00000001,
817     SPSVCINST_ASSOCSERVICE             = 0x00000002,
818     SPSVCINST_DELETEEVENTLOGENTRY      = 0x00000004,
819     SPSVCINST_NOCLOBBER_DISPLAYNAME    = 0x00000008,
820     SPSVCINST_NOCLOBBER_STARTTYPE      = 0x00000010,
821     SPSVCINST_NOCLOBBER_ERRORCONTROL   = 0x00000020,
822     SPSVCINST_NOCLOBBER_LOADORDERGROUP = 0x00000040,
823     SPSVCINST_NOCLOBBER_DEPENDENCIES   = 0x00000080,
824     SPSVCINST_NOCLOBBER_DESCRIPTION    = 0x00000100,
825     SPSVCINST_STOPSERVICE              = 0x00000200
826 }
827 
828 static if (_SETUPAPI_VER >= 0x0501) {
829     enum : DWORD {
830         SPSVCINST_CLOBBER_SECURITY = 0x00000400
831     }
832 }
833 
834 enum : DWORD {
835     SPWPT_SELECTDEVICE = 0x00000001
836 }
837 
838 enum : DWORD {
839     SPWP_USE_DEVINFO_DATA = 0x00000001
840 }
841 
842 enum : UINT {
843     SRCINFO_PATH = 1,
844     SRCINFO_TAGFILE,
845     SRCINFO_DESCRIPTION,
846     SRCINFO_FLAGS // = 4
847 }
848 
849 enum : DWORD {
850     SRCLIST_TEMPORARY       = 0x00000001,
851     SRCLIST_NOBROWSE        = 0x00000002,
852     SRCLIST_SYSTEM          = 0x00000010,
853     SRCLIST_USER            = 0x00000020,
854     SRCLIST_SYSIFADMIN      = 0x00000040,
855     SRCLIST_SUBDIRS         = 0x00000100,
856     SRCLIST_APPEND          = 0x00000200,
857     SRCLIST_NOSTRIPPLATFORM = 0x00000400
858 }
859 
860 alias PVOID HINF;
861 alias PVOID HDSKSPC;
862 mixin DECLARE_HANDLE!("HDEVINFO");
863 alias PVOID HSPFILEQ;
864 alias PVOID HSPFILELOG;
865 
866 enum SetupFileLogInfo {
867     SetupFileLogSourceFilename,
868     SetupFileLogChecksum,
869     SetupFileLogDiskTagfile,
870     SetupFileLogDiskDescription,
871     SetupFileLogOtherInfo,
872     SetupFileLogMax
873 }
874 
875 version (Win64)
876     private enum _alignVal = 0;
877 else
878     private enum _alignVal = 1;
879 
880 struct INFCONTEXT {
881     PVOID Inf;
882     PVOID CurrentInf;
883     UINT  Section;
884     UINT  Line;
885 }
886 alias INFCONTEXT* PINFCONTEXT;
887 
888 mixin AlignedStr!(_alignVal, "SP_INF_INFORMATION", q{
889     DWORD InfStyle;
890     DWORD InfCount;
891     BYTE[1] _VersionData;
892     BYTE* VersionData() return { return _VersionData.ptr; }
893 });
894 alias SP_INF_INFORMATION* PSP_INF_INFORMATION;
895 
896 struct SP_ALTPLATFORM_INFO {
897     DWORD cbSize = SP_ALTPLATFORM_INFO.sizeof;
898     DWORD Platform;
899     DWORD MajorVersion;
900     DWORD MinorVersion;
901     WORD  ProcessorArchitecture;
902     WORD  Reserved;
903 }
904 alias SP_ALTPLATFORM_INFO* PSP_ALTPLATFORM_INFO;
905 
906 struct SP_ORIGINAL_FILE_INFO_A {
907     DWORD cbSize = SP_ORIGINAL_FILE_INFO_A.sizeof;
908     CHAR[MAX_PATH] OriginalInfName = 0;
909     CHAR[MAX_PATH] OriginalCatalogName = 0;
910 }
911 alias SP_ORIGINAL_FILE_INFO_A* PSP_ORIGINAL_FILE_INFO_A;
912 
913 struct SP_ORIGINAL_FILE_INFO_W {
914     DWORD cbSize = SP_ORIGINAL_FILE_INFO_W.sizeof;
915     WCHAR[MAX_PATH] OriginalInfName = 0;
916     WCHAR[MAX_PATH] OriginalCatalogName = 0;
917 }
918 alias SP_ORIGINAL_FILE_INFO_W* PSP_ORIGINAL_FILE_INFO_W;
919 
920 struct FILEPATHS_A {
921     PCSTR Target;
922     PCSTR Source;
923     UINT  Win32Error;
924     DWORD Flags;
925 }
926 alias FILEPATHS_A* PFILEPATHS_A;
927 
928 struct FILEPATHS_W {
929     PCWSTR Target;
930     PCWSTR Source;
931     UINT   Win32Error;
932     DWORD  Flags;
933 }
934 alias FILEPATHS_W* PFILEPATHS_W;
935 
936 struct SOURCE_MEDIA_A {
937     PCSTR Reserved;
938     PCSTR Tagfile;
939     PCSTR Description;
940     PCSTR SourcePath;
941     PCSTR SourceFile;
942     DWORD Flags;
943 }
944 alias SOURCE_MEDIA_A* PSOURCE_MEDIA_A;
945 
946 struct SOURCE_MEDIA_W {
947     PCWSTR Reserved;
948     PCWSTR Tagfile;
949     PCWSTR Description;
950     PCWSTR SourcePath;
951     PCWSTR SourceFile;
952     DWORD  Flags;
953 }
954 alias SOURCE_MEDIA_W* PSOURCE_MEDIA_W;
955 
956 struct CABINET_INFO_A {
957     PCSTR  CabinetPath;
958     PCSTR  CabinetFile;
959     PCSTR  DiskName;
960     USHORT SetId;
961     USHORT CabinetNumber;
962 }
963 alias CABINET_INFO_A* PCABINET_INFO_A;
964 
965 struct CABINET_INFO_W {
966     PCWSTR CabinetPath;
967     PCWSTR CabinetFile;
968     PCWSTR DiskName;
969     USHORT SetId;
970     USHORT CabinetNumber;
971 }
972 alias CABINET_INFO_W* PCABINET_INFO_W;
973 
974 mixin AlignedStr!(_alignVal, "FILE_IN_CABINET_INFO_A", q{
975     PCSTR NameInCabinet;
976     DWORD FileSize;
977     DWORD Win32Error;
978     WORD  DosDate;
979     WORD  DosTime;
980     WORD  DosAttribs;
981     CHAR[MAX_PATH] FullTargetName = 0;
982 });
983 alias FILE_IN_CABINET_INFO_A* PFILE_IN_CABINET_INFO_A;
984 
985 mixin AlignedStr!(_alignVal, "FILE_IN_CABINET_INFO_W", q{
986     PCWSTR NameInCabinet;
987     DWORD  FileSize;
988     DWORD  Win32Error;
989     WORD   DosDate;
990     WORD   DosTime;
991     WORD   DosAttribs;
992     WCHAR[MAX_PATH] FullTargetName = 0;
993 });
994 alias FILE_IN_CABINET_INFO_W* PFILE_IN_CABINET_INFO_W;
995 
996 struct SP_FILE_COPY_PARAMS_A {
997     DWORD    cbSize = SP_FILE_COPY_PARAMS_A.sizeof;
998     HSPFILEQ QueueHandle;
999     PCSTR    SourceRootPath;
1000     PCSTR    SourcePath;
1001     PCSTR    SourceFilename;
1002     PCSTR    SourceDescription;
1003     PCSTR    SourceTagfile;
1004     PCSTR    TargetDirectory;
1005     PCSTR    TargetFilename;
1006     DWORD    CopyStyle;
1007     HINF     LayoutInf;
1008     PCSTR    SecurityDescriptor;
1009 }
1010 alias SP_FILE_COPY_PARAMS_A* PSP_FILE_COPY_PARAMS_A;
1011 
1012 struct SP_FILE_COPY_PARAMS_W {
1013     DWORD    cbSize = SP_FILE_COPY_PARAMS_W.sizeof;
1014     HSPFILEQ QueueHandle;
1015     PCWSTR   SourceRootPath;
1016     PCWSTR   SourcePath;
1017     PCWSTR   SourceFilename;
1018     PCWSTR   SourceDescription;
1019     PCWSTR   SourceTagfile;
1020     PCWSTR   TargetDirectory;
1021     PCWSTR   TargetFilename;
1022     DWORD    CopyStyle;
1023     HINF     LayoutInf;
1024     PCWSTR   SecurityDescriptor;
1025 }
1026 alias SP_FILE_COPY_PARAMS_W* PSP_FILE_COPY_PARAMS_W;
1027 
1028 struct SP_DEVINFO_DATA {
1029     DWORD     cbSize = SP_DEVINFO_DATA.sizeof;
1030     GUID      ClassGuid;
1031     DWORD     DevInst;
1032     ULONG_PTR Reserved;
1033 }
1034 alias SP_DEVINFO_DATA* PSP_DEVINFO_DATA;
1035 
1036 mixin AlignedStr!(_alignVal, "SP_DEVICE_INTERFACE_DATA", q{
1037     DWORD     cbSize = SP_DEVICE_INTERFACE_DATA.sizeof;
1038     GUID      InterfaceClassGuid;
1039     DWORD     Flags;
1040     ULONG_PTR Reserved;
1041 });
1042 alias SP_DEVICE_INTERFACE_DATA* PSP_DEVICE_INTERFACE_DATA;
1043 deprecated alias SP_DEVICE_INTERFACE_DATA SP_INTERFACE_DEVICE_DATA;
1044 deprecated alias SP_DEVICE_INTERFACE_DATA* PSP_INTERFACE_DEVICE_DATA;
1045 
1046 mixin AlignedStr!(_alignVal, "SP_DEVICE_INTERFACE_DETAIL_DATA_A", q{
1047     DWORD cbSize = SP_DEVICE_INTERFACE_DETAIL_DATA_A.sizeof;
1048     CHAR[1] _DevicePath = 0;
1049     CHAR* DevicePath() return { return _DevicePath.ptr; }
1050 });
1051 alias SP_DEVICE_INTERFACE_DETAIL_DATA_A* PSP_DEVICE_INTERFACE_DETAIL_DATA_A;
1052 
1053 mixin AlignedStr!(_alignVal, "SP_DEVICE_INTERFACE_DETAIL_DATA_W", q{
1054     DWORD  cbSize = SP_DEVICE_INTERFACE_DETAIL_DATA_W.sizeof;
1055     WCHAR[1] _DevicePath = 0;
1056     WCHAR* DevicePath() return { return _DevicePath.ptr; }
1057 });
1058 alias SP_DEVICE_INTERFACE_DETAIL_DATA_W* PSP_DEVICE_INTERFACE_DETAIL_DATA_W;
1059 
1060 deprecated alias SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_INTERFACE_DEVICE_DETAIL_DATA_A;
1061 deprecated alias SP_DEVICE_INTERFACE_DETAIL_DATA_A* PSP_INTERFACE_DEVICE_DETAIL_DATA_A;
1062 deprecated alias SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_INTERFACE_DEVICE_DETAIL_DATA_W;
1063 deprecated alias SP_DEVICE_INTERFACE_DETAIL_DATA_W* PSP_INTERFACE_DEVICE_DETAIL_DATA_W;
1064 
1065 mixin AlignedStr!(_alignVal, "SP_DEVINFO_LIST_DETAIL_DATA_A", q{
1066     DWORD  cbSize = SP_DEVINFO_LIST_DETAIL_DATA_A.sizeof;
1067     GUID   ClassGuid;
1068     HANDLE RemoteMachineHandle;
1069     CHAR[SP_MAX_MACHINENAME_LENGTH] RemoteMachineName = 0;
1070 });
1071 alias SP_DEVINFO_LIST_DETAIL_DATA_A* PSP_DEVINFO_LIST_DETAIL_DATA_A;
1072 
1073 mixin AlignedStr!(_alignVal, "SP_DEVINFO_LIST_DETAIL_DATA_W", q{
1074     DWORD  cbSize = SP_DEVINFO_LIST_DETAIL_DATA_W.sizeof;
1075     GUID   ClassGuid;
1076     HANDLE RemoteMachineHandle;
1077     WCHAR[SP_MAX_MACHINENAME_LENGTH] RemoteMachineName = 0;
1078 });
1079 alias SP_DEVINFO_LIST_DETAIL_DATA_W* PSP_DEVINFO_LIST_DETAIL_DATA_W;
1080 
1081 extern(Windows) alias UINT function(PVOID, UINT, UINT_PTR, UINT_PTR) PSP_FILE_CALLBACK_A;
1082 extern(Windows) alias UINT function(PVOID, UINT, UINT_PTR, UINT_PTR) PSP_FILE_CALLBACK_W;
1083 
1084 struct SP_DEVINSTALL_PARAMS_A {
1085     DWORD               cbSize = SP_DEVINSTALL_PARAMS_A.sizeof;
1086     DWORD               Flags;
1087     DWORD               FlagsEx;
1088     HWND                hwndParent;
1089     PSP_FILE_CALLBACK_A InstallMsgHandler;
1090     PVOID               InstallMsgHandlerContext;
1091     HSPFILEQ            FileQueue;
1092     ULONG_PTR           ClassInstallReserved;
1093     DWORD               Reserved;
1094     CHAR[MAX_PATH]      DriverPath = 0;
1095 }
1096 alias SP_DEVINSTALL_PARAMS_A* PSP_DEVINSTALL_PARAMS_A;
1097 
1098 struct SP_DEVINSTALL_PARAMS_W {
1099     DWORD               cbSize = SP_DEVINSTALL_PARAMS_W.sizeof;
1100     DWORD               Flags;
1101     DWORD               FlagsEx;
1102     HWND                hwndParent;
1103     PSP_FILE_CALLBACK_W InstallMsgHandler;
1104     PVOID               InstallMsgHandlerContext;
1105     HSPFILEQ            FileQueue;
1106     ULONG_PTR           ClassInstallReserved;
1107     DWORD               Reserved;
1108     WCHAR[MAX_PATH]     DriverPath = 0;
1109 }
1110 alias SP_DEVINSTALL_PARAMS_W* PSP_DEVINSTALL_PARAMS_W;
1111 
1112 struct SP_CLASSINSTALL_HEADER {
1113     DWORD       cbSize = SP_CLASSINSTALL_HEADER.sizeof;
1114     DI_FUNCTION InstallFunction;
1115 }
1116 alias SP_CLASSINSTALL_HEADER* PSP_CLASSINSTALL_HEADER;
1117 
1118 struct SP_ENABLECLASS_PARAMS {
1119     SP_CLASSINSTALL_HEADER ClassInstallHeader;
1120     GUID                   ClassGuid;
1121     DWORD                  EnableMessage;
1122 }
1123 alias SP_ENABLECLASS_PARAMS* PSP_ENABLECLASS_PARAMS;
1124 
1125 struct SP_MOVEDEV_PARAMS {
1126     SP_CLASSINSTALL_HEADER ClassInstallHeader;
1127     SP_DEVINFO_DATA        SourceDeviceInfoData;
1128 }
1129 alias SP_MOVEDEV_PARAMS* PSP_MOVEDEV_PARAMS;
1130 
1131 struct SP_PROPCHANGE_PARAMS {
1132     SP_CLASSINSTALL_HEADER ClassInstallHeader;
1133     DWORD                  StateChange;
1134     DWORD                  Scope;
1135     DWORD                  HwProfile;
1136 }
1137 alias SP_PROPCHANGE_PARAMS* PSP_PROPCHANGE_PARAMS;
1138 
1139 struct SP_REMOVEDEVICE_PARAMS {
1140     SP_CLASSINSTALL_HEADER ClassInstallHeader;
1141     DWORD                  Scope;
1142     DWORD                  HwProfile;
1143 }
1144 alias SP_REMOVEDEVICE_PARAMS* PSP_REMOVEDEVICE_PARAMS;
1145 
1146 struct SP_UNREMOVEDEVICE_PARAMS {
1147     SP_CLASSINSTALL_HEADER ClassInstallHeader;
1148     DWORD                  Scope;
1149     DWORD                  HwProfile;
1150 }
1151 alias SP_UNREMOVEDEVICE_PARAMS* PSP_UNREMOVEDEVICE_PARAMS;
1152 
1153 struct SP_SELECTDEVICE_PARAMS_A {
1154     SP_CLASSINSTALL_HEADER    ClassInstallHeader;
1155     CHAR[MAX_TITLE_LEN]       Title = 0;
1156     CHAR[MAX_INSTRUCTION_LEN] Instructions = 0;
1157     CHAR[MAX_LABEL_LEN]       ListLabel = 0;
1158     CHAR[MAX_SUBTITLE_LEN]    SubTitle = 0;
1159     BYTE[2]                   Reserved;
1160 }
1161 alias SP_SELECTDEVICE_PARAMS_A* PSP_SELECTDEVICE_PARAMS_A;
1162 
1163 struct SP_SELECTDEVICE_PARAMS_W {
1164     SP_CLASSINSTALL_HEADER     ClassInstallHeader;
1165     WCHAR[MAX_TITLE_LEN]       Title = 0;
1166     WCHAR[MAX_INSTRUCTION_LEN] Instructions = 0;
1167     WCHAR[MAX_LABEL_LEN]       ListLabel = 0;
1168     WCHAR[MAX_SUBTITLE_LEN]    SubTitle = 0;
1169 }
1170 alias SP_SELECTDEVICE_PARAMS_W* PSP_SELECTDEVICE_PARAMS_W;
1171 
1172 extern(Windows) alias BOOL function(PVOID, DWORD) PDETECT_PROGRESS_NOTIFY;
1173 
1174 struct SP_DETECTDEVICE_PARAMS {
1175     SP_CLASSINSTALL_HEADER  ClassInstallHeader;
1176     PDETECT_PROGRESS_NOTIFY DetectProgressNotify;
1177     PVOID                   ProgressNotifyParam;
1178 }
1179 alias SP_DETECTDEVICE_PARAMS* PSP_DETECTDEVICE_PARAMS;
1180 
1181 struct SP_INSTALLWIZARD_DATA {
1182     SP_CLASSINSTALL_HEADER ClassInstallHeader;
1183     DWORD                  Flags;
1184     HPROPSHEETPAGE[MAX_INSTALLWIZARD_DYNAPAGES] DynamicPages;
1185     DWORD                  NumDynamicPages;
1186     DWORD                  DynamicPageFlags;
1187     DWORD                  PrivateFlags;
1188     LPARAM                 PrivateData;
1189     HWND                   hwndWizardDlg;
1190 }
1191 alias SP_INSTALLWIZARD_DATA* PSP_INSTALLWIZARD_DATA;
1192 
1193 struct SP_NEWDEVICEWIZARD_DATA {
1194     SP_CLASSINSTALL_HEADER ClassInstallHeader;
1195     DWORD                  Flags;
1196     HPROPSHEETPAGE[MAX_INSTALLWIZARD_DYNAPAGES]  DynamicPages;
1197     DWORD                  NumDynamicPages;
1198     HWND                   hwndWizardDlg;
1199 }
1200 alias SP_NEWDEVICEWIZARD_DATA* PSP_NEWDEVICEWIZARD_DATA;
1201 alias SP_NEWDEVICEWIZARD_DATA SP_ADDPROPERTYPAGE_DATA;
1202 alias SP_NEWDEVICEWIZARD_DATA* PSP_ADDPROPERTYPAGE_DATA;
1203 
1204 struct SP_TROUBLESHOOTER_PARAMS_A {
1205     SP_CLASSINSTALL_HEADER ClassInstallHeader;
1206     CHAR[MAX_PATH]         ChmFile = 0;
1207     CHAR[MAX_PATH]         HtmlTroubleShooter = 0;
1208 }
1209 alias SP_TROUBLESHOOTER_PARAMS_A* PSP_TROUBLESHOOTER_PARAMS_A;
1210 
1211 struct SP_TROUBLESHOOTER_PARAMS_W {
1212     SP_CLASSINSTALL_HEADER ClassInstallHeader;
1213     WCHAR[MAX_PATH]        ChmFile = 0;
1214     WCHAR[MAX_PATH]        HtmlTroubleShooter = 0;
1215 }
1216 alias SP_TROUBLESHOOTER_PARAMS_W* PSP_TROUBLESHOOTER_PARAMS_W;
1217 
1218 struct SP_POWERMESSAGEWAKE_PARAMS_A {
1219     SP_CLASSINSTALL_HEADER ClassInstallHeader;
1220     CHAR[LINE_LEN*2]       PowerMessageWake = 0;
1221 }
1222 alias SP_POWERMESSAGEWAKE_PARAMS_A* PSP_POWERMESSAGEWAKE_PARAMS_A;
1223 
1224 struct SP_POWERMESSAGEWAKE_PARAMS_W {
1225     SP_CLASSINSTALL_HEADER ClassInstallHeader;
1226     WCHAR[LINE_LEN*2]      PowerMessageWake = 0;
1227 }
1228 alias SP_POWERMESSAGEWAKE_PARAMS_W* PSP_POWERMESSAGEWAKE_PARAMS_W;
1229 
1230 mixin AlignedStr!(_alignVal, "SP_DRVINFO_DATA_V2_A", q{
1231     DWORD          cbSize = SP_DRVINFO_DATA_V2_A.sizeof;
1232     DWORD          DriverType;
1233     ULONG_PTR      Reserved;
1234     CHAR[LINE_LEN] Description = 0;
1235     CHAR[LINE_LEN] MfgName = 0;
1236     CHAR[LINE_LEN] ProviderName = 0;
1237     FILETIME       DriverDate;
1238     DWORDLONG      DriverVersion;
1239 });
1240 alias SP_DRVINFO_DATA_V2_A* PSP_DRVINFO_DATA_V2_A;
1241 
1242 mixin AlignedStr!(_alignVal, "SP_DRVINFO_DATA_V2_W", q{
1243     DWORD           cbSize = SP_DRVINFO_DATA_V2_A.sizeof;
1244     DWORD           DriverType;
1245     ULONG_PTR       Reserved;
1246     WCHAR[LINE_LEN] Description = 0;
1247     WCHAR[LINE_LEN] MfgName = 0;
1248     WCHAR[LINE_LEN] ProviderName = 0;
1249     FILETIME        DriverDate;
1250     DWORDLONG       DriverVersion;
1251 });
1252 alias SP_DRVINFO_DATA_V2_W* PSP_DRVINFO_DATA_V2_W;
1253 
1254 struct SP_DRVINFO_DATA_V1_A {
1255     DWORD          cbSize = SP_DRVINFO_DATA_V1_A.sizeof;
1256     DWORD          DriverType;
1257     ULONG_PTR      Reserved;
1258     CHAR[LINE_LEN] Description = 0;
1259     CHAR[LINE_LEN] MfgName = 0;
1260     CHAR[LINE_LEN] ProviderName = 0;
1261 }
1262 alias SP_DRVINFO_DATA_V1_A* PSP_DRVINFO_DATA_V1_A;
1263 
1264 struct SP_DRVINFO_DATA_V1_W {
1265     DWORD           cbSize = SP_DRVINFO_DATA_V1_W.sizeof;
1266     DWORD           DriverType;
1267     ULONG_PTR       Reserved;
1268     WCHAR[LINE_LEN] Description = 0;
1269     WCHAR[LINE_LEN] MfgName = 0;
1270     WCHAR[LINE_LEN] ProviderName = 0;
1271 }
1272 alias SP_DRVINFO_DATA_V1_W* PSP_DRVINFO_DATA_V1_W;
1273 
1274 version (Unicode) {
1275     alias SP_DRVINFO_DATA_V1_W SP_DRVINFO_DATA_V1;
1276     alias SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_V2;
1277 } else {
1278     alias SP_DRVINFO_DATA_V1_A SP_DRVINFO_DATA_V1;
1279     alias SP_DRVINFO_DATA_V2_A SP_DRVINFO_DATA_V2;
1280 }
1281 alias SP_DRVINFO_DATA_V1* PSP_DRVINFO_DATA_V1;
1282 alias SP_DRVINFO_DATA_V2* PSP_DRVINFO_DATA_V2;
1283 
1284 static if (USE_SP_DRVINFO_DATA_V1) {
1285     alias SP_DRVINFO_DATA_V1_A SP_DRVINFO_DATA_A;
1286     alias SP_DRVINFO_DATA_V1_A* PSP_DRVINFO_DATA_A;
1287     alias SP_DRVINFO_DATA_V1_W SP_DRVINFO_DATA_W;
1288     alias SP_DRVINFO_DATA_V1_W* PSP_DRVINFO_DATA_W;
1289     alias SP_DRVINFO_DATA_V1 SP_DRVINFO_DATA;
1290     alias SP_DRVINFO_DATA_V1* PSP_DRVINFO_DATA;
1291 } else {
1292     alias SP_DRVINFO_DATA_V2_A SP_DRVINFO_DATA_A;
1293     alias SP_DRVINFO_DATA_V2_A* PSP_DRVINFO_DATA_A;
1294     alias SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_W;
1295     alias SP_DRVINFO_DATA_V2_W* PSP_DRVINFO_DATA_W;
1296     alias SP_DRVINFO_DATA_V2 SP_DRVINFO_DATA;
1297     alias SP_DRVINFO_DATA_V2* PSP_DRVINFO_DATA;
1298 }
1299 
1300 extern(Windows) alias DWORD function(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINFO_DATA, PVOID) PSP_DETSIG_CMPPROC;
1301 
1302 mixin AlignedStr!(_alignVal, "SP_DRVINFO_DETAIL_DATA_A", q{
1303     DWORD          cbSize = SP_DRVINFO_DETAIL_DATA_A.sizeof;
1304     FILETIME       InfDate;
1305     DWORD          CompatIDsOffset;
1306     DWORD          CompatIDsLength;
1307     ULONG_PTR      Reserved;
1308     CHAR[LINE_LEN] SectionName = 0;
1309     CHAR[MAX_PATH] InfFileName = 0;
1310     CHAR[LINE_LEN] DrvDescription = 0;
1311     CHAR[1]        _HardwareID = 0;
1312     CHAR*          HardwareID() return { return _HardwareID.ptr; }
1313 });
1314 alias SP_DRVINFO_DETAIL_DATA_A* PSP_DRVINFO_DETAIL_DATA_A;
1315 
1316 mixin AlignedStr!(_alignVal, "SP_DRVINFO_DETAIL_DATA_W", q{
1317     DWORD           cbSize = SP_DRVINFO_DETAIL_DATA_W.sizeof;
1318     FILETIME        InfDate;
1319     DWORD           CompatIDsOffset;
1320     DWORD           CompatIDsLength;
1321     ULONG_PTR       Reserved;
1322     WCHAR[LINE_LEN] SectionName = 0;
1323     WCHAR[MAX_PATH] InfFileName = 0;
1324     WCHAR[LINE_LEN] DrvDescription = 0;
1325     WCHAR[1]        _HardwareID = 0;
1326     WCHAR*          HardwareID() return { return _HardwareID.ptr; }
1327 });
1328 alias SP_DRVINFO_DETAIL_DATA_W* PSP_DRVINFO_DETAIL_DATA_W;
1329 
1330 struct SP_DRVINSTALL_PARAMS {
1331     DWORD cbSize = SP_DRVINSTALL_PARAMS.sizeof;
1332     DWORD Rank;
1333     DWORD Flags;
1334     DWORD_PTR PrivateData;
1335     DWORD Reserved;
1336 }
1337 alias SP_DRVINSTALL_PARAMS* PSP_DRVINSTALL_PARAMS;
1338 
1339 struct COINSTALLER_CONTEXT_DATA {
1340     BOOL  PostProcessing;
1341     DWORD InstallResult;
1342     PVOID PrivateData;
1343 }
1344 alias COINSTALLER_CONTEXT_DATA* PCOINSTALLER_CONTEXT_DATA;
1345 
1346 struct SP_CLASSIMAGELIST_DATA {
1347     DWORD      cbSize = SP_CLASSIMAGELIST_DATA.sizeof;
1348     HIMAGELIST ImageList;
1349     ULONG_PTR  Reserved;
1350 }
1351 alias SP_CLASSIMAGELIST_DATA* PSP_CLASSIMAGELIST_DATA;
1352 
1353 struct SP_PROPSHEETPAGE_REQUEST {
1354     DWORD            cbSize = SP_PROPSHEETPAGE_REQUEST.sizeof;
1355     DWORD            PageRequested;
1356     HDEVINFO         DeviceInfoSet;
1357     PSP_DEVINFO_DATA DeviceInfoData;
1358 }
1359 alias SP_PROPSHEETPAGE_REQUEST* PSP_PROPSHEETPAGE_REQUEST;
1360 
1361 struct SP_BACKUP_QUEUE_PARAMS_A {
1362     DWORD cbSize = SP_BACKUP_QUEUE_PARAMS_A.sizeof;
1363     CHAR[MAX_PATH] FullInfPath = 0;
1364     INT FilenameOffset;
1365 }
1366 alias SP_BACKUP_QUEUE_PARAMS_A* PSP_BACKUP_QUEUE_PARAMS_A;
1367 
1368 struct SP_BACKUP_QUEUE_PARAMS_W {
1369     DWORD cbSize = SP_BACKUP_QUEUE_PARAMS_W.sizeof;
1370     WCHAR[MAX_PATH] FullInfPath = 0;
1371     INT FilenameOffset;
1372 }
1373 alias SP_BACKUP_QUEUE_PARAMS_W* PSP_BACKUP_QUEUE_PARAMS_W;
1374 
1375 version (Unicode) {
1376     alias SP_ORIGINAL_FILE_INFO_W SP_ORIGINAL_FILE_INFO;
1377     alias SP_ORIGINAL_FILE_INFO_W* PSP_ORIGINAL_FILE_INFO;
1378     alias FILEPATHS_W FILEPATHS;
1379     alias FILEPATHS_W* PFILEPATHS;
1380     alias SOURCE_MEDIA_W SOURCE_MEDIA;
1381     alias SOURCE_MEDIA_W* PSOURCE_MEDIA;
1382     alias CABINET_INFO_W CABINET_INFO;
1383     alias CABINET_INFO_W* PCABINET_INFO;
1384     alias FILE_IN_CABINET_INFO_W FILE_IN_CABINET_INFO;
1385     alias FILE_IN_CABINET_INFO_W* PFILE_IN_CABINET_INFO;
1386     alias SP_FILE_COPY_PARAMS_W SP_FILE_COPY_PARAMS;
1387     alias SP_FILE_COPY_PARAMS_W* PSP_FILE_COPY_PARAMS;
1388     alias SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_DEVICE_INTERFACE_DETAIL_DATA;
1389     alias SP_DEVICE_INTERFACE_DETAIL_DATA_W* PSP_DEVICE_INTERFACE_DETAIL_DATA;
1390     deprecated {
1391         alias SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_INTERFACE_DEVICE_DETAIL_DATA;
1392         alias SP_DEVICE_INTERFACE_DETAIL_DATA_W* PSP_INTERFACE_DEVICE_DETAIL_DATA;
1393     }
1394     alias SP_DEVINFO_LIST_DETAIL_DATA_W SP_DEVINFO_LIST_DETAIL_DATA;
1395     alias SP_DEVINFO_LIST_DETAIL_DATA_W *PSP_DEVINFO_LIST_DETAIL_DATA;
1396     alias SP_DEVINSTALL_PARAMS_W SP_DEVINSTALL_PARAMS;
1397     alias SP_DEVINSTALL_PARAMS_W* PSP_DEVINSTALL_PARAMS;
1398     alias SP_SELECTDEVICE_PARAMS_W SP_SELECTDEVICE_PARAMS;
1399     alias SP_SELECTDEVICE_PARAMS_W* PSP_SELECTDEVICE_PARAMS;
1400     alias SP_TROUBLESHOOTER_PARAMS_W SP_TROUBLESHOOTER_PARAMS;
1401     alias SP_TROUBLESHOOTER_PARAMS_W* PSP_TROUBLESHOOTER_PARAMS;
1402     alias SP_POWERMESSAGEWAKE_PARAMS_W SP_POWERMESSAGEWAKE_PARAMS;
1403     alias SP_POWERMESSAGEWAKE_PARAMS_W* PSP_POWERMESSAGEWAKE_PARAMS;
1404     alias SP_DRVINFO_DETAIL_DATA_W SP_DRVINFO_DETAIL_DATA;
1405     alias SP_DRVINFO_DETAIL_DATA_W* PSP_DRVINFO_DETAIL_DATA;
1406     alias SP_BACKUP_QUEUE_PARAMS_W SP_BACKUP_QUEUE_PARAMS;
1407     alias SP_BACKUP_QUEUE_PARAMS_W* PSP_BACKUP_QUEUE_PARAMS;
1408 } else {
1409     alias SP_ORIGINAL_FILE_INFO_A SP_ORIGINAL_FILE_INFO;
1410     alias SP_ORIGINAL_FILE_INFO_A* PSP_ORIGINAL_FILE_INFO;
1411     alias FILEPATHS_A FILEPATHS;
1412     alias FILEPATHS_A* PFILEPATHS;
1413     alias SOURCE_MEDIA_A SOURCE_MEDIA;
1414     alias SOURCE_MEDIA_A* PSOURCE_MEDIA;
1415     alias CABINET_INFO_A CABINET_INFO;
1416     alias CABINET_INFO_A* PCABINET_INFO;
1417     alias FILE_IN_CABINET_INFO_A FILE_IN_CABINET_INFO;
1418     alias FILE_IN_CABINET_INFO_A* PFILE_IN_CABINET_INFO;
1419     alias SP_FILE_COPY_PARAMS_A SP_FILE_COPY_PARAMS;
1420     alias SP_FILE_COPY_PARAMS_A* PSP_FILE_COPY_PARAMS;
1421     alias SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_DEVICE_INTERFACE_DETAIL_DATA;
1422     alias SP_DEVICE_INTERFACE_DETAIL_DATA_A* PSP_DEVICE_INTERFACE_DETAIL_DATA;
1423     deprecated {
1424         alias SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_INTERFACE_DEVICE_DETAIL_DATA;
1425         alias SP_DEVICE_INTERFACE_DETAIL_DATA_A* PSP_INTERFACE_DEVICE_DETAIL_DATA;
1426     }
1427     alias SP_DEVINFO_LIST_DETAIL_DATA_A SP_DEVINFO_LIST_DETAIL_DATA;
1428     alias SP_DEVINFO_LIST_DETAIL_DATA_A* PSP_DEVINFO_LIST_DETAIL_DATA;
1429     alias SP_DEVINSTALL_PARAMS_A SP_DEVINSTALL_PARAMS;
1430     alias SP_DEVINSTALL_PARAMS_A* PSP_DEVINSTALL_PARAMS;
1431     alias SP_SELECTDEVICE_PARAMS_A SP_SELECTDEVICE_PARAMS;
1432     alias SP_SELECTDEVICE_PARAMS_A* PSP_SELECTDEVICE_PARAMS;
1433     alias SP_TROUBLESHOOTER_PARAMS_A SP_TROUBLESHOOTER_PARAMS;
1434     alias SP_TROUBLESHOOTER_PARAMS_A* PSP_TROUBLESHOOTER_PARAMS;
1435     alias SP_POWERMESSAGEWAKE_PARAMS_A SP_POWERMESSAGEWAKE_PARAMS;
1436     alias SP_POWERMESSAGEWAKE_PARAMS_A* PSP_POWERMESSAGEWAKE_PARAMS;
1437     alias SP_DRVINFO_DETAIL_DATA_A SP_DRVINFO_DETAIL_DATA;
1438     alias SP_DRVINFO_DETAIL_DATA_A* PSP_DRVINFO_DETAIL_DATA;
1439     alias SP_BACKUP_QUEUE_PARAMS_A SP_BACKUP_QUEUE_PARAMS;
1440     alias SP_BACKUP_QUEUE_PARAMS_A* PSP_BACKUP_QUEUE_PARAMS;
1441 }
1442 
1443 extern (Windows) {
1444     BOOL SetupAddInstallSectionToDiskSpaceListA(HDSKSPC, HINF, HINF, PCSTR, PVOID, UINT);
1445     BOOL SetupAddInstallSectionToDiskSpaceListW(HDSKSPC, HINF, HINF, PCWSTR, PVOID, UINT);
1446     BOOL SetupAddSectionToDiskSpaceListA(HDSKSPC, HINF, HINF, PCSTR, UINT, PVOID, UINT);
1447     BOOL SetupAddSectionToDiskSpaceListW(HDSKSPC, HINF, HINF, PCWSTR, UINT, PVOID, UINT);
1448     BOOL SetupAddToDiskSpaceListA(HDSKSPC, PCSTR, LONGLONG, UINT, PVOID, UINT);
1449     BOOL SetupAddToDiskSpaceListW(HDSKSPC, PCWSTR, LONGLONG, UINT, PVOID, UINT);
1450     BOOL SetupAddToSourceListA(DWORD, PCSTR);
1451     BOOL SetupAddToSourceListW(DWORD, PCWSTR);
1452     BOOL SetupQuerySourceListA(DWORD, PCSTR**List, PUINT);
1453     BOOL SetupQuerySourceListW(DWORD, PCWSTR**List, PUINT);
1454     BOOL SetupFreeSourceListA(PCSTR**List, UINT);
1455     BOOL SetupFreeSourceListW(PCWSTR**List, UINT);
1456     BOOL SetupAdjustDiskSpaceListA(HDSKSPC, LPCSTR, LONGLONG, PVOID, UINT);
1457     BOOL SetupAdjustDiskSpaceListW(HDSKSPC, LPCWSTR, LONGLONG, PVOID, UINT);
1458     UINT SetupBackupErrorA(HWND, PCSTR, PCSTR, PCSTR, UINT, DWORD);
1459     UINT SetupBackupErrorW(HWND, PCWSTR, PCWSTR, PCWSTR, UINT, DWORD);
1460     BOOL SetupCancelTemporary();
1461     BOOL SetupCloseFileQueue(HSPFILEQ);
1462     VOID SetupCloseInfFile(HINF);
1463     VOID SetupCloseLog();
1464     BOOL SetupCommitFileQueueA(HWND, HSPFILEQ, PSP_FILE_CALLBACK_A, PVOID);
1465     BOOL SetupCommitFileQueueW(HWND, HSPFILEQ, PSP_FILE_CALLBACK_W, PVOID);
1466     UINT SetupCopyErrorA(HWND, PCSTR, PCSTR, PCSTR, PCSTR, PCSTR, UINT, DWORD, PSTR, DWORD, PDWORD);
1467     UINT SetupCopyErrorW(HWND, PCWSTR, PCWSTR, PCWSTR, PCWSTR, PCWSTR, UINT, DWORD, PWSTR, DWORD, PDWORD);
1468     BOOL SetupCopyOEMInfA(PCSTR, PCSTR, DWORD, DWORD, PSTR, DWORD, PDWORD, PSTR*);
1469     BOOL SetupCopyOEMInfW(PCWSTR, PCWSTR, DWORD, DWORD, PWSTR, DWORD, PDWORD, PWSTR*);
1470     HDSKSPC SetupCreateDiskSpaceListA(PVOID, DWORD, UINT);
1471     HDSKSPC SetupCreateDiskSpaceListW(PVOID, DWORD, UINT);
1472     DWORD SetupDecompressOrCopyFileA(PCSTR, PCSTR, PUINT);
1473     DWORD SetupDecompressOrCopyFileW(PCWSTR, PCWSTR, PUINT);
1474     UINT SetupDefaultQueueCallbackA(PVOID, UINT, UINT_PTR, UINT_PTR);
1475     UINT SetupDefaultQueueCallbackW(PVOID, UINT, UINT_PTR, UINT_PTR);
1476     UINT SetupDeleteErrorA(HWND, PCSTR, PCSTR, UINT, DWORD);
1477     UINT SetupDeleteErrorW(HWND, PCWSTR, PCWSTR, UINT, DWORD);
1478     BOOL SetupDestroyDiskSpaceList(HDSKSPC);
1479     BOOL SetupDiAskForOEMDisk(HDEVINFO, PSP_DEVINFO_DATA);
1480     BOOL SetupDiBuildClassInfoList(DWORD, LPGUID, DWORD, PDWORD);
1481     BOOL SetupDiBuildClassInfoListExA(DWORD, LPGUID, DWORD, PDWORD, PCSTR, PVOID);
1482     BOOL SetupDiBuildClassInfoListExW(DWORD, LPGUID, DWORD, PDWORD, PCWSTR, PVOID);
1483     BOOL SetupDiBuildDriverInfoList(HDEVINFO, PSP_DEVINFO_DATA, DWORD);
1484     BOOL SetupDiCallClassInstaller(DI_FUNCTION, HDEVINFO, PSP_DEVINFO_DATA);
1485     BOOL SetupDiCancelDriverInfoSearch(HDEVINFO);
1486     BOOL SetupDiChangeState(HDEVINFO, PSP_DEVINFO_DATA);
1487     BOOL SetupDiClassGuidsFromNameA(PCSTR, LPGUID, DWORD, PDWORD);
1488     BOOL SetupDiClassGuidsFromNameW(PCWSTR, LPGUID, DWORD, PDWORD);
1489     BOOL SetupDiClassGuidsFromNameExA(PCSTR, LPGUID, DWORD, PDWORD, PCSTR, PVOID);
1490     BOOL SetupDiClassGuidsFromNameExW(PCWSTR, LPGUID, DWORD, PDWORD, PCWSTR, PVOID);
1491     BOOL SetupDiClassNameFromGuidA(const(GUID)*, PSTR, DWORD, PDWORD);
1492     BOOL SetupDiClassNameFromGuidW(const(GUID)*, PWSTR, DWORD, PDWORD);
1493     BOOL SetupDiClassNameFromGuidExA(const(GUID)*, PSTR, DWORD, PDWORD, PCSTR, PVOID);
1494     BOOL SetupDiClassNameFromGuidExW(const(GUID)*, PWSTR, DWORD, PDWORD, PCWSTR, PVOID);
1495     BOOL SetupDiCreateDeviceInfoA(HDEVINFO, PCSTR, const(GUID)*, PCSTR, HWND, DWORD, PSP_DEVINFO_DATA);
1496     BOOL SetupDiCreateDeviceInfoW(HDEVINFO, PCWSTR, const(GUID)*, PCWSTR, HWND, DWORD, PSP_DEVINFO_DATA);
1497     HDEVINFO SetupDiCreateDeviceInfoList(const(GUID)*, HWND);
1498     HDEVINFO SetupDiCreateDeviceInfoListExA(const(GUID)*, HWND, PCSTR, PVOID);
1499     HDEVINFO SetupDiCreateDeviceInfoListExW(const(GUID)*, HWND, PCWSTR, PVOID);
1500     BOOL SetupDiCreateDeviceInterfaceA(HDEVINFO, PSP_DEVINFO_DATA, const(GUID)*, PCSTR, DWORD, PSP_DEVICE_INTERFACE_DATA);
1501     BOOL SetupDiCreateDeviceInterfaceW(HDEVINFO, PSP_DEVINFO_DATA, const(GUID)*, PCWSTR, DWORD, PSP_DEVICE_INTERFACE_DATA);
1502     HKEY SetupDiCreateDeviceInterfaceRegKeyA(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD, REGSAM, HINF, PCSTR);
1503     HKEY SetupDiCreateDeviceInterfaceRegKeyW(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD, REGSAM, HINF, PCWSTR);
1504     HKEY SetupDiCreateDevRegKeyA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, HINF, PCSTR);
1505     HKEY SetupDiCreateDevRegKeyW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, HINF, PCWSTR);
1506     BOOL SetupDiDeleteDeviceInfo(HDEVINFO, PSP_DEVINFO_DATA);
1507     BOOL SetupDiDeleteDeviceInterfaceData(HDEVINFO, PSP_DEVICE_INTERFACE_DATA);
1508     BOOL SetupDiDeleteDeviceInterfaceRegKey(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD);
1509     BOOL SetupDiDeleteDevRegKey(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD);
1510     BOOL SetupDiDestroyClassImageList(PSP_CLASSIMAGELIST_DATA);
1511     BOOL SetupDiDestroyDeviceInfoList(HDEVINFO);
1512     BOOL SetupDiDestroyDriverInfoList(HDEVINFO, PSP_DEVINFO_DATA, DWORD);
1513     INT SetupDiDrawMiniIcon(HDC, RECT, INT, DWORD);
1514     BOOL SetupDiEnumDeviceInfo(HDEVINFO, DWORD, PSP_DEVINFO_DATA);
1515     BOOL SetupDiEnumDeviceInterfaces(HDEVINFO, PSP_DEVINFO_DATA, const(GUID)*, DWORD, PSP_DEVICE_INTERFACE_DATA);
1516     BOOL SetupDiEnumDriverInfoA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, PSP_DRVINFO_DATA_A);
1517     BOOL SetupDiEnumDriverInfoW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, PSP_DRVINFO_DATA_W);
1518     BOOL SetupDiGetActualSectionToInstallA(HINF, PCSTR, PSTR, DWORD, PDWORD, PSTR*);
1519     BOOL SetupDiGetActualSectionToInstallW(HINF, PCWSTR, PWSTR, DWORD, PDWORD, PWSTR*);
1520     BOOL SetupDiGetClassBitmapIndex(const(GUID)*, PINT);
1521     BOOL SetupDiGetClassDescriptionA(const(GUID)*, PSTR, DWORD, PDWORD);
1522     BOOL SetupDiGetClassDescriptionW(const(GUID)*, PWSTR, DWORD, PDWORD);
1523     BOOL SetupDiGetClassDescriptionExA(const(GUID)*, PSTR, DWORD, PDWORD, PCSTR, PVOID);
1524     BOOL SetupDiGetClassDescriptionExW(const(GUID)*, PWSTR, DWORD, PDWORD, PCWSTR, PVOID);
1525     BOOL SetupDiGetClassDevPropertySheetsA(HDEVINFO, PSP_DEVINFO_DATA, LPPROPSHEETHEADERA, DWORD, PDWORD, DWORD);
1526     BOOL SetupDiGetClassDevPropertySheetsW(HDEVINFO, PSP_DEVINFO_DATA, LPPROPSHEETHEADERW, DWORD, PDWORD, DWORD);
1527     HDEVINFO SetupDiGetClassDevsA(const(GUID)*, PCSTR, HWND, DWORD);
1528     HDEVINFO SetupDiGetClassDevsW(const(GUID)*, PCWSTR, HWND, DWORD);
1529     HDEVINFO SetupDiGetClassDevsExA(const(GUID)*, PCSTR, HWND, DWORD, HDEVINFO, PCSTR, PVOID);
1530     HDEVINFO SetupDiGetClassDevsExW(const(GUID)*, PCWSTR, HWND, DWORD, HDEVINFO, PCWSTR, PVOID);
1531     BOOL SetupDiGetClassImageIndex(PSP_CLASSIMAGELIST_DATA, const(GUID)*, PINT);
1532     BOOL SetupDiGetClassImageList(PSP_CLASSIMAGELIST_DATA);
1533     BOOL SetupDiGetClassImageListExA(PSP_CLASSIMAGELIST_DATA, PCSTR, PVOID);
1534     BOOL SetupDiGetClassImageListExW(PSP_CLASSIMAGELIST_DATA, PCWSTR, PVOID);
1535     BOOL SetupDiGetClassInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD, PDWORD);
1536     BOOL SetupDiGetClassInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD, PDWORD);
1537     BOOL SetupDiGetClassRegistryPropertyA(LPGUID, DWORD, PDWORD, PBYTE, DWORD, PDWORD, PCSTR, PVOID);
1538     BOOL SetupDiGetClassRegistryPropertyW(LPGUID, DWORD, PDWORD, PBYTE, DWORD, PDWORD, PCWSTR, PVOID);
1539     BOOL SetupDiGetDeviceInfoListClass(HDEVINFO, LPGUID);
1540     BOOL SetupDiGetDeviceInfoListDetailA(HDEVINFO, PSP_DEVINFO_LIST_DETAIL_DATA_A);
1541     BOOL SetupDiGetDeviceInfoListDetailW(HDEVINFO, PSP_DEVINFO_LIST_DETAIL_DATA_W);
1542     BOOL SetupDiGetDeviceInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_A);
1543     BOOL SetupDiGetDeviceInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_W);
1544     BOOL SetupDiGetDeviceInstanceIdA(HDEVINFO, PSP_DEVINFO_DATA, PSTR, DWORD, PDWORD);
1545     BOOL SetupDiGetDeviceInstanceIdW(HDEVINFO, PSP_DEVINFO_DATA, PWSTR, DWORD, PDWORD);
1546     BOOL SetupDiGetDeviceInterfaceAlias(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, const(GUID)*, PSP_DEVICE_INTERFACE_DATA);
1547     BOOL SetupDiGetDeviceInterfaceDetailA(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_A, DWORD, PDWORD, PSP_DEVINFO_DATA);
1548     BOOL SetupDiGetDeviceInterfaceDetailW(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_W, DWORD, PDWORD, PSP_DEVINFO_DATA);
1549     BOOL SetupDiGetDeviceRegistryPropertyA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD);
1550     BOOL SetupDiGetDeviceRegistryPropertyW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD);
1551     BOOL SetupDiGetDriverInfoDetailA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A, PSP_DRVINFO_DETAIL_DATA_A, DWORD, PDWORD);
1552     BOOL SetupDiGetDriverInfoDetailW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W, PSP_DRVINFO_DETAIL_DATA_W, DWORD, PDWORD);
1553     BOOL SetupDiGetDriverInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A, PSP_DRVINSTALL_PARAMS);
1554     BOOL SetupDiGetDriverInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W, PSP_DRVINSTALL_PARAMS);
1555     BOOL SetupDiGetHwProfileFriendlyNameA(DWORD, PSTR, DWORD, PDWORD);
1556     BOOL SetupDiGetHwProfileFriendlyNameExA(DWORD, PSTR, DWORD, PDWORD, PCSTR, PVOID);
1557     BOOL SetupDiGetHwProfileFriendlyNameExW(DWORD, PWSTR, DWORD, PDWORD, PCWSTR, PVOID);
1558     BOOL SetupDiGetHwProfileFriendlyNameW(DWORD, PWSTR, DWORD, PDWORD);
1559     BOOL SetupDiGetHwProfileList(PDWORD, DWORD, PDWORD, PDWORD);
1560     BOOL SetupDiGetHwProfileListExA(PDWORD, DWORD, PDWORD, PDWORD, PCSTR, PVOID);
1561     BOOL SetupDiGetHwProfileListExW(PDWORD, DWORD, PDWORD, PDWORD, PCWSTR, PVOID);
1562     BOOL SetupDiGetINFClassA(PCSTR, LPGUID, PSTR, DWORD, PDWORD);
1563     BOOL SetupDiGetINFClassW(PCWSTR, LPGUID, PWSTR, DWORD, PDWORD);
1564     BOOL SetupDiGetSelectedDevice(HDEVINFO, PSP_DEVINFO_DATA);
1565     BOOL SetupDiGetSelectedDriverA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A);
1566     BOOL SetupDiGetSelectedDriverW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W);
1567     HPROPSHEETPAGE SetupDiGetWizardage(HDEVINFO, PSP_DEVINFO_DATA, PSP_INSTALLWIZARD_DATA, DWORD, DWORD);
1568     BOOL SetupDiInstallClassA(HWND, PCSTR, DWORD, HSPFILEQ);
1569     BOOL SetupDiInstallClassW(HWND, PCWSTR, DWORD, HSPFILEQ);
1570     BOOL SetupDiInstallClassExA(HWND, PCSTR, DWORD, HSPFILEQ, const(GUID)*, PVOID, PVOID);
1571     BOOL SetupDiInstallClassExW(HWND, PCWSTR, DWORD, HSPFILEQ, const(GUID)*, PVOID, PVOID);
1572     BOOL SetupDiInstallDevice(HDEVINFO, PSP_DEVINFO_DATA);
1573     BOOL SetupDiInstallDeviceInterfaces(HDEVINFO, PSP_DEVINFO_DATA);
1574     BOOL SetupDiInstallDriverFiles(HDEVINFO, PSP_DEVINFO_DATA);
1575     BOOL SetupDiLoadClassIcon(const(GUID)*, HICON*, PINT);
1576     BOOL SetupDiMoveDuplicateDevice(HDEVINFO, PSP_DEVINFO_DATA);
1577     HKEY SetupDiOpenClassRegKey(const(GUID)*, REGSAM);
1578     HKEY SetupDiOpenClassRegKeyExA(const(GUID)*, REGSAM, DWORD, PCSTR, PVOID);
1579     HKEY SetupDiOpenClassRegKeyExW(const(GUID)*, REGSAM, DWORD, PCWSTR, PVOID);
1580     BOOL SetupDiOpenDeviceInfoA(HDEVINFO, PCSTR, HWND, DWORD, PSP_DEVINFO_DATA);
1581     BOOL SetupDiOpenDeviceInfoW(HDEVINFO, PCWSTR, HWND, DWORD, PSP_DEVINFO_DATA);
1582     BOOL SetupDiOpenDeviceInterfaceA(HDEVINFO, PCSTR, DWORD, PSP_DEVICE_INTERFACE_DATA);
1583     BOOL SetupDiOpenDeviceInterfaceW(HDEVINFO, PCWSTR, DWORD, PSP_DEVICE_INTERFACE_DATA);
1584     HKEY SetupDiOpenDeviceInterfaceRegKey(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD, REGSAM);
1585     HKEY SetupDiOpenDevRegKey(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, REGSAM);
1586     BOOL SetupDiRegisterCoDeviceInstallers(HDEVINFO, PSP_DEVINFO_DATA);
1587     BOOL SetupDiRegisterDeviceInfo(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PSP_DETSIG_CMPPROC, PVOID, PSP_DEVINFO_DATA);
1588     BOOL SetupDiRemoveDevice(HDEVINFO, PSP_DEVINFO_DATA);
1589     BOOL SetupDiRemoveDeviceInterface(HDEVINFO, PSP_DEVICE_INTERFACE_DATA);
1590     BOOL SetupDiSelectBestCompatDrv(HDEVINFO, PSP_DEVINFO_DATA);
1591     BOOL SetupDiSelectDevice(HDEVINFO, PSP_DEVINFO_DATA);
1592     BOOL SetupDiSelectOEMDrv(HWND, HDEVINFO, PSP_DEVINFO_DATA);
1593     BOOL SetupDiSetClassInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD);
1594     BOOL SetupDiSetClassInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD);
1595     BOOL SetupDiSetClassRegistryPropertyA(LPGUID, DWORD, const(BYTE)*, DWORD, PCSTR, PVOID);
1596     BOOL SetupDiSetClassRegistryPropertyW(LPGUID, DWORD, const(BYTE)*, DWORD, PCWSTR, PVOID);
1597     BOOL SetupDiSetDeviceInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_A);
1598     BOOL SetupDiSetDeviceInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_W);
1599     BOOL SetupDiSetDeviceRegistryPropertyA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, const(BYTE)*, DWORD);
1600     BOOL SetupDiSetDeviceRegistryPropertyW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, const(BYTE)*, DWORD);
1601     BOOL SetupDiSetDriverInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A, PSP_DRVINSTALL_PARAMS);
1602     BOOL SetupDiSetDriverInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W, PSP_DRVINSTALL_PARAMS);
1603     BOOL SetupDiSetSelectedDevice(HDEVINFO, PSP_DEVINFO_DATA);
1604     BOOL SetupDiSetSelectedDriverA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A);
1605     BOOL SetupDiSetSelectedDriverW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W);
1606     BOOL SetupDiUnremoveDevice(HDEVINFO, PSP_DEVINFO_DATA);
1607     HDSKSPC SetupDuplicateDiskSpaceListA(HDSKSPC, PVOID, DWORD, UINT);
1608     HDSKSPC SetupDuplicateDiskSpaceListW(HDSKSPC, PVOID, DWORD, UINT);
1609     BOOL SetupFindFirstLineA(HINF, PCSTR, PCSTR, PINFCONTEXT);
1610     BOOL SetupFindFirstLineW(HINF, PCWSTR, PCWSTR, PINFCONTEXT);
1611     BOOL SetupFindNextLine(PINFCONTEXT, PINFCONTEXT);
1612     BOOL SetupFindNextMatchLineA(PINFCONTEXT, PCSTR, PINFCONTEXT);
1613     BOOL SetupFindNextMatchLineW(PINFCONTEXT, PCWSTR, PINFCONTEXT);
1614     BOOL SetupFreeA(PCSTR**, UINT);
1615     BOOL SetupFreeW(PCWSTR**, UINT);
1616     BOOL SetupGetBackupInformationA(HSPFILEQ, PSP_BACKUP_QUEUE_PARAMS_A);
1617     BOOL SetupGetBackupInformationW(HSPFILEQ, PSP_BACKUP_QUEUE_PARAMS_W);
1618     BOOL SetupGetBinaryField(PINFCONTEXT, DWORD, PBYTE, DWORD, LPDWORD);
1619     DWORD SetupGetFieldCount(PINFCONTEXT);
1620     DWORD SetupGetFileCompressionInfoA(PCSTR, PSTR*, PDWORD, PDWORD, PUINT);
1621     DWORD SetupGetFileCompressionInfoW(PCWSTR, PWSTR*, PDWORD, PDWORD, PUINT);
1622     BOOL SetupGetInfFileListA(PCSTR, DWORD, PSTR, DWORD, PDWORD);
1623     BOOL SetupGetInfFileListW(PCWSTR, DWORD, PWSTR, DWORD, PDWORD);
1624     BOOL SetupGetInfInformationA(LPCVOID, DWORD, PSP_INF_INFORMATION, DWORD, PDWORD);
1625     BOOL SetupGetInfInformationW(LPCVOID, DWORD, PSP_INF_INFORMATION, DWORD, PDWORD);
1626     BOOL SetupGetIntField(PINFCONTEXT, DWORD, PINT);
1627     BOOL SetupGetLineByIndexA(HINF, PCSTR, DWORD, PINFCONTEXT);
1628     BOOL SetupGetLineByIndexW(HINF, PCWSTR, DWORD, PINFCONTEXT);
1629     LONG SetupGetLineCountA(HINF, PCSTR);
1630     LONG SetupGetLineCountW(HINF, PCWSTR);
1631     BOOL SetupGetLineTextA(PINFCONTEXT, HINF, PCSTR, PCSTR, PSTR, DWORD, PDWORD);
1632     BOOL SetupGetLineTextW(PINFCONTEXT, HINF, PCWSTR, PCWSTR, PWSTR, DWORD, PDWORD);
1633     BOOL SetupGetMultiSzFieldA(PINFCONTEXT, DWORD, PSTR, DWORD, LPDWORD);
1634     BOOL SetupGetMultiSzFieldW(PINFCONTEXT, DWORD, PWSTR, DWORD, LPDWORD);
1635     BOOL SetupGetSourceFileLocationA(HINF, PINFCONTEXT, PCSTR, PUINT, PSTR, DWORD, PDWORD);
1636     BOOL SetupGetSourceFileLocationW(HINF, PINFCONTEXT, PCWSTR, PUINT, PWSTR, DWORD, PDWORD);
1637     BOOL SetupGetSourceFileSizeA(HINF, PINFCONTEXT, PCSTR, PCSTR, PDWORD, UINT);
1638     BOOL SetupGetSourceFileSizeW(HINF, PINFCONTEXT, PCWSTR, PCWSTR, PDWORD, UINT);
1639     BOOL SetupGetSourceInfoA(HINF, UINT, UINT, PSTR, DWORD, PDWORD);
1640     BOOL SetupGetSourceInfoW(HINF, UINT, UINT, PWSTR, DWORD, PDWORD);
1641     BOOL SetupGetStringFieldA(PINFCONTEXT, DWORD, PSTR, DWORD, PDWORD);
1642     BOOL SetupGetStringFieldW(PINFCONTEXT, DWORD, PWSTR, DWORD, PDWORD);
1643     BOOL SetupGetTargetPathA(HINF, PINFCONTEXT, PCSTR, PSTR, DWORD, PDWORD);
1644     BOOL SetupGetTargetPathW(HINF, PINFCONTEXT, PCWSTR, PWSTR, DWORD, PDWORD);
1645     PVOID SetupInitDefaultQueueCallback(HWND);
1646     PVOID SetupInitDefaultQueueCallbackEx(HWND, HWND, UINT, DWORD, PVOID);
1647     HSPFILELOG SetupInitializeFileLogA(PCSTR, DWORD);
1648     HSPFILELOG SetupInitializeFileLogW(PCWSTR, DWORD);
1649     BOOL SetupInstallFileA(HINF, PINFCONTEXT, PCSTR, PCSTR, PCSTR, DWORD, PSP_FILE_CALLBACK_A, PVOID);
1650     BOOL SetupInstallFileW(HINF, PINFCONTEXT, PCWSTR, PCWSTR, PCWSTR, DWORD, PSP_FILE_CALLBACK_W, PVOID);
1651     BOOL SetupInstallFileExA(HINF, PINFCONTEXT, PCSTR, PCSTR, PCSTR, DWORD, PSP_FILE_CALLBACK_A, PVOID, PBOOL);
1652     BOOL SetupInstallFileExW(HINF, PINFCONTEXT, PCWSTR, PCWSTR, PCWSTR, DWORD, PSP_FILE_CALLBACK_W, PVOID, PBOOL);
1653     BOOL SetupInstallFilesFromInfSectionA(HINF, HINF, HSPFILEQ, PCSTR, PCSTR, UINT);
1654     BOOL SetupInstallFilesFromInfSectionW(HINF, HINF, HSPFILEQ, PCWSTR, PCWSTR, UINT);
1655     BOOL SetupInstallFromInfSectionA(HWND, HINF, PCSTR, UINT, HKEY, PCSTR, UINT, PSP_FILE_CALLBACK_A, PVOID, HDEVINFO, PSP_DEVINFO_DATA);
1656     BOOL SetupInstallFromInfSectionW(HWND, HINF, PCWSTR, UINT, HKEY, PCWSTR, UINT, PSP_FILE_CALLBACK_W, PVOID, HDEVINFO, PSP_DEVINFO_DATA);
1657     BOOL SetupInstallServicesFromInfSectionA(HINF, PCSTR, DWORD);
1658     BOOL SetupInstallServicesFromInfSectionW(HINF, PCWSTR, DWORD);
1659     BOOL SetupInstallServicesFromInfSectionExA(HINF, PCSTR, DWORD, HDEVINFO, PSP_DEVINFO_DATA, PVOID, PVOID);
1660     BOOL SetupInstallServicesFromInfSectionExW(HINF, PCWSTR, DWORD, HDEVINFO, PSP_DEVINFO_DATA, PVOID, PVOID);
1661     BOOL SetupIterateCabinetA(PCSTR, DWORD, PSP_FILE_CALLBACK_A, PVOID);
1662     BOOL SetupIterateCabinetW(PCWSTR, DWORD, PSP_FILE_CALLBACK_W, PVOID);
1663     BOOL SetupLogErrorA(LPCSTR, LogSeverity);
1664     BOOL SetupLogErrorW(LPCWSTR, LogSeverity);
1665     BOOL SetupLogFileA(HSPFILELOG, PCSTR, PCSTR, PCSTR, DWORD, PCSTR, PCSTR, PCSTR, DWORD);
1666     BOOL SetupLogFileW(HSPFILELOG, PCWSTR, PCWSTR, PCWSTR, DWORD, PCWSTR, PCWSTR, PCWSTR, DWORD);
1667     BOOL SetupOpenAppendInfFileA(PCSTR, HINF, PUINT);
1668     BOOL SetupOpenAppendInfFileW(PCWSTR, HINF, PUINT);
1669     HSPFILEQ SetupOpenFileQueue();
1670     HINF SetupOpenInfFileA(PCSTR, PCSTR, DWORD, PUINT);
1671     HINF SetupOpenInfFileW(PCWSTR, PCWSTR, DWORD, PUINT);
1672     BOOL SetupOpenLog(BOOL);
1673     HINF SetupOpenMasterInf();
1674     UINT SetupPromptForDiskA(HWND, PCSTR, PCSTR, PCSTR, PCSTR, PCSTR, DWORD, PSTR, DWORD, PDWORD);
1675     UINT SetupPromptForDiskW(HWND, PCWSTR, PCWSTR, PCWSTR, PCWSTR, PCWSTR, DWORD, PWSTR, DWORD, PDWORD);
1676     INT SetupPromptReboot(HSPFILEQ, HWND, BOOL);
1677     BOOL SetupQueryA(DWORD, PCSTR**, PUINT);
1678     BOOL SetupQueryW(DWORD, PCWSTR**, PUINT);
1679     BOOL SetupQueryDrivesInDiskSpaceListA(HDSKSPC, PSTR, DWORD, PDWORD);
1680     BOOL SetupQueryDrivesInDiskSpaceListW(HDSKSPC, PWSTR, DWORD, PDWORD);
1681     BOOL SetupQueryFileLogA(HSPFILELOG, PCSTR, PCSTR, SetupFileLogInfo, PSTR, DWORD, PDWORD);
1682     BOOL SetupQueryFileLogW(HSPFILELOG, PCWSTR, PCWSTR, SetupFileLogInfo, PWSTR, DWORD, PDWORD);
1683     BOOL SetupQueryInfFileInformationA(PSP_INF_INFORMATION, UINT, PSTR, DWORD, PDWORD);
1684     BOOL SetupQueryInfFileInformationW(PSP_INF_INFORMATION, UINT, PWSTR, DWORD, PDWORD);
1685     BOOL SetupQueryInfOriginalFileInformationA(PSP_INF_INFORMATION, UINT, PSP_ALTPLATFORM_INFO, PSP_ORIGINAL_FILE_INFO_A);
1686     BOOL SetupQueryInfOriginalFileInformationW(PSP_INF_INFORMATION, UINT, PSP_ALTPLATFORM_INFO, PSP_ORIGINAL_FILE_INFO_W);
1687     BOOL SetupQueryInfVersionInformationA(PSP_INF_INFORMATION, UINT, PSTR, PSTR, DWORD, PDWORD);
1688     BOOL SetupQueryInfVersionInformationW(PSP_INF_INFORMATION, UINT, PCWSTR, PWSTR, DWORD, PDWORD);
1689     BOOL SetupQuerySpaceRequiredOnDriveA(HDSKSPC, PCSTR, LONGLONG*, PVOID, UINT);
1690     BOOL SetupQuerySpaceRequiredOnDriveW(HDSKSPC, PCWSTR, LONGLONG*, PVOID, UINT);
1691     BOOL SetupQueueCopyA(HSPFILEQ, PCSTR, PCSTR, PCSTR, PCSTR, PCSTR, PCSTR, PCSTR, DWORD);
1692     BOOL SetupQueueCopyW(HSPFILEQ, PCWSTR, PCWSTR, PCWSTR, PCWSTR, PCWSTR, PCWSTR, PCWSTR, DWORD);
1693     BOOL SetupQueueCopyIndirectA(PSP_FILE_COPY_PARAMS_A);
1694     BOOL SetupQueueCopyIndirectW(PSP_FILE_COPY_PARAMS_W);
1695     BOOL SetupQueueCopySectionA(HSPFILEQ, PCSTR, HINF, HINF, PCSTR, DWORD);
1696     BOOL SetupQueueCopySectionW(HSPFILEQ, PCWSTR, HINF, HINF, PCWSTR, DWORD);
1697     BOOL SetupQueueDefaultCopyA(HSPFILEQ, HINF, PCSTR, PCSTR, PCSTR, DWORD);
1698     BOOL SetupQueueDefaultCopyW(HSPFILEQ, HINF, PCWSTR, PCWSTR, PCWSTR, DWORD);
1699     BOOL SetupQueueDeleteA(HSPFILEQ, PCSTR, PCSTR);
1700     BOOL SetupQueueDeleteW(HSPFILEQ, PCWSTR, PCWSTR);
1701     BOOL SetupQueueDeleteSectionA(HSPFILEQ, HINF, HINF, PCSTR);
1702     BOOL SetupQueueDeleteSectionW(HSPFILEQ, HINF, HINF, PCWSTR);
1703     BOOL SetupQueueRenameA(HSPFILEQ, PCSTR, PCSTR, PCSTR, PCSTR);
1704     BOOL SetupQueueRenameW(HSPFILEQ, PCWSTR, PCWSTR, PCWSTR, PCWSTR);
1705     BOOL SetupQueueRenameSectionA(HSPFILEQ, HINF, HINF, PCSTR);
1706     BOOL SetupQueueRenameSectionW(HSPFILEQ, HINF, HINF, PCWSTR);
1707     BOOL SetupRemoveFileLogEntryA(HSPFILELOG, PCSTR, PCSTR);
1708     BOOL SetupRemoveFileLogEntryW(HSPFILELOG, PCWSTR, PCWSTR);
1709     BOOL SetupRemoveFromDiskSpaceListA(HDSKSPC, PCSTR, UINT, PVOID, UINT);
1710     BOOL SetupRemoveFromDiskSpaceListW(HDSKSPC, PCWSTR, UINT, PVOID, UINT);
1711     BOOL SetupRemoveFromSourceListA(DWORD, PCSTR);
1712     BOOL SetupRemoveFromSourceListW(DWORD, PCWSTR);
1713     BOOL SetupRemoveInstallSectionFromDiskSpaceListA(HDSKSPC, HINF, HINF, PCSTR, PVOID, UINT);
1714     BOOL SetupRemoveInstallSectionFromDiskSpaceListW(HDSKSPC, HINF, HINF, PCWSTR, PVOID, UINT);
1715     BOOL SetupRemoveSectionFromDiskSpaceListA(HDSKSPC, HINF, HINF, PCSTR, UINT, PVOID, UINT);
1716     BOOL SetupRemoveSectionFromDiskSpaceListW(HDSKSPC, HINF, HINF, PCWSTR, UINT, PVOID, UINT);
1717     UINT SetupRenameErrorA(HWND, PCSTR, PCSTR, PCSTR, UINT, DWORD);
1718     UINT SetupRenameErrorW(HWND, PCWSTR, PCWSTR, PCWSTR, UINT, DWORD);
1719     BOOL SetupScanFileQueueA(HSPFILEQ, DWORD, HWND, PSP_FILE_CALLBACK_A, PVOID, PDWORD);
1720     BOOL SetupScanFileQueueW(HSPFILEQ, DWORD, HWND, PSP_FILE_CALLBACK_W, PVOID, PDWORD);
1721     BOOL SetupSetDirectoryIdA(HINF, DWORD, PCSTR);
1722     BOOL SetupSetDirectoryIdW(HINF, DWORD, PCWSTR);
1723     BOOL SetupSetDirectoryIdExA(HINF, DWORD, PCSTR, DWORD, DWORD, PVOID);
1724     BOOL SetupSetDirectoryIdExW(HINF, DWORD, PCWSTR, DWORD, DWORD, PVOID);
1725     BOOL SetupSetFileQueueAlternatePlatformA(HSPFILEQ, PSP_ALTPLATFORM_INFO, PCSTR);
1726     BOOL SetupSetFileQueueAlternatePlatformW(HSPFILEQ, PSP_ALTPLATFORM_INFO, PCWSTR);
1727     BOOL SetupSetPlatformPathOverrideA(PCSTR);
1728     BOOL SetupSetPlatformPathOverrideW(PCWSTR);
1729     BOOL SetupSetSourceListA(DWORD, PCSTR*, UINT);
1730     BOOL SetupSetSourceListW(DWORD, PCWSTR*, UINT);
1731     VOID SetupTermDefaultQueueCallback(PVOID);
1732     BOOL SetupTerminateFileLog(HSPFILELOG);
1733 }
1734 
1735 deprecated {
1736     alias SetupDiCreateDeviceInterfaceW SetupDiCreateInterfaceDeviceW;
1737     alias SetupDiCreateDeviceInterfaceRegKeyW SetupDiCreateInterfaceDeviceRegKeyW;
1738     alias SetupDiOpenDeviceInterfaceW SetupDiOpenInterfaceDeviceW;
1739     alias SetupDiGetDeviceInterfaceDetailW SetupDiGetInterfaceDeviceDetailW;
1740     alias SetupDiCreateDeviceInterfaceA SetupDiCreateInterfaceDeviceA;
1741     alias SetupDiCreateDeviceInterfaceRegKeyA SetupDiCreateInterfaceDeviceRegKeyA;
1742     alias SetupDiOpenDeviceInterfaceA SetupDiOpenInterfaceDeviceA;
1743     alias SetupDiGetDeviceInterfaceDetailA SetupDiGetInterfaceDeviceDetailA;
1744 }
1745 
1746 version (Unicode) {
1747     alias PSP_FILE_CALLBACK_W PSP_FILE_CALLBACK;
1748     alias SetupAddInstallSectionToDiskSpaceListW SetupAddInstallSectionToDiskSpaceList;
1749     alias SetupAddSectionToDiskSpaceListW SetupAddSectionToDiskSpaceList;
1750     alias SetupAddToDiskSpaceListW SetupAddToDiskSpaceList;
1751     alias SetupAddToSourceListW SetupAddToSourceList;
1752     alias SetupAdjustDiskSpaceListW SetupAdjustDiskSpaceList;
1753     alias SetupBackupErrorW SetupBackupError;
1754     alias SetupCommitFileQueueW SetupCommitFileQueue;
1755     alias SetupCopyErrorW SetupCopyError;
1756     alias SetupCopyOEMInfW SetupCopyOEMInf;
1757     alias SetupCreateDiskSpaceListW SetupCreateDiskSpaceList;
1758     alias SetupDecompressOrCopyFileW SetupDecompressOrCopyFile;
1759     alias SetupDefaultQueueCallbackW SetupDefaultQueueCallback;
1760     alias SetupDeleteErrorW SetupDeleteError;
1761     alias SetupDiBuildClassInfoListExW SetupDiBuildClassInfoListEx;
1762     alias SetupDiClassGuidsFromNameExW SetupDiClassGuidsFromNameEx;
1763     alias SetupDiClassGuidsFromNameW SetupDiClassGuidsFromName;
1764     alias SetupDiClassNameFromGuidExW SetupDiClassNameFromGuidEx;
1765     alias SetupDiClassNameFromGuidW SetupDiClassNameFromGuid;
1766     alias SetupDiCreateDeviceInfoListExW SetupDiCreateDeviceInfoListEx;
1767     alias SetupDiCreateDeviceInfoW SetupDiCreateDeviceInfo;
1768     alias SetupDiCreateDeviceInterfaceRegKeyW SetupDiCreateDeviceInterfaceRegKey;
1769     deprecated alias SetupDiCreateDeviceInterfaceRegKeyW SetupDiCreateInterfaceDeviceRegKey;
1770     alias SetupDiCreateDeviceInterfaceW SetupDiCreateDeviceInterface;
1771     deprecated alias SetupDiCreateDeviceInterfaceW SetupDiCreateInterfaceDevice;
1772     alias SetupDiCreateDevRegKeyW SetupDiCreateDevRegKey;
1773     alias SetupDiEnumDriverInfoW SetupDiEnumDriverInfo;
1774     alias SetupDiGetActualSectionToInstallW SetupDiGetActualSectionToInstall;
1775     alias SetupDiGetClassDescriptionExW SetupDiGetClassDescriptionEx;
1776     alias SetupDiGetClassDescriptionW SetupDiGetClassDescription;
1777     alias SetupDiGetClassDevPropertySheetsW SetupDiGetClassDevPropertySheets;
1778     alias SetupDiGetClassDevsExW SetupDiGetClassDevsEx;
1779     alias SetupDiGetClassDevsW SetupDiGetClassDevs;
1780     alias SetupDiGetClassImageListExW SetupDiGetClassImageListEx;
1781     alias SetupDiGetClassInstallParamsW SetupDiGetClassInstallParams;
1782     alias SetupDiGetClassRegistryPropertyW SetupDiGetClassRegistryProperty;
1783     alias SetupDiGetDeviceInfoListDetailW SetupDiGetDeviceInfoListDetail;
1784     alias SetupDiGetDeviceInstallParamsW SetupDiGetDeviceInstallParams;
1785     alias SetupDiGetDeviceInstanceIdW SetupDiGetDeviceInstanceId;
1786     alias SetupDiGetDeviceInterfaceDetailW SetupDiGetDeviceInterfaceDetail;
1787     deprecated alias SetupDiGetDeviceInterfaceDetailW SetupDiGetInterfaceDeviceDetail;
1788     alias SetupDiGetDeviceRegistryPropertyW SetupDiGetDeviceRegistryProperty;
1789     alias SetupDiGetDriverInfoDetailW SetupDiGetDriverInfoDetail;
1790     alias SetupDiGetDriverInstallParamsW SetupDiGetDriverInstallParams;
1791     alias SetupDiGetHwProfileFriendlyNameExW SetupDiGetHwProfileFriendlyNameEx;
1792     alias SetupDiGetHwProfileFriendlyNameW SetupDiGetHwProfileFriendlyName;
1793     alias SetupDiGetHwProfileListExW SetupDiGetHwProfileListEx;
1794     alias SetupDiGetINFClassW SetupDiGetINFClass;
1795     alias SetupDiGetSelectedDriverW SetupDiGetSelectedDriver;
1796     alias SetupDiInstallClassExW SetupDiInstallClassEx;
1797     alias SetupDiInstallClassW SetupDiInstallClass;
1798     alias SetupDiOpenClassRegKeyExW SetupDiOpenClassRegKeyEx;
1799     alias SetupDiOpenDeviceInfoW SetupDiOpenDeviceInfo;
1800     alias SetupDiOpenDeviceInterfaceW SetupDiOpenDeviceInterface;
1801     deprecated alias SetupDiOpenDeviceInterfaceW SetupDiOpenInterfaceDevice;
1802     alias SetupDiSetClassInstallParamsW SetupDiSetClassInstallParams;
1803     alias SetupDiSetClassRegistryPropertyW SetupDiSetClassRegistryProperty;
1804     alias SetupDiSetDeviceInstallParamsW SetupDiSetDeviceInstallParams;
1805     alias SetupDiSetDeviceRegistryPropertyW SetupDiSetDeviceRegistryProperty;
1806     alias SetupDiSetDriverInstallParamsW SetupDiSetDriverInstallParams;
1807     alias SetupDiSetSelectedDriverW SetupDiSetSelectedDriver;
1808     alias SetupDuplicateDiskSpaceListW SetupDuplicateDiskSpaceList;
1809     alias SetupFindFirstLineW SetupFindFirstLine;
1810     alias SetupFindNextMatchLineW SetupFindNextMatchLine;
1811     alias SetupFreeSourceListW SetupFreeSourceList;
1812     alias SetupGetBackupInformationW SetupGetBackupInformation;
1813     alias SetupGetFileCompressionInfoW SetupGetFileCompressionInfo;
1814     alias SetupGetInfFileListW SetupGetInfFileList;
1815     alias SetupGetInfInformationW SetupGetInfInformation;
1816     alias SetupGetLineByIndexW SetupGetLineByIndex;
1817     alias SetupGetLineCountW SetupGetLineCount;
1818     alias SetupGetLineTextW SetupGetLineText;
1819     alias SetupGetMultiSzFieldW SetupGetMultiSzField;
1820     alias SetupGetSourceFileLocationW SetupGetSourceFileLocation;
1821     alias SetupGetSourceFileSizeW SetupGetSourceFileSize;
1822     alias SetupGetSourceInfoW SetupGetSourceInfo;
1823     alias SetupGetStringFieldW SetupGetStringField;
1824     alias SetupGetTargetPathW SetupGetTargetPath;
1825     alias SetupInitializeFileLogW SetupInitializeFileLog;
1826     alias SetupInstallFileExW SetupInstallFileEx;
1827     alias SetupInstallFilesFromInfSectionW SetupInstallFilesFromInfSection;
1828     alias SetupInstallFileW SetupInstallFile;
1829     alias SetupInstallFromInfSectionW SetupInstallFromInfSection;
1830     alias SetupInstallServicesFromInfSectionExW SetupInstallServicesFromInfSectionEx;
1831     alias SetupInstallServicesFromInfSectionW SetupInstallServicesFromInfSection;
1832     alias SetupIterateCabinetW SetupIterateCabinet;
1833     alias SetupLogErrorW SetupLogError;
1834     alias SetupLogFileW SetupLogFile;
1835     alias SetupOpenAppendInfFileW SetupOpenAppendInfFile;
1836     alias SetupOpenInfFileW SetupOpenInfFile;
1837     alias SetupPromptForDiskW SetupPromptForDisk;
1838     alias SetupQueryDrivesInDiskSpaceListW SetupQueryDrivesInDiskSpaceList;
1839     alias SetupQueryFileLogW SetupQueryFileLog;
1840     alias SetupQueryInfFileInformationW SetupQueryInfFileInformation;
1841     alias SetupQueryInfOriginalFileInformationW SetupQueryInfOriginalFileInformation;
1842     alias SetupQueryInfVersionInformationW SetupQueryInfVersionInformation;
1843     alias SetupQuerySourceListW SetupQuerySourceList;
1844     alias SetupQuerySpaceRequiredOnDriveW SetupQuerySpaceRequiredOnDrive;
1845     alias SetupQueueCopyIndirectW SetupQueueCopyIndirect;
1846     alias SetupQueueCopySectionW SetupQueueCopySection;
1847     alias SetupQueueCopyW SetupQueueCopy;
1848     alias SetupQueueDefaultCopyW SetupQueueDefaultCopy;
1849     alias SetupQueueDeleteSectionW SetupQueueDeleteSection;
1850     alias SetupQueueDeleteW SetupQueueDelete;
1851     alias SetupQueueRenameSectionW SetupQueueRenameSection;
1852     alias SetupQueueRenameW SetupQueueRename;
1853     alias SetupRemoveFileLogEntryW SetupRemoveFileLogEntry;
1854     alias SetupRemoveFromDiskSpaceListW SetupRemoveFromDiskSpaceList;
1855     alias SetupRemoveFromSourceListW SetupRemoveFromSourceList;
1856     alias SetupRemoveInstallSectionFromDiskSpaceListW SetupRemoveInstallSectionFromDiskSpaceList;
1857     alias SetupRemoveSectionFromDiskSpaceListW SetupRemoveSectionFromDiskSpaceList;
1858     alias SetupRenameErrorW SetupRenameError;
1859     alias SetupScanFileQueueW SetupScanFileQueue;
1860     alias SetupSetDirectoryIdExW SetupSetDirectoryIdEx;
1861     alias SetupSetDirectoryIdW SetupSetDirectoryId;
1862     alias SetupSetFileQueueAlternatePlatformW SetupSetFileQueueAlternatePlatform;
1863     alias SetupSetPlatformPathOverrideW SetupSetPlatformPathOverride;
1864     alias SetupSetSourceListW SetupSetSourceList;
1865 } else {
1866     alias PSP_FILE_CALLBACK_A PSP_FILE_CALLBACK;
1867     alias SetupAddInstallSectionToDiskSpaceListA SetupAddInstallSectionToDiskSpaceList;
1868     alias SetupAddSectionToDiskSpaceListA SetupAddSectionToDiskSpaceList;
1869     alias SetupAddToDiskSpaceListA SetupAddToDiskSpaceList;
1870     alias SetupAddToSourceListA SetupAddToSourceList;
1871     alias SetupAdjustDiskSpaceListA SetupAdjustDiskSpaceList;
1872     alias SetupBackupErrorA SetupBackupError;
1873     alias SetupCommitFileQueueA SetupCommitFileQueue;
1874     alias SetupCopyErrorA SetupCopyError;
1875     alias SetupCopyOEMInfA SetupCopyOEMInf;
1876     alias SetupCreateDiskSpaceListA SetupCreateDiskSpaceList;
1877     alias SetupDecompressOrCopyFileA SetupDecompressOrCopyFile;
1878     alias SetupDefaultQueueCallbackA SetupDefaultQueueCallback;
1879     alias SetupDeleteErrorA SetupDeleteError;
1880     alias SetupDiBuildClassInfoListExA SetupDiBuildClassInfoListEx;
1881     alias SetupDiClassGuidsFromNameA SetupDiClassGuidsFromName;
1882     alias SetupDiClassGuidsFromNameExA SetupDiClassGuidsFromNameEx;
1883     alias SetupDiClassNameFromGuidA SetupDiClassNameFromGuid;
1884     alias SetupDiClassNameFromGuidExA SetupDiClassNameFromGuidEx;
1885     alias SetupDiCreateDeviceInfoA SetupDiCreateDeviceInfo;
1886     alias SetupDiCreateDeviceInfoListExA SetupDiCreateDeviceInfoListEx;
1887     alias SetupDiCreateDeviceInterfaceA SetupDiCreateDeviceInterface;
1888     deprecated alias SetupDiCreateDeviceInterfaceA SetupDiCreateInterfaceDevice;
1889     alias SetupDiCreateDeviceInterfaceRegKeyA SetupDiCreateDeviceInterfaceRegKey;
1890     deprecated alias SetupDiCreateDeviceInterfaceRegKeyA SetupDiCreateInterfaceDeviceRegKey;
1891     alias SetupDiCreateDevRegKeyA SetupDiCreateDevRegKey;
1892     alias SetupDiDeleteDeviceInterfaceData SetupDiDeleteInterfaceDeviceData;
1893     alias SetupDiEnumDriverInfoA SetupDiEnumDriverInfo;
1894     alias SetupDiGetActualSectionToInstallA SetupDiGetActualSectionToInstall;
1895     alias SetupDiGetClassDescriptionA SetupDiGetClassDescription;
1896     alias SetupDiGetClassDescriptionExA SetupDiGetClassDescriptionEx;
1897     alias SetupDiGetClassDevPropertySheetsA SetupDiGetClassDevPropertySheets;
1898     alias SetupDiGetClassDevsA SetupDiGetClassDevs;
1899     alias SetupDiGetClassDevsExA SetupDiGetClassDevsEx;
1900     alias SetupDiGetClassImageListExA SetupDiGetClassImageListEx;
1901     alias SetupDiGetClassInstallParamsA SetupDiGetClassInstallParams;
1902     alias SetupDiGetClassRegistryPropertyA SetupDiGetClassRegistryProperty;
1903     alias SetupDiGetDeviceInfoListDetailA SetupDiGetDeviceInfoListDetail;
1904     alias SetupDiGetDeviceInstallParamsA SetupDiGetDeviceInstallParams;
1905     alias SetupDiGetDeviceInstanceIdA SetupDiGetDeviceInstanceId;
1906     alias SetupDiGetDeviceInterfaceDetailA SetupDiGetDeviceInterfaceDetail;
1907     deprecated alias SetupDiGetDeviceInterfaceDetailA SetupDiGetInterfaceDeviceDetail;
1908     alias SetupDiGetDeviceRegistryPropertyA SetupDiGetDeviceRegistryProperty;
1909     alias SetupDiGetDriverInfoDetailA SetupDiGetDriverInfoDetail;
1910     alias SetupDiGetDriverInstallParamsA SetupDiGetDriverInstallParams;
1911     alias SetupDiGetHwProfileFriendlyNameA SetupDiGetHwProfileFriendlyName;
1912     alias SetupDiGetHwProfileFriendlyNameExA SetupDiGetHwProfileFriendlyNameEx;
1913     alias SetupDiGetHwProfileListExA SetupDiGetHwProfileListEx;
1914     alias SetupDiGetINFClassA SetupDiGetINFClass;
1915     alias SetupDiGetSelectedDriverA SetupDiGetSelectedDriver;
1916     alias SetupDiInstallClassA SetupDiInstallClass;
1917     alias SetupDiInstallClassExA SetupDiInstallClassEx;
1918     alias SetupDiOpenClassRegKeyExA SetupDiOpenClassRegKeyEx;
1919     alias SetupDiOpenDeviceInfoA SetupDiOpenDeviceInfo;
1920     alias SetupDiOpenDeviceInterfaceA SetupDiOpenDeviceInterface;
1921     deprecated alias SetupDiOpenDeviceInterfaceA SetupDiOpenInterfaceDevice;
1922     alias SetupDiSetClassInstallParamsA SetupDiSetClassInstallParams;
1923     alias SetupDiSetClassRegistryPropertyA SetupDiSetClassRegistryProperty;
1924     alias SetupDiSetDeviceInstallParamsA SetupDiSetDeviceInstallParams;
1925     alias SetupDiSetDeviceRegistryPropertyA SetupDiSetDeviceRegistryProperty;
1926     alias SetupDiSetDriverInstallParamsA SetupDiSetDriverInstallParams;
1927     alias SetupDiSetSelectedDriverA SetupDiSetSelectedDriver;
1928     alias SetupDuplicateDiskSpaceListA SetupDuplicateDiskSpaceList;
1929     alias SetupFindFirstLineA SetupFindFirstLine;
1930     alias SetupFindNextMatchLineA SetupFindNextMatchLine;
1931     alias SetupFreeSourceListA SetupFreeSourceList;
1932     alias SetupGetBackupInformationA SetupGetBackupInformation;
1933     alias SetupGetFileCompressionInfoA SetupGetFileCompressionInfo;
1934     alias SetupGetInfFileListA SetupGetInfFileList;
1935     alias SetupGetInfInformationA SetupGetInfInformation;
1936     alias SetupGetLineByIndexA SetupGetLineByIndex;
1937     alias SetupGetLineCountA SetupGetLineCount;
1938     alias SetupGetLineTextA SetupGetLineText;
1939     alias SetupGetMultiSzFieldA SetupGetMultiSzField;
1940     alias SetupGetSourceFileLocationA SetupGetSourceFileLocation;
1941     alias SetupGetSourceFileSizeA SetupGetSourceFileSize;
1942     alias SetupGetSourceInfoA SetupGetSourceInfo;
1943     alias SetupGetStringFieldA SetupGetStringField;
1944     alias SetupGetTargetPathA SetupGetTargetPath;
1945     alias SetupInitializeFileLogA SetupInitializeFileLog;
1946     alias SetupInstallFileA SetupInstallFile;
1947     alias SetupInstallFileExA SetupInstallFileEx;
1948     alias SetupInstallFilesFromInfSectionA SetupInstallFilesFromInfSection;
1949     alias SetupInstallFromInfSectionA SetupInstallFromInfSection;
1950     alias SetupInstallServicesFromInfSectionA SetupInstallServicesFromInfSection;
1951     alias SetupInstallServicesFromInfSectionExA SetupInstallServicesFromInfSectionEx;
1952     alias SetupIterateCabinetA SetupIterateCabinet;
1953     alias SetupLogErrorA SetupLogError;
1954     alias SetupLogFileA SetupLogFile;
1955     alias SetupOpenAppendInfFileA SetupOpenAppendInfFile;
1956     alias SetupOpenInfFileA SetupOpenInfFile;
1957     alias SetupPromptForDiskA SetupPromptForDisk;
1958     alias SetupQueryDrivesInDiskSpaceListA SetupQueryDrivesInDiskSpaceList;
1959     alias SetupQueryFileLogA SetupQueryFileLog;
1960     alias SetupQueryInfFileInformationA SetupQueryInfFileInformation;
1961     alias SetupQueryInfOriginalFileInformationA SetupQueryInfOriginalFileInformation;
1962     alias SetupQueryInfVersionInformationA SetupQueryInfVersionInformation;
1963     alias SetupQuerySourceListA SetupQuerySourceList;
1964     alias SetupQuerySpaceRequiredOnDriveA SetupQuerySpaceRequiredOnDrive;
1965     alias SetupQueueCopyA SetupQueueCopy;
1966     alias SetupQueueCopyIndirectA SetupQueueCopyIndirect;
1967     alias SetupQueueCopySectionA SetupQueueCopySection;
1968     alias SetupQueueDefaultCopyA SetupQueueDefaultCopy;
1969     alias SetupQueueDeleteA SetupQueueDelete;
1970     alias SetupQueueDeleteSectionA SetupQueueDeleteSection;
1971     alias SetupQueueRenameA SetupQueueRename;
1972     alias SetupQueueRenameSectionA SetupQueueRenameSection;
1973     alias SetupRemoveFileLogEntryA SetupRemoveFileLogEntry;
1974     alias SetupRemoveFromDiskSpaceListA SetupRemoveFromDiskSpaceList;
1975     alias SetupRemoveFromSourceListA SetupRemoveFromSourceList;
1976     alias SetupRemoveInstallSectionFromDiskSpaceListA SetupRemoveInstallSectionFromDiskSpaceList;
1977     alias SetupRemoveSectionFromDiskSpaceListA SetupRemoveSectionFromDiskSpaceList;
1978     alias SetupRenameErrorA SetupRenameError;
1979     alias SetupScanFileQueueA SetupScanFileQueue;
1980     alias SetupSetDirectoryIdA SetupSetDirectoryId;
1981     alias SetupSetDirectoryIdExA SetupSetDirectoryIdEx;
1982     alias SetupSetFileQueueAlternatePlatformA SetupSetFileQueueAlternatePlatform;
1983     alias SetupSetPlatformPathOverrideA SetupSetPlatformPathOverride;
1984     alias SetupSetSourceListA SetupSetSourceList;
1985 }
1986