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