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