1 // Copyright © 2015, skdltmxn
2 // Licensed under the MIT License <LICENSE.md>
3 //! Windows NT Setup and Device Installer services
4 pub const LINE_LEN: usize = 256;
5 pub const MAX_INF_STRING_LENGTH: usize = 4096;
6 pub const MAX_INF_SECTION_NAME_LENGTH: usize = 255;
7 pub const MAX_TITLE_LEN: usize = 60;
8 pub const MAX_INSTRUCTION_LEN: usize = 256;
9 pub const MAX_LABEL_LEN: usize = 30;
10 pub const MAX_SERVICE_NAME_LEN: usize = 256;
11 pub const MAX_SUBTITLE_LEN: usize = 256;
12 pub const SP_MAX_MACHINENAME_LENGTH: usize = ::MAX_PATH + 3;
13 pub type HINF = ::PVOID;
14 STRUCT!{struct INFCONTEXT {
15     Inf: ::PVOID,
16     CurrentInf: ::PVOID,
17     Section: ::UINT,
18     Line: ::UINT,
19 }}
20 pub type PINFCONTEXT = *mut INFCONTEXT;
21 STRUCT!{struct SP_INF_INFORMATION {
22     InfStyle: ::DWORD,
23     InfCount: ::DWORD,
24     VersionData: [::BYTE; ::ANYSIZE_ARRAY],
25 }}
26 pub type PSP_INF_INFORMATION = *mut SP_INF_INFORMATION;
27 STRUCT!{struct SP_ALTPLATFORM_INFO_V2 {
28     cbSize: ::DWORD,
29     Platform: ::DWORD,
30     MajorVersion: ::DWORD,
31     MinorVersion: ::DWORD,
32     ProcessorArchitecture: ::WORD,
33     Reserved: ::WORD,
34     FirstValidatedMajorVersion: ::DWORD,
35     FirstValidatedMinorVersion: ::DWORD,
36 }}
37 UNION!(SP_ALTPLATFORM_INFO_V2, Reserved, Flags, Flags_mut, ::WORD);
38 pub type PSP_ALTPLATFORM_INFO_V2 = *mut SP_ALTPLATFORM_INFO_V2;
39 STRUCT!{struct SP_ALTPLATFORM_INFO_V1 {
40     cbSize: ::DWORD,
41     Platform: ::DWORD,
42     MajorVersion: ::DWORD,
43     MinorVersion: ::DWORD,
44     ProcessorArchitecture: ::WORD,
45     Reserved: ::WORD,
46 }}
47 pub type PSP_ALTPLATFORM_INFO_V1 = *mut SP_ALTPLATFORM_INFO_V1;
48 pub type SP_ALTPLATFORM_INFO = SP_ALTPLATFORM_INFO_V2;
49 pub type PSP_ALTPLATFORM_INFO = PSP_ALTPLATFORM_INFO_V2;
50 pub const SP_ALTPLATFORM_FLAGS_VERSION_RANGE: ::WORD = 0x0001;
51 STRUCT!{nodebug struct SP_ORIGINAL_FILE_INFO_A {
52     cbSize: ::DWORD,
53     OriginalInfName: [::CHAR; ::MAX_PATH],
54     OriginalCatalogName: [::CHAR; ::MAX_PATH],
55 }}
56 pub type PSP_ORIGINAL_FILE_INFO_A = *mut SP_ORIGINAL_FILE_INFO_A;
57 STRUCT!{nodebug struct SP_ORIGINAL_FILE_INFO_W {
58     cbSize: ::DWORD,
59     OriginalInfName: [::WCHAR; ::MAX_PATH],
60     OriginalCatalogName: [::WCHAR; ::MAX_PATH],
61 }}
62 pub type PSP_ORIGINAL_FILE_INFO_W = *mut SP_ORIGINAL_FILE_INFO_W;
63 pub const INF_STYLE_NONE: ::DWORD = 0x00000000;
64 pub const INF_STYLE_OLDNT: ::DWORD = 0x00000001;
65 pub const INF_STYLE_WIN4: ::DWORD = 0x00000002;
66 pub const INF_STYLE_CACHE_ENABLE: ::DWORD = 0x00000010;
67 pub const INF_STYLE_CACHE_DISABLE: ::DWORD = 0x00000020;
68 pub const INF_STYLE_CACHE_IGNORE: ::DWORD = 0x00000040;
69 pub const DIRID_ABSOLUTE: ::DWORD = -1i32 as ::DWORD;
70 pub const DIRID_ABSOLUTE_16BIT: ::DWORD = 0xffff;
71 pub const DIRID_NULL: ::DWORD = 0;
72 pub const DIRID_SRCPATH: ::DWORD = 1;
73 pub const DIRID_WINDOWS: ::DWORD = 10;
74 pub const DIRID_SYSTEM: ::DWORD = 11;
75 pub const DIRID_DRIVERS: ::DWORD = 12;
76 pub const DIRID_IOSUBSYS: ::DWORD = DIRID_DRIVERS;
77 pub const DIRID_DRIVER_STORE: ::DWORD = 13;
78 pub const DIRID_INF: ::DWORD = 17;
79 pub const DIRID_HELP: ::DWORD = 18;
80 pub const DIRID_FONTS: ::DWORD = 20;
81 pub const DIRID_VIEWERS: ::DWORD = 21;
82 pub const DIRID_COLOR: ::DWORD = 23;
83 pub const DIRID_APPS: ::DWORD = 24;
84 pub const DIRID_SHARED: ::DWORD = 25;
85 pub const DIRID_BOOT: ::DWORD = 30;
86 pub const DIRID_SYSTEM16: ::DWORD = 50;
87 pub const DIRID_SPOOL: ::DWORD = 51;
88 pub const DIRID_SPOOLDRIVERS: ::DWORD = 52;
89 pub const DIRID_USERPROFILE: ::DWORD = 53;
90 pub const DIRID_LOADER: ::DWORD = 54;
91 pub const DIRID_PRINTPROCESSOR: ::DWORD = 55;
92 pub const DIRID_DEFAULT: ::DWORD = DIRID_SYSTEM;
93 pub const DIRID_COMMON_STARTMENU: ::DWORD = 16406;
94 pub const DIRID_COMMON_PROGRAMS: ::DWORD = 16407;
95 pub const DIRID_COMMON_STARTUP: ::DWORD = 16408;
96 pub const DIRID_COMMON_DESKTOPDIRECTORY: ::DWORD = 16409;
97 pub const DIRID_COMMON_FAVORITES: ::DWORD = 16415;
98 pub const DIRID_COMMON_APPDATA: ::DWORD = 16419;
99 pub const DIRID_PROGRAM_FILES: ::DWORD = 16422;
100 pub const DIRID_SYSTEM_X86: ::DWORD = 16425;
101 pub const DIRID_PROGRAM_FILES_X86: ::DWORD = 16426;
102 pub const DIRID_PROGRAM_FILES_COMMON: ::DWORD = 16427;
103 pub const DIRID_PROGRAM_FILES_COMMONX86: ::DWORD = 16428;
104 pub const DIRID_COMMON_TEMPLATES: ::DWORD = 16429;
105 pub const DIRID_COMMON_DOCUMENTS: ::DWORD = 16430;
106 pub const DIRID_USER: ::DWORD = 0x8000;
107 pub type PSP_FILE_CALLBACK_A = Option<unsafe extern "system" fn(
108     Context: ::PVOID, Notification: ::UINT, Param1: ::UINT_PTR, Param2: ::UINT_PTR,
109 ) -> ::UINT>;
110 pub type PSP_FILE_CALLBACK_W = Option<unsafe extern "system" fn(
111     Context: ::PVOID, Notification: ::UINT, Param1: ::UINT_PTR, Param2: ::UINT_PTR,
112 ) -> ::UINT>;
113 pub const SPFILENOTIFY_STARTQUEUE: ::UINT = 0x00000001;
114 pub const SPFILENOTIFY_ENDQUEUE: ::UINT = 0x00000002;
115 pub const SPFILENOTIFY_STARTSUBQUEUE: ::UINT = 0x00000003;
116 pub const SPFILENOTIFY_ENDSUBQUEUE: ::UINT = 0x00000004;
117 pub const SPFILENOTIFY_STARTDELETE: ::UINT = 0x00000005;
118 pub const SPFILENOTIFY_ENDDELETE: ::UINT = 0x00000006;
119 pub const SPFILENOTIFY_DELETEERROR: ::UINT = 0x00000007;
120 pub const SPFILENOTIFY_STARTRENAME: ::UINT = 0x00000008;
121 pub const SPFILENOTIFY_ENDRENAME: ::UINT = 0x00000009;
122 pub const SPFILENOTIFY_RENAMEERROR: ::UINT = 0x0000000a;
123 pub const SPFILENOTIFY_STARTCOPY: ::UINT = 0x0000000b;
124 pub const SPFILENOTIFY_ENDCOPY: ::UINT = 0x0000000c;
125 pub const SPFILENOTIFY_COPYERROR: ::UINT = 0x0000000d;
126 pub const SPFILENOTIFY_NEEDMEDIA: ::UINT = 0x0000000e;
127 pub const SPFILENOTIFY_QUEUESCAN: ::UINT = 0x0000000f;
128 pub const SPFILENOTIFY_CABINETINFO: ::UINT = 0x00000010;
129 pub const SPFILENOTIFY_FILEINCABINET: ::UINT = 0x00000011;
130 pub const SPFILENOTIFY_NEEDNEWCABINET: ::UINT = 0x00000012;
131 pub const SPFILENOTIFY_FILEEXTRACTED: ::UINT = 0x00000013;
132 pub const SPFILENOTIFY_FILEOPDELAYED: ::UINT = 0x00000014;
133 pub const SPFILENOTIFY_STARTBACKUP: ::UINT = 0x00000015;
134 pub const SPFILENOTIFY_BACKUPERROR: ::UINT = 0x00000016;
135 pub const SPFILENOTIFY_ENDBACKUP: ::UINT = 0x00000017;
136 pub const SPFILENOTIFY_QUEUESCAN_EX: ::UINT = 0x00000018;
137 pub const SPFILENOTIFY_STARTREGISTRATION: ::UINT = 0x00000019;
138 pub const SPFILENOTIFY_ENDREGISTRATION: ::UINT = 0x00000020;
139 pub const SPFILENOTIFY_QUEUESCAN_SIGNERINFO: ::UINT = 0x00000040;
140 pub const SPFILENOTIFY_LANGMISMATCH: ::UINT = 0x00010000;
141 pub const SPFILENOTIFY_TARGETEXISTS: ::UINT = 0x00020000;
142 pub const SPFILENOTIFY_TARGETNEWER: ::UINT = 0x00040000;
143 pub const FILEOP_COPY: ::UINT = 0;
144 pub const FILEOP_RENAME: ::UINT = 1;
145 pub const FILEOP_DELETE: ::UINT = 2;
146 pub const FILEOP_BACKUP: ::UINT = 3;
147 pub const FILEOP_ABORT: ::UINT = 0;
148 pub const FILEOP_DOIT: ::UINT = 1;
149 pub const FILEOP_SKIP: ::UINT = 2;
150 pub const FILEOP_RETRY: ::UINT = FILEOP_DOIT;
151 pub const FILEOP_NEWPATH: ::UINT = 4;
152 pub const COPYFLG_WARN_IF_SKIP: ::UINT = 0x00000001;
153 pub const COPYFLG_NOSKIP: ::UINT = 0x00000002;
154 pub const COPYFLG_NOVERSIONCHECK: ::UINT = 0x00000004;
155 pub const COPYFLG_FORCE_FILE_IN_USE: ::UINT = 0x00000008;
156 pub const COPYFLG_NO_OVERWRITE: ::UINT = 0x00000010;
157 pub const COPYFLG_NO_VERSION_DIALOG: ::UINT = 0x00000020;
158 pub const COPYFLG_OVERWRITE_OLDER_ONLY: ::UINT = 0x00000040;
159 pub const COPYFLG_PROTECTED_WINDOWS_DRIVER_FILE: ::UINT = 0x00000100;
160 pub const COPYFLG_REPLACEONLY: ::UINT = 0x00000400;
161 pub const COPYFLG_NODECOMP: ::UINT = 0x00000800;
162 pub const COPYFLG_REPLACE_BOOT_FILE: ::UINT = 0x00001000;
163 pub const COPYFLG_NOPRUNE: ::UINT = 0x00002000;
164 pub const COPYFLG_IN_USE_TRY_RENAME: ::UINT = 0x00004000;
165 pub const DELFLG_IN_USE: ::UINT = 0x00000001;
166 pub const DELFLG_IN_USE1: ::UINT = 0x00010000;
167 STRUCT!{struct FILEPATHS_A {
168     Target: ::PCSTR,
169     Source: ::PCSTR,
170     Win32Error: ::UINT,
171     Flags: ::DWORD,
172 }}
173 pub type PFILEPATHS_A = *mut FILEPATHS_A;
174 STRUCT!{struct FILEPATHS_W {
175     Target: ::PCWSTR,
176     Source: ::PCWSTR,
177     Win32Error: ::UINT,
178     Flags: ::DWORD,
179 }}
180 pub type PFILEPATHS_W = *mut FILEPATHS_W;
181 STRUCT!{struct FILEPATHS_SIGNERINFO_A {
182     Target: ::PCSTR,
183     Source: ::PCSTR,
184     Win32Error: ::UINT,
185     Flags: ::DWORD,
186     DigitalSigner: ::PCSTR,
187     Version: ::PCSTR,
188     CatalogFile: ::PCSTR,
189 }}
190 pub type PFILEPATHS_SIGNERINFO_A = *mut FILEPATHS_SIGNERINFO_A;
191 STRUCT!{struct FILEPATHS_SIGNERINFO_W {
192     Target: ::PCWSTR,
193     Source: ::PCWSTR,
194     Win32Error: ::UINT,
195     Flags: ::DWORD,
196     DigitalSigner: ::PCWSTR,
197     Version: ::PCWSTR,
198     CatalogFile: ::PCWSTR,
199 }}
200 pub type PFILEPATHS_SIGNERINFO_W = *mut FILEPATHS_SIGNERINFO_W;
201 STRUCT!{struct SOURCE_MEDIA_A {
202     Reserved: ::PCSTR,
203     Tagfile: ::PCSTR,
204     Description: ::PCSTR,
205     SourcePath: ::PCSTR,
206     SourceFile: ::PCSTR,
207     Flags: ::DWORD,
208 }}
209 pub type PSOURCE_MEDIA_A = *mut SOURCE_MEDIA_A;
210 STRUCT!{struct SOURCE_MEDIA_W {
211     Reserved: ::PCWSTR,
212     Tagfile: ::PCWSTR,
213     Description: ::PCWSTR,
214     SourcePath: ::PCWSTR,
215     SourceFile: ::PCWSTR,
216     Flags: ::DWORD,
217 }}
218 pub type PSOURCE_MEDIA_W = *mut SOURCE_MEDIA_W;
219 STRUCT!{struct CABINET_INFO_A {
220     CabinetPath: ::PCSTR,
221     CabinetFile: ::PCSTR,
222     DiskName: ::PCSTR,
223     SetId: ::USHORT,
224     CabinetNumber: ::USHORT,
225 }}
226 pub type PCABINET_INFO_A = *mut CABINET_INFO_A;
227 STRUCT!{struct CABINET_INFO_W {
228     CabinetPath: ::PCWSTR,
229     CabinetFile: ::PCWSTR,
230     DiskName: ::PCWSTR,
231     SetId: ::USHORT,
232     CabinetNumber: ::USHORT,
233 }}
234 pub type PCABINET_INFO_W = *mut CABINET_INFO_W;
235 STRUCT!{nodebug struct FILE_IN_CABINET_INFO_A {
236     NameInCabinet: ::PCSTR,
237     FileSize: ::DWORD,
238     Win32Error: ::DWORD,
239     DosDate: ::WORD,
240     DosTime: ::WORD,
241     DosAttribs: ::WORD,
242     FullTargetName: [::CHAR; ::MAX_PATH],
243 }}
244 pub type PFILE_IN_CABINET_INFO_A = *mut FILE_IN_CABINET_INFO_A;
245 STRUCT!{nodebug struct FILE_IN_CABINET_INFO_W {
246     NameInCabinet: ::PCWSTR,
247     FileSize: ::DWORD,
248     Win32Error: ::DWORD,
249     DosDate: ::WORD,
250     DosTime: ::WORD,
251     DosAttribs: ::WORD,
252     FullTargetName: [::WCHAR; ::MAX_PATH],
253 }}
254 pub type PFILE_IN_CABINET_INFO_W = *mut FILE_IN_CABINET_INFO_W;
255 STRUCT!{struct SP_REGISTER_CONTROL_STATUSA {
256     cbSize: ::DWORD,
257     FileName: ::PCSTR,
258     Win32Error: ::DWORD,
259     FailureCode: ::DWORD,
260 }}
261 pub type PSP_REGISTER_CONTROL_STATUSA = *mut SP_REGISTER_CONTROL_STATUSA;
262 STRUCT!{struct SP_REGISTER_CONTROL_STATUSW {
263     cbSize: ::DWORD,
264     FileName: ::PCWSTR,
265     Win32Error: ::DWORD,
266     FailureCode: ::DWORD,
267 }}
268 pub type PSP_REGISTER_CONTROL_STATUSW = *mut SP_REGISTER_CONTROL_STATUSW;
269 pub const SPREG_SUCCESS: ::DWORD = 0x00000000;
270 pub const SPREG_LOADLIBRARY: ::DWORD = 0x00000001;
271 pub const SPREG_GETPROCADDR: ::DWORD = 0x00000002;
272 pub const SPREG_REGSVR: ::DWORD = 0x00000003;
273 pub const SPREG_DLLINSTALL: ::DWORD = 0x00000004;
274 pub const SPREG_TIMEOUT: ::DWORD = 0x00000005;
275 pub const SPREG_UNKNOWN: ::DWORD = 0xFFFFFFFF;
276 pub type HSPFILEQ = ::PVOID;
277 STRUCT!{struct SP_FILE_COPY_PARAMS_A {
278     cbSize: ::DWORD,
279     QueueHandle: HSPFILEQ,
280     SourceRootPath: ::PCSTR,
281     SourcePath: ::PCSTR,
282     SourceFilename: ::PCSTR,
283     SourceDescription: ::PCSTR,
284     SourceTagfile: ::PCSTR,
285     TargetDirectory: ::PCSTR,
286     TargetFilename: ::PCSTR,
287     CopyStyle: ::DWORD,
288     LayoutInf: HINF,
289     SecurityDescriptor: ::PCSTR,
290 }}
291 pub type PSP_FILE_COPY_PARAMS_A = *mut SP_FILE_COPY_PARAMS_A;
292 STRUCT!{struct SP_FILE_COPY_PARAMS_W {
293     cbSize: ::DWORD,
294     QueueHandle: HSPFILEQ,
295     SourceRootPath: ::PCWSTR,
296     SourcePath: ::PCWSTR,
297     SourceFilename: ::PCWSTR,
298     SourceDescription: ::PCWSTR,
299     SourceTagfile: ::PCWSTR,
300     TargetDirectory: ::PCWSTR,
301     TargetFilename: ::PCWSTR,
302     CopyStyle: ::DWORD,
303     LayoutInf: HINF,
304     SecurityDescriptor: ::PCWSTR,
305 }}
306 pub type PSP_FILE_COPY_PARAMS_W = *mut SP_FILE_COPY_PARAMS_W;
307 pub type HDSKSPC = ::PVOID;
308 pub type HDEVINFO = ::PVOID;
309 STRUCT!{struct SP_DEVINFO_DATA {
310     cbSize: ::DWORD,
311     ClassGuid: ::GUID,
312     DevInst: ::DWORD,
313     Reserved: ::ULONG_PTR,
314 }}
315 pub type PSP_DEVINFO_DATA = *mut SP_DEVINFO_DATA;
316 STRUCT!{struct SP_DEVICE_INTERFACE_DATA {
317     cbSize: ::DWORD,
318     InterfaceClassGuid: ::GUID,
319     Flags: ::DWORD,
320     Reserved: ::ULONG_PTR,
321 }}
322 pub type PSP_DEVICE_INTERFACE_DATA = *mut SP_DEVICE_INTERFACE_DATA;
323 pub const SPINT_ACTIVE: ::DWORD = 0x00000001;
324 pub const SPINT_DEFAULT: ::DWORD = 0x00000002;
325 pub const SPINT_REMOVED: ::DWORD = 0x00000004;
326 pub type SP_INTERFACE_DEVICE_DATA = SP_DEVICE_INTERFACE_DATA;
327 pub type PSP_INTERFACE_DEVICE_DATA = PSP_DEVICE_INTERFACE_DATA;
328 pub const SPID_ACTIVE: ::DWORD = SPINT_ACTIVE;
329 pub const SPID_DEFAULT: ::DWORD = SPINT_DEFAULT;
330 pub const SPID_REMOVED: ::DWORD = SPINT_REMOVED;
331 STRUCT!{struct SP_DEVICE_INTERFACE_DETAIL_DATA_A {
332     cbSize: ::DWORD,
333     DevicePath: [::CHAR; ::ANYSIZE_ARRAY],
334 }}
335 pub type PSP_DEVICE_INTERFACE_DETAIL_DATA_A = *mut SP_DEVICE_INTERFACE_DETAIL_DATA_A;
336 STRUCT!{struct SP_DEVICE_INTERFACE_DETAIL_DATA_W {
337     cbSize: ::DWORD,
338     DevicePath: [::WCHAR; ::ANYSIZE_ARRAY],
339 }}
340 pub type PSP_DEVICE_INTERFACE_DETAIL_DATA_W = *mut SP_DEVICE_INTERFACE_DETAIL_DATA_W;
341 STRUCT!{nodebug struct SP_DEVINFO_LIST_DETAIL_DATA_A {
342     cbSize: ::DWORD,
343     ClassGuid: ::GUID,
344     RemoteMachineHandle: ::HANDLE,
345     RemoteMachineName: [::CHAR; SP_MAX_MACHINENAME_LENGTH],
346 }}
347 pub type PSP_DEVINFO_LIST_DETAIL_DATA_A = *mut SP_DEVINFO_LIST_DETAIL_DATA_A;
348 STRUCT!{nodebug struct SP_DEVINFO_LIST_DETAIL_DATA_W {
349     cbSize: ::DWORD,
350     ClassGuid: ::GUID,
351     RemoteMachineHandle: ::HANDLE,
352     RemoteMachineName: [::WCHAR; SP_MAX_MACHINENAME_LENGTH],
353 }}
354 pub type PSP_DEVINFO_LIST_DETAIL_DATA_W = *mut SP_DEVINFO_LIST_DETAIL_DATA_W;
355 pub const DIF_SELECTDEVICE: DI_FUNCTION = 0x00000001;
356 pub const DIF_INSTALLDEVICE: DI_FUNCTION = 0x00000002;
357 pub const DIF_ASSIGNRESOURCES: DI_FUNCTION = 0x00000003;
358 pub const DIF_PROPERTIES: DI_FUNCTION = 0x00000004;
359 pub const DIF_REMOVE: DI_FUNCTION = 0x00000005;
360 pub const DIF_FIRSTTIMESETUP: DI_FUNCTION = 0x00000006;
361 pub const DIF_FOUNDDEVICE: DI_FUNCTION = 0x00000007;
362 pub const DIF_SELECTCLASSDRIVERS: DI_FUNCTION = 0x00000008;
363 pub const DIF_VALIDATECLASSDRIVERS: DI_FUNCTION = 0x00000009;
364 pub const DIF_INSTALLCLASSDRIVERS: DI_FUNCTION = 0x0000000A;
365 pub const DIF_CALCDISKSPACE: DI_FUNCTION = 0x0000000B;
366 pub const DIF_DESTROYPRIVATEDATA: DI_FUNCTION = 0x0000000C;
367 pub const DIF_VALIDATEDRIVER: DI_FUNCTION = 0x0000000D;
368 pub const DIF_DETECT: DI_FUNCTION = 0x0000000F;
369 pub const DIF_INSTALLWIZARD: DI_FUNCTION = 0x00000010;
370 pub const DIF_DESTROYWIZARDDATA: DI_FUNCTION = 0x00000011;
371 pub const DIF_PROPERTYCHANGE: DI_FUNCTION = 0x00000012;
372 pub const DIF_ENABLECLASS: DI_FUNCTION = 0x00000013;
373 pub const DIF_DETECTVERIFY: DI_FUNCTION = 0x00000014;
374 pub const DIF_INSTALLDEVICEFILES: DI_FUNCTION = 0x00000015;
375 pub const DIF_UNREMOVE: DI_FUNCTION = 0x00000016;
376 pub const DIF_SELECTBESTCOMPATDRV: DI_FUNCTION = 0x00000017;
377 pub const DIF_ALLOW_INSTALL: DI_FUNCTION = 0x00000018;
378 pub const DIF_REGISTERDEVICE: DI_FUNCTION = 0x00000019;
379 pub const DIF_NEWDEVICEWIZARD_PRESELECT: DI_FUNCTION = 0x0000001A;
380 pub const DIF_NEWDEVICEWIZARD_SELECT: DI_FUNCTION = 0x0000001B;
381 pub const DIF_NEWDEVICEWIZARD_PREANALYZE: DI_FUNCTION = 0x0000001C;
382 pub const DIF_NEWDEVICEWIZARD_POSTANALYZE: DI_FUNCTION = 0x0000001D;
383 pub const DIF_NEWDEVICEWIZARD_FINISHINSTALL: DI_FUNCTION = 0x0000001E;
384 pub const DIF_UNUSED1: DI_FUNCTION = 0x0000001F;
385 pub const DIF_INSTALLINTERFACES: DI_FUNCTION = 0x00000020;
386 pub const DIF_DETECTCANCEL: DI_FUNCTION = 0x00000021;
387 pub const DIF_REGISTER_COINSTALLERS: DI_FUNCTION = 0x00000022;
388 pub const DIF_ADDPROPERTYPAGE_ADVANCED: DI_FUNCTION = 0x00000023;
389 pub const DIF_ADDPROPERTYPAGE_BASIC: DI_FUNCTION = 0x00000024;
390 pub const DIF_RESERVED1: DI_FUNCTION = 0x00000025;
391 pub const DIF_TROUBLESHOOTER: DI_FUNCTION = 0x00000026;
392 pub const DIF_POWERMESSAGEWAKE: DI_FUNCTION = 0x00000027;
393 pub const DIF_ADDREMOTEPROPERTYPAGE_ADVANCED: DI_FUNCTION = 0x00000028;
394 pub const DIF_UPDATEDRIVER_UI: DI_FUNCTION = 0x00000029;
395 pub const DIF_FINISHINSTALL_ACTION: DI_FUNCTION = 0x0000002A;
396 pub const DIF_RESERVED2: DI_FUNCTION = 0x00000030;
397 pub const DIF_MOVEDEVICE: DI_FUNCTION = 0x0000000E;
398 pub type DI_FUNCTION = ::UINT;
399 STRUCT!{nodebug struct SP_DEVINSTALL_PARAMS_A {
400     cbSize: ::DWORD,
401     Flags: ::DWORD,
402     FlagsEx: ::DWORD,
403     hwndParent: ::HWND,
404     InstallMsgHandler: PSP_FILE_CALLBACK_A,
405     InstallMsgHandlerContext: ::PVOID,
406     FileQueue: HSPFILEQ,
407     ClassInstallReserved: ::ULONG_PTR,
408     Reserved: ::DWORD,
409     DriverPath: [::CHAR; ::MAX_PATH],
410 }}
411 pub type PSP_DEVINSTALL_PARAMS_A = *mut SP_DEVINSTALL_PARAMS_A;
412 STRUCT!{nodebug struct SP_DEVINSTALL_PARAMS_W {
413     cbSize: ::DWORD,
414     Flags: ::DWORD,
415     FlagsEx: ::DWORD,
416     hwndParent: ::HWND,
417     InstallMsgHandler: PSP_FILE_CALLBACK_W,
418     InstallMsgHandlerContext: ::PVOID,
419     FileQueue: HSPFILEQ,
420     ClassInstallReserved: ::ULONG_PTR,
421     Reserved: ::DWORD,
422     DriverPath: [::WCHAR; ::MAX_PATH],
423 }}
424 pub type PSP_DEVINSTALL_PARAMS_W = *mut SP_DEVINSTALL_PARAMS_W;
425 pub const DI_SHOWOEM: ::DWORD = 0x00000001;
426 pub const DI_SHOWCOMPAT: ::DWORD = 0x00000002;
427 pub const DI_SHOWCLASS: ::DWORD = 0x00000004;
428 pub const DI_SHOWALL: ::DWORD = 0x00000007;
429 pub const DI_NOVCP: ::DWORD = 0x00000008;
430 pub const DI_DIDCOMPAT: ::DWORD = 0x00000010;
431 pub const DI_DIDCLASS: ::DWORD = 0x00000020;
432 pub const DI_AUTOASSIGNRES: ::DWORD = 0x00000040;
433 pub const DI_NEEDRESTART: ::DWORD = 0x00000080;
434 pub const DI_NEEDREBOOT: ::DWORD = 0x00000100;
435 pub const DI_NOBROWSE: ::DWORD = 0x00000200;
436 pub const DI_MULTMFGS: ::DWORD = 0x00000400;
437 pub const DI_DISABLED: ::DWORD = 0x00000800;
438 pub const DI_GENERALPAGE_ADDED: ::DWORD = 0x00001000;
439 pub const DI_RESOURCEPAGE_ADDED: ::DWORD = 0x00002000;
440 pub const DI_PROPERTIES_CHANGE: ::DWORD = 0x00004000;
441 pub const DI_INF_IS_SORTED: ::DWORD = 0x00008000;
442 pub const DI_ENUMSINGLEINF: ::DWORD = 0x00010000;
443 pub const DI_DONOTCALLCONFIGMG: ::DWORD = 0x00020000;
444 pub const DI_INSTALLDISABLED: ::DWORD = 0x00040000;
445 pub const DI_COMPAT_FROM_CLASS: ::DWORD = 0x00080000;
446 pub const DI_CLASSINSTALLPARAMS: ::DWORD = 0x00100000;
447 pub const DI_NODI_DEFAULTACTION: ::DWORD = 0x00200000;
448 pub const DI_QUIETINSTALL: ::DWORD = 0x00800000;
449 pub const DI_NOFILECOPY: ::DWORD = 0x01000000;
450 pub const DI_FORCECOPY: ::DWORD = 0x02000000;
451 pub const DI_DRIVERPAGE_ADDED: ::DWORD = 0x04000000;
452 pub const DI_USECI_SELECTSTRINGS: ::DWORD = 0x08000000;
453 pub const DI_OVERRIDE_INFFLAGS: ::DWORD = 0x10000000;
454 pub const DI_PROPS_NOCHANGEUSAGE: ::DWORD = 0x20000000;
455 pub const DI_NOSELECTICONS: ::DWORD = 0x40000000;
456 pub const DI_NOWRITE_IDS: ::DWORD = 0x80000000;
457 pub const DI_FLAGSEX_RESERVED2: ::DWORD = 0x00000001;
458 pub const DI_FLAGSEX_RESERVED3: ::DWORD = 0x00000002;
459 pub const DI_FLAGSEX_CI_FAILED: ::DWORD = 0x00000004;
460 pub const DI_FLAGSEX_FINISHINSTALL_ACTION: ::DWORD = 0x00000008;
461 pub const DI_FLAGSEX_DIDINFOLIST: ::DWORD = 0x00000010;
462 pub const DI_FLAGSEX_DIDCOMPATINFO: ::DWORD = 0x00000020;
463 pub const DI_FLAGSEX_FILTERCLASSES: ::DWORD = 0x00000040;
464 pub const DI_FLAGSEX_SETFAILEDINSTALL: ::DWORD = 0x00000080;
465 pub const DI_FLAGSEX_DEVICECHANGE: ::DWORD = 0x00000100;
466 pub const DI_FLAGSEX_ALWAYSWRITEIDS: ::DWORD = 0x00000200;
467 pub const DI_FLAGSEX_PROPCHANGE_PENDING: ::DWORD = 0x00000400;
468 pub const DI_FLAGSEX_ALLOWEXCLUDEDDRVS: ::DWORD = 0x00000800;
469 pub const DI_FLAGSEX_NOUIONQUERYREMOVE: ::DWORD = 0x00001000;
470 pub const DI_FLAGSEX_USECLASSFORCOMPAT: ::DWORD = 0x00002000;
471 pub const DI_FLAGSEX_RESERVED4: ::DWORD = 0x00004000;
472 pub const DI_FLAGSEX_NO_DRVREG_MODIFY: ::DWORD = 0x00008000;
473 pub const DI_FLAGSEX_IN_SYSTEM_SETUP: ::DWORD = 0x00010000;
474 pub const DI_FLAGSEX_INET_DRIVER: ::DWORD = 0x00020000;
475 pub const DI_FLAGSEX_APPENDDRIVERLIST: ::DWORD = 0x00040000;
476 pub const DI_FLAGSEX_PREINSTALLBACKUP: ::DWORD = 0x00080000;
477 pub const DI_FLAGSEX_BACKUPONREPLACE: ::DWORD = 0x00100000;
478 pub const DI_FLAGSEX_DRIVERLIST_FROM_URL: ::DWORD = 0x00200000;
479 pub const DI_FLAGSEX_RESERVED1: ::DWORD = 0x00400000;
480 pub const DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS: ::DWORD = 0x00800000;
481 pub const DI_FLAGSEX_POWERPAGE_ADDED: ::DWORD = 0x01000000;
482 pub const DI_FLAGSEX_FILTERSIMILARDRIVERS: ::DWORD = 0x02000000;
483 pub const DI_FLAGSEX_INSTALLEDDRIVER: ::DWORD = 0x04000000;
484 pub const DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE: ::DWORD = 0x08000000;
485 pub const DI_FLAGSEX_ALTPLATFORM_DRVSEARCH: ::DWORD = 0x10000000;
486 pub const DI_FLAGSEX_RESTART_DEVICE_ONLY: ::DWORD = 0x20000000;
487 pub const DI_FLAGSEX_RECURSIVESEARCH: ::DWORD = 0x40000000;
488 pub const DI_FLAGSEX_SEARCH_PUBLISHED_INFS: ::DWORD = 0x80000000;
489 STRUCT!{struct SP_CLASSINSTALL_HEADER {
490     cbSize: ::DWORD,
491     InstallFunction: DI_FUNCTION,
492 }}
493 pub type PSP_CLASSINSTALL_HEADER = *mut SP_CLASSINSTALL_HEADER;
494 STRUCT!{struct SP_ENABLECLASS_PARAMS {
495     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
496     ClassGuid: ::GUID,
497     EnableMessage: ::DWORD,
498 }}
499 pub type PSP_ENABLECLASS_PARAMS = *mut SP_ENABLECLASS_PARAMS;
500 pub const ENABLECLASS_QUERY: ::DWORD = 0;
501 pub const ENABLECLASS_SUCCESS: ::DWORD = 1;
502 pub const ENABLECLASS_FAILURE: ::DWORD = 2;
503 pub const DICS_ENABLE: ::DWORD = 0x00000001;
504 pub const DICS_DISABLE: ::DWORD = 0x00000002;
505 pub const DICS_PROPCHANGE: ::DWORD = 0x00000003;
506 pub const DICS_START: ::DWORD = 0x00000004;
507 pub const DICS_STOP: ::DWORD = 0x00000005;
508 pub const DICS_FLAG_GLOBAL: ::DWORD = 0x00000001;
509 pub const DICS_FLAG_CONFIGSPECIFIC: ::DWORD = 0x00000002;
510 pub const DICS_FLAG_CONFIGGENERAL: ::DWORD = 0x00000004;
511 STRUCT!{struct SP_PROPCHANGE_PARAMS {
512     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
513     StateChange: ::DWORD,
514     Scope: ::DWORD,
515     HwProfile: ::DWORD,
516 }}
517 pub type PSP_PROPCHANGE_PARAMS = *mut SP_PROPCHANGE_PARAMS;
518 STRUCT!{struct SP_REMOVEDEVICE_PARAMS {
519     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
520     Scope: ::DWORD,
521     HwProfile: ::DWORD,
522 }}
523 pub type PSP_REMOVEDEVICE_PARAMS = *mut SP_REMOVEDEVICE_PARAMS;
524 pub const DI_REMOVEDEVICE_GLOBAL: ::DWORD = 0x00000001;
525 pub const DI_REMOVEDEVICE_CONFIGSPECIFIC: ::DWORD = 0x00000002;
526 STRUCT!{struct SP_UNREMOVEDEVICE_PARAMS {
527     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
528     Scope: ::DWORD,
529     HwProfile: ::DWORD,
530 }}
531 pub type PSP_UNREMOVEDEVICE_PARAMS = *mut SP_UNREMOVEDEVICE_PARAMS;
532 pub const DI_UNREMOVEDEVICE_CONFIGSPECIFIC: ::DWORD = 0x00000002;
533 STRUCT!{nodebug struct SP_SELECTDEVICE_PARAMS_A {
534     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
535     Title: [::CHAR; MAX_TITLE_LEN],
536     Instructions: [::CHAR; MAX_INSTRUCTION_LEN],
537     ListLabel: [::CHAR; MAX_LABEL_LEN],
538     SubTitle: [::CHAR; MAX_SUBTITLE_LEN],
539     Reserved: [::BYTE; 2],
540 }}
541 pub type PSP_SELECTDEVICE_PARAMS_A = *mut SP_SELECTDEVICE_PARAMS_A;
542 STRUCT!{nodebug struct SP_SELECTDEVICE_PARAMS_W {
543     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
544     Title: [::WCHAR; MAX_TITLE_LEN],
545     Instructions: [::WCHAR; MAX_INSTRUCTION_LEN],
546     ListLabel: [::WCHAR; MAX_LABEL_LEN],
547     SubTitle: [::WCHAR; MAX_SUBTITLE_LEN],
548 }}
549 pub type PSP_SELECTDEVICE_PARAMS_W = *mut SP_SELECTDEVICE_PARAMS_W;
550 pub type PDETECT_PROGRESS_NOTIFY = Option<unsafe extern "system" fn(
551     ProgressNotifyParam: ::PVOID, DetectComplete: ::DWORD,
552 ) -> ::BOOL>;
553 STRUCT!{nodebug struct SP_DETECTDEVICE_PARAMS {
554     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
555     DetectProgressNotify: PDETECT_PROGRESS_NOTIFY,
556     ProgressNotifyParam: ::PVOID,
557 }}
558 pub type PSP_DETECTDEVICE_PARAMS = *mut SP_DETECTDEVICE_PARAMS;
559 pub const MAX_INSTALLWIZARD_DYNAPAGES: usize = 20;
560 STRUCT!{struct SP_INSTALLWIZARD_DATA {
561     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
562     Flags: ::DWORD,
563     DynamicPages: [::HPROPSHEETPAGE; MAX_INSTALLWIZARD_DYNAPAGES],
564     NumDynamicPages: ::DWORD,
565     DynamicPageFlags: ::DWORD,
566     PrivateFlags: ::DWORD,
567     PrivateData: ::LPARAM,
568     hwndWizardDlg: ::HWND,
569 }}
570 pub type PSP_INSTALLWIZARD_DATA = *mut SP_INSTALLWIZARD_DATA;
571 pub const NDW_INSTALLFLAG_DIDFACTDEFS: ::DWORD = 0x00000001;
572 pub const NDW_INSTALLFLAG_HARDWAREALLREADYIN: ::DWORD = 0x00000002;
573 pub const NDW_INSTALLFLAG_NEEDRESTART: ::DWORD = DI_NEEDRESTART;
574 pub const NDW_INSTALLFLAG_NEEDREBOOT: ::DWORD = DI_NEEDREBOOT;
575 pub const NDW_INSTALLFLAG_NEEDSHUTDOWN: ::DWORD = 0x00000200;
576 pub const NDW_INSTALLFLAG_EXPRESSINTRO: ::DWORD = 0x00000400;
577 pub const NDW_INSTALLFLAG_SKIPISDEVINSTALLED: ::DWORD = 0x00000800;
578 pub const NDW_INSTALLFLAG_NODETECTEDDEVS: ::DWORD = 0x00001000;
579 pub const NDW_INSTALLFLAG_INSTALLSPECIFIC: ::DWORD = 0x00002000;
580 pub const NDW_INSTALLFLAG_SKIPCLASSLIST: ::DWORD = 0x00004000;
581 pub const NDW_INSTALLFLAG_CI_PICKED_OEM: ::DWORD = 0x00008000;
582 pub const NDW_INSTALLFLAG_PCMCIAMODE: ::DWORD = 0x00010000;
583 pub const NDW_INSTALLFLAG_PCMCIADEVICE: ::DWORD = 0x00020000;
584 pub const NDW_INSTALLFLAG_USERCANCEL: ::DWORD = 0x00040000;
585 pub const NDW_INSTALLFLAG_KNOWNCLASS: ::DWORD = 0x00080000;
586 pub const DYNAWIZ_FLAG_PAGESADDED: ::DWORD = 0x00000001;
587 pub const DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT: ::DWORD = 0x00000008;
588 pub const DYNAWIZ_FLAG_INSTALLDET_NEXT: ::DWORD = 0x00000002;
589 pub const DYNAWIZ_FLAG_INSTALLDET_PREV: ::DWORD = 0x00000004;
590 pub const MIN_IDD_DYNAWIZ_RESOURCE_ID: ::c_int = 10000;
591 pub const MAX_IDD_DYNAWIZ_RESOURCE_ID: ::c_int = 11000;
592 pub const IDD_DYNAWIZ_FIRSTPAGE: ::c_int = 10000;
593 pub const IDD_DYNAWIZ_SELECT_PREVPAGE: ::c_int = 10001;
594 pub const IDD_DYNAWIZ_SELECT_NEXTPAGE: ::c_int = 10002;
595 pub const IDD_DYNAWIZ_ANALYZE_PREVPAGE: ::c_int = 10003;
596 pub const IDD_DYNAWIZ_ANALYZE_NEXTPAGE: ::c_int = 10004;
597 pub const IDD_DYNAWIZ_SELECTDEV_PAGE: ::c_int = 10009;
598 pub const IDD_DYNAWIZ_ANALYZEDEV_PAGE: ::c_int = 10010;
599 pub const IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE: ::c_int = 10011;
600 pub const IDD_DYNAWIZ_SELECTCLASS_PAGE: ::c_int = 10012;
601 pub const IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE: ::c_int = 10006;
602 pub const IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE: ::c_int = 10007;
603 pub const IDD_DYNAWIZ_INSTALLDETECTED_NODEVS: ::c_int = 10008;
604 STRUCT!{struct SP_NEWDEVICEWIZARD_DATA {
605     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
606     Flags: ::DWORD,
607     DynamicPages: [::HPROPSHEETPAGE; MAX_INSTALLWIZARD_DYNAPAGES],
608     NumDynamicPages: ::DWORD,
609     hwndWizardDlg: ::HWND,
610 }}
611 pub type PSP_NEWDEVICEWIZARD_DATA = *mut SP_NEWDEVICEWIZARD_DATA;
612 pub type SP_ADDPROPERTYPAGE_DATA = SP_NEWDEVICEWIZARD_DATA;
613 pub type PSP_ADDPROPERTYPAGE_DATA = PSP_NEWDEVICEWIZARD_DATA;
614 STRUCT!{nodebug struct SP_TROUBLESHOOTER_PARAMS_A {
615     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
616     ChmFile: [::CHAR; ::MAX_PATH],
617     HtmlTroubleShooter: [::CHAR; ::MAX_PATH],
618 }}
619 pub type PSP_TROUBLESHOOTER_PARAMS_A = *mut SP_TROUBLESHOOTER_PARAMS_A;
620 STRUCT!{nodebug struct SP_TROUBLESHOOTER_PARAMS_W {
621     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
622     ChmFile: [::WCHAR; ::MAX_PATH],
623     HtmlTroubleShooter: [::WCHAR; ::MAX_PATH],
624 }}
625 pub type PSP_TROUBLESHOOTER_PARAMS_W = *mut SP_TROUBLESHOOTER_PARAMS_W;
626 STRUCT!{nodebug struct SP_POWERMESSAGEWAKE_PARAMS_A {
627     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
628     PowerMessageWake: [::CHAR; LINE_LEN * 2],
629 }}
630 pub type PSP_POWERMESSAGEWAKE_PARAMS_A = *mut SP_POWERMESSAGEWAKE_PARAMS_A;
631 STRUCT!{nodebug struct SP_POWERMESSAGEWAKE_PARAMS_W {
632     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
633     PowerMessageWake: [::WCHAR; LINE_LEN * 2],
634 }}
635 pub type PSP_POWERMESSAGEWAKE_PARAMS_W = *mut SP_POWERMESSAGEWAKE_PARAMS_W;
636 STRUCT!{nodebug struct SP_DRVINFO_DATA_V2_A {
637     cbSize: ::DWORD,
638     DriverType: ::DWORD,
639     Reserved: ::ULONG_PTR,
640     Description: [::CHAR; LINE_LEN],
641     MfgName: [::CHAR; LINE_LEN],
642     ProviderName: [::CHAR; LINE_LEN],
643     DriverDate: ::FILETIME,
644     DriverVersion: ::DWORDLONG,
645 }}
646 pub type PSP_DRVINFO_DATA_V2_A = *mut SP_DRVINFO_DATA_V2_A;
647 STRUCT!{nodebug struct SP_DRVINFO_DATA_V2_W {
648     cbSize: ::DWORD,
649     DriverType: ::DWORD,
650     Reserved: ::ULONG_PTR,
651     Description: [::WCHAR; LINE_LEN],
652     MfgName: [::WCHAR; LINE_LEN],
653     ProviderName: [::WCHAR; LINE_LEN],
654     DriverDate: ::FILETIME,
655     DriverVersion: ::DWORDLONG,
656 }}
657 pub type PSP_DRVINFO_DATA_V2_W = *mut SP_DRVINFO_DATA_V2_W;
658 STRUCT!{nodebug struct SP_DRVINFO_DATA_V1_A {
659     cbSize: ::DWORD,
660     DriverType: ::DWORD,
661     Reserved: ::ULONG_PTR,
662     Description: [::CHAR; LINE_LEN],
663     MfgName: [::CHAR; LINE_LEN],
664     ProviderName: [::CHAR; LINE_LEN],
665 }}
666 pub type PSP_DRVINFO_DATA_V1_A = *mut SP_DRVINFO_DATA_V1_A;
667 STRUCT!{nodebug struct SP_DRVINFO_DATA_V1_W {
668     cbSize: ::DWORD,
669     DriverType: ::DWORD,
670     Reserved: ::ULONG_PTR,
671     Description: [::WCHAR; LINE_LEN],
672     MfgName: [::WCHAR; LINE_LEN],
673     ProviderName: [::WCHAR; LINE_LEN],
674 }}
675 pub type PSP_DRVINFO_DATA_V1_W = *mut SP_DRVINFO_DATA_V1_W;
676 pub type SP_DRVINFO_DATA_A = SP_DRVINFO_DATA_V2_A;
677 pub type PSP_DRVINFO_DATA_A = PSP_DRVINFO_DATA_V2_A;
678 pub type SP_DRVINFO_DATA_W = SP_DRVINFO_DATA_V2_W;
679 pub type PSP_DRVINFO_DATA_W = PSP_DRVINFO_DATA_V2_W;
680 STRUCT!{nodebug struct SP_DRVINFO_DETAIL_DATA_A {
681     cbSize: ::DWORD,
682     InfDate: ::FILETIME,
683     CompatIDsOffset: ::DWORD,
684     CompatIDsLength: ::DWORD,
685     Reserved: ::ULONG_PTR,
686     SectionName: [::CHAR; LINE_LEN],
687     InfFileName: [::CHAR; ::MAX_PATH],
688     DrvDescription: [::CHAR; LINE_LEN],
689     HardwareID: [::CHAR; ::ANYSIZE_ARRAY],
690 }}
691 pub type PSP_DRVINFO_DETAIL_DATA_A = *mut SP_DRVINFO_DETAIL_DATA_A;
692 STRUCT!{nodebug struct SP_DRVINFO_DETAIL_DATA_W {
693     cbSize: ::DWORD,
694     InfDate: ::FILETIME,
695     CompatIDsOffset: ::DWORD,
696     CompatIDsLength: ::DWORD,
697     Reserved: ::ULONG_PTR,
698     SectionName: [::WCHAR; LINE_LEN],
699     InfFileName: [::WCHAR; ::MAX_PATH],
700     DrvDescription: [::WCHAR; LINE_LEN],
701     HardwareID: [::WCHAR; ::ANYSIZE_ARRAY],
702 }}
703 pub type PSP_DRVINFO_DETAIL_DATA_W = *mut SP_DRVINFO_DETAIL_DATA_W;
704 STRUCT!{struct SP_DRVINSTALL_PARAMS {
705     cbSize: ::DWORD,
706     Rank: ::DWORD,
707     Flags: ::DWORD,
708     PrivateData: ::DWORD_PTR,
709     Reserved: ::DWORD,
710 }}
711 pub type PSP_DRVINSTALL_PARAMS = *mut SP_DRVINSTALL_PARAMS;
712 pub const DNF_DUPDESC: ::DWORD = 0x00000001;
713 pub const DNF_OLDDRIVER: ::DWORD = 0x00000002;
714 pub const DNF_EXCLUDEFROMLIST: ::DWORD = 0x00000004;
715 pub const DNF_NODRIVER: ::DWORD = 0x00000008;
716 pub const DNF_LEGACYINF: ::DWORD = 0x00000010;
717 pub const DNF_CLASS_DRIVER: ::DWORD = 0x00000020;
718 pub const DNF_COMPATIBLE_DRIVER: ::DWORD = 0x00000040;
719 pub const DNF_INET_DRIVER: ::DWORD = 0x00000080;
720 pub const DNF_UNUSED1: ::DWORD = 0x00000100;
721 pub const DNF_UNUSED2: ::DWORD = 0x00000200;
722 pub const DNF_OLD_INET_DRIVER: ::DWORD = 0x00000400;
723 pub const DNF_BAD_DRIVER: ::DWORD = 0x00000800;
724 pub const DNF_DUPPROVIDER: ::DWORD = 0x00001000;
725 pub const DNF_INF_IS_SIGNED: ::DWORD = 0x00002000;
726 pub const DNF_OEM_F6_INF: ::DWORD = 0x00004000;
727 pub const DNF_DUPDRIVERVER: ::DWORD = 0x00008000;
728 pub const DNF_BASIC_DRIVER: ::DWORD = 0x00010000;
729 pub const DNF_AUTHENTICODE_SIGNED: ::DWORD = 0x00020000;
730 pub const DNF_INSTALLEDDRIVER: ::DWORD = 0x00040000;
731 pub const DNF_ALWAYSEXCLUDEFROMLIST: ::DWORD = 0x00080000;
732 pub const DNF_INBOX_DRIVER: ::DWORD = 0x00100000;
733 pub const DNF_REQUESTADDITIONALSOFTWARE: ::DWORD = 0x00200000;
734 pub const DNF_UNUSED_22: ::DWORD = 0x00400000;
735 pub const DNF_UNUSED_23: ::DWORD = 0x00800000;
736 pub const DNF_UNUSED_24: ::DWORD = 0x01000000;
737 pub const DNF_UNUSED_25: ::DWORD = 0x02000000;
738 pub const DNF_UNUSED_26: ::DWORD = 0x04000000;
739 pub const DNF_UNUSED_27: ::DWORD = 0x08000000;
740 pub const DNF_UNUSED_28: ::DWORD = 0x10000000;
741 pub const DNF_UNUSED_29: ::DWORD = 0x20000000;
742 pub const DNF_UNUSED_30: ::DWORD = 0x40000000;
743 pub const DNF_UNUSED_31: ::DWORD = 0x80000000;
744 pub type PSP_DETSIG_CMPPROC = Option<unsafe extern "system" fn(
745     DeviceInfoSet: HDEVINFO, NewDeviceData: PSP_DEVINFO_DATA, ExistingDeviceData: PSP_DEVINFO_DATA,
746     CompareContext: ::PVOID,
747 ) -> ::DWORD>;
748 STRUCT!{struct COINSTALLER_CONTEXT_DATA {
749     PostProcessing: ::BOOL,
750     InstallResult: ::DWORD,
751     PrivateData: ::PVOID,
752 }}
753 pub type PCOINSTALLER_CONTEXT_DATA = *mut COINSTALLER_CONTEXT_DATA;
754 STRUCT!{struct SP_CLASSIMAGELIST_DATA {
755     cbSize: ::DWORD,
756     ImageList: ::HIMAGELIST,
757     Reserved: ::ULONG_PTR,
758 }}
759 pub type PSP_CLASSIMAGELIST_DATA = *mut SP_CLASSIMAGELIST_DATA;
760 STRUCT!{struct SP_PROPSHEETPAGE_REQUEST {
761     cbSize: ::DWORD,
762     PageRequested: ::DWORD,
763     DeviceInfoSet: HDEVINFO,
764     DeviceInfoData: PSP_DEVINFO_DATA,
765 }}
766 pub type PSP_PROPSHEETPAGE_REQUEST = *mut SP_PROPSHEETPAGE_REQUEST;
767 pub const SPPSR_SELECT_DEVICE_RESOURCES: ::DWORD = 1;
768 pub const SPPSR_ENUM_BASIC_DEVICE_PROPERTIES: ::DWORD = 2;
769 pub const SPPSR_ENUM_ADV_DEVICE_PROPERTIES: ::DWORD = 3;
770 STRUCT!{nodebug struct SP_BACKUP_QUEUE_PARAMS_V2_A {
771     cbSize: ::DWORD,
772     FullInfPath: [::CHAR; ::MAX_PATH],
773     FilenameOffset: ::INT,
774     ReinstallInstance: [::CHAR; ::MAX_PATH],
775 }}
776 pub type PSP_BACKUP_QUEUE_PARAMS_V2_A = *mut SP_BACKUP_QUEUE_PARAMS_V2_A;
777 STRUCT!{nodebug struct SP_BACKUP_QUEUE_PARAMS_V2_W {
778     cbSize: ::DWORD,
779     FullInfPath: [::WCHAR; ::MAX_PATH],
780     FilenameOffset: ::INT,
781     ReinstallInstance: [::WCHAR; ::MAX_PATH],
782 }}
783 pub type PSP_BACKUP_QUEUE_PARAMS_V2_W = *mut SP_BACKUP_QUEUE_PARAMS_V2_W;
784 STRUCT!{nodebug struct SP_BACKUP_QUEUE_PARAMS_V1_A {
785     cbSize: ::DWORD,
786     FullInfPath: [::CHAR; ::MAX_PATH],
787     FilenameOffset: ::INT,
788 }}
789 pub type PSP_BACKUP_QUEUE_PARAMS_V1_A = *mut SP_BACKUP_QUEUE_PARAMS_V1_A;
790 STRUCT!{nodebug struct SP_BACKUP_QUEUE_PARAMS_V1_W {
791     cbSize: ::DWORD,
792     FullInfPath: [::WCHAR; ::MAX_PATH],
793     FilenameOffset: ::INT,
794 }}
795 pub type PSP_BACKUP_QUEUE_PARAMS_V1_W = *mut SP_BACKUP_QUEUE_PARAMS_V1_W;
796 pub type SP_BACKUP_QUEUE_PARAMS_A = SP_BACKUP_QUEUE_PARAMS_V2_A;
797 pub type PSP_BACKUP_QUEUE_PARAMS_A = PSP_BACKUP_QUEUE_PARAMS_V2_A;
798 pub type SP_BACKUP_QUEUE_PARAMS_W = SP_BACKUP_QUEUE_PARAMS_V2_W;
799 pub type PSP_BACKUP_QUEUE_PARAMS_W = PSP_BACKUP_QUEUE_PARAMS_V2_W;
800 pub const ERROR_EXPECTED_SECTION_NAME: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
801     | 0;
802 pub const ERROR_BAD_SECTION_NAME_LINE: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
803     | 1;
804 pub const ERROR_SECTION_NAME_TOO_LONG: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
805     | 2;
806 pub const ERROR_GENERAL_SYNTAX: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR | 3;
807 pub const ERROR_WRONG_INF_STYLE: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
808     | 0x100;
809 pub const ERROR_SECTION_NOT_FOUND: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
810     | 0x101;
811 pub const ERROR_LINE_NOT_FOUND: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR | 0x102;
812 pub const ERROR_NO_BACKUP: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR | 0x103;
813 pub const ERROR_NO_ASSOCIATED_CLASS: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
814     | 0x200;
815 pub const ERROR_CLASS_MISMATCH: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR | 0x201;
816 pub const ERROR_DUPLICATE_FOUND: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
817     | 0x202;
818 pub const ERROR_NO_DRIVER_SELECTED: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
819     | 0x203;
820 pub const ERROR_KEY_DOES_NOT_EXIST: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
821     | 0x204;
822 pub const ERROR_INVALID_DEVINST_NAME: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
823     | 0x205;
824 pub const ERROR_INVALID_CLASS: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR | 0x206;
825 pub const ERROR_DEVINST_ALREADY_EXISTS: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
826     | 0x207;
827 pub const ERROR_DEVINFO_NOT_REGISTERED: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
828     | 0x208;
829 pub const ERROR_INVALID_REG_PROPERTY: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
830     | 0x209;
831 pub const ERROR_NO_INF: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR | 0x20A;
832 pub const ERROR_NO_SUCH_DEVINST: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
833     | 0x20B;
834 pub const ERROR_CANT_LOAD_CLASS_ICON: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
835     | 0x20C;
836 pub const ERROR_INVALID_CLASS_INSTALLER: ::DWORD = ::APPLICATION_ERROR_MASK
837     | ::ERROR_SEVERITY_ERROR | 0x20D;
838 pub const ERROR_DI_DO_DEFAULT: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR | 0x20E;
839 pub const ERROR_DI_NOFILECOPY: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR | 0x20F;
840 pub const ERROR_INVALID_HWPROFILE: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
841     | 0x210;
842 pub const ERROR_NO_DEVICE_SELECTED: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
843     | 0x211;
844 pub const ERROR_DEVINFO_LIST_LOCKED: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
845     | 0x212;
846 pub const ERROR_DEVINFO_DATA_LOCKED: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
847     | 0x213;
848 pub const ERROR_DI_BAD_PATH: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR | 0x214;
849 pub const ERROR_NO_CLASSINSTALL_PARAMS: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
850     | 0x215;
851 pub const ERROR_FILEQUEUE_LOCKED: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
852     | 0x216;
853 pub const ERROR_BAD_SERVICE_INSTALLSECT: ::DWORD = ::APPLICATION_ERROR_MASK
854     | ::ERROR_SEVERITY_ERROR | 0x217;
855 pub const ERROR_NO_CLASS_DRIVER_LIST: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
856     | 0x218;
857 pub const ERROR_NO_ASSOCIATED_SERVICE: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
858     | 0x219;
859 pub const ERROR_NO_DEFAULT_DEVICE_INTERFACE: ::DWORD = ::APPLICATION_ERROR_MASK
860     | ::ERROR_SEVERITY_ERROR | 0x21A;
861 pub const ERROR_DEVICE_INTERFACE_ACTIVE: ::DWORD = ::APPLICATION_ERROR_MASK
862     | ::ERROR_SEVERITY_ERROR | 0x21B;
863 pub const ERROR_DEVICE_INTERFACE_REMOVED: ::DWORD = ::APPLICATION_ERROR_MASK
864     | ::ERROR_SEVERITY_ERROR | 0x21C;
865 pub const ERROR_BAD_INTERFACE_INSTALLSECT: ::DWORD = ::APPLICATION_ERROR_MASK
866     | ::ERROR_SEVERITY_ERROR | 0x21D;
867 pub const ERROR_NO_SUCH_INTERFACE_CLASS: ::DWORD = ::APPLICATION_ERROR_MASK
868     | ::ERROR_SEVERITY_ERROR | 0x21E;
869 pub const ERROR_INVALID_REFERENCE_STRING: ::DWORD = ::APPLICATION_ERROR_MASK
870     | ::ERROR_SEVERITY_ERROR | 0x21F;
871 pub const ERROR_INVALID_MACHINENAME: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
872     | 0x220;
873 pub const ERROR_REMOTE_COMM_FAILURE: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
874     | 0x221;
875 pub const ERROR_MACHINE_UNAVAILABLE: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
876     | 0x222;
877 pub const ERROR_NO_CONFIGMGR_SERVICES: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
878     | 0x223;
879 pub const ERROR_INVALID_PROPPAGE_PROVIDER: ::DWORD = ::APPLICATION_ERROR_MASK
880     | ::ERROR_SEVERITY_ERROR | 0x224;
881 pub const ERROR_NO_SUCH_DEVICE_INTERFACE: ::DWORD = ::APPLICATION_ERROR_MASK
882     | ::ERROR_SEVERITY_ERROR | 0x225;
883 pub const ERROR_DI_POSTPROCESSING_REQUIRED: ::DWORD = ::APPLICATION_ERROR_MASK
884     | ::ERROR_SEVERITY_ERROR | 0x226;
885 pub const ERROR_INVALID_COINSTALLER: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
886     | 0x227;
887 pub const ERROR_NO_COMPAT_DRIVERS: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
888     | 0x228;
889 pub const ERROR_NO_DEVICE_ICON: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
890     | 0x229;
891 pub const ERROR_INVALID_INF_LOGCONFIG: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
892     | 0x22A;
893 pub const ERROR_DI_DONT_INSTALL: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
894     | 0x22B;
895 pub const ERROR_INVALID_FILTER_DRIVER: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
896     | 0x22C;
897 pub const ERROR_NON_WINDOWS_NT_DRIVER: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
898     | 0x22D;
899 pub const ERROR_NON_WINDOWS_DRIVER: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
900     | 0x22E;
901 pub const ERROR_NO_CATALOG_FOR_OEM_INF: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
902     | 0x22F;
903 pub const ERROR_DEVINSTALL_QUEUE_NONNATIVE: ::DWORD = ::APPLICATION_ERROR_MASK
904     | ::ERROR_SEVERITY_ERROR | 0x230;
905 pub const ERROR_NOT_DISABLEABLE: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
906     | 0x231;
907 pub const ERROR_CANT_REMOVE_DEVINST: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
908     | 0x232;
909 pub const ERROR_INVALID_TARGET: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
910     | 0x233;
911 pub const ERROR_DRIVER_NONNATIVE: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
912     | 0x234;
913 pub const ERROR_IN_WOW64: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR | 0x235;
914 pub const ERROR_SET_SYSTEM_RESTORE_POINT: ::DWORD = ::APPLICATION_ERROR_MASK
915     | ::ERROR_SEVERITY_ERROR | 0x236;
916 pub const ERROR_SCE_DISABLED: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR | 0x238;
917 pub const ERROR_UNKNOWN_EXCEPTION: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
918     | 0x239;
919 pub const ERROR_PNP_REGISTRY_ERROR: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
920     | 0x23A;
921 pub const ERROR_REMOTE_REQUEST_UNSUPPORTED: ::DWORD = ::APPLICATION_ERROR_MASK
922     | ::ERROR_SEVERITY_ERROR | 0x23B;
923 pub const ERROR_NOT_AN_INSTALLED_OEM_INF: ::DWORD = ::APPLICATION_ERROR_MASK
924     | ::ERROR_SEVERITY_ERROR | 0x23C;
925 pub const ERROR_INF_IN_USE_BY_DEVICES: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
926     | 0x23D;
927 pub const ERROR_DI_FUNCTION_OBSOLETE: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
928     | 0x23E;
929 pub const ERROR_NO_AUTHENTICODE_CATALOG: ::DWORD = ::APPLICATION_ERROR_MASK
930     | ::ERROR_SEVERITY_ERROR | 0x23F;
931 pub const ERROR_AUTHENTICODE_DISALLOWED: ::DWORD = ::APPLICATION_ERROR_MASK
932     | ::ERROR_SEVERITY_ERROR | 0x240;
933 pub const ERROR_AUTHENTICODE_TRUSTED_PUBLISHER: ::DWORD = ::APPLICATION_ERROR_MASK
934     | ::ERROR_SEVERITY_ERROR | 0x241;
935 pub const ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED: ::DWORD = ::APPLICATION_ERROR_MASK
936     | ::ERROR_SEVERITY_ERROR | 0x242;
937 pub const ERROR_AUTHENTICODE_PUBLISHER_NOT_TRUSTED: ::DWORD = ::APPLICATION_ERROR_MASK
938     | ::ERROR_SEVERITY_ERROR | 0x243;
939 pub const ERROR_SIGNATURE_OSATTRIBUTE_MISMATCH: ::DWORD = ::APPLICATION_ERROR_MASK
940     | ::ERROR_SEVERITY_ERROR | 0x244;
941 pub const ERROR_ONLY_VALIDATE_VIA_AUTHENTICODE: ::DWORD = ::APPLICATION_ERROR_MASK
942     | ::ERROR_SEVERITY_ERROR | 0x245;
943 pub const ERROR_DEVICE_INSTALLER_NOT_READY: ::DWORD = ::APPLICATION_ERROR_MASK
944     | ::ERROR_SEVERITY_ERROR | 0x246;
945 pub const ERROR_DRIVER_STORE_ADD_FAILED: ::DWORD = ::APPLICATION_ERROR_MASK
946     | ::ERROR_SEVERITY_ERROR | 0x247;
947 pub const ERROR_DEVICE_INSTALL_BLOCKED: ::DWORD = ::APPLICATION_ERROR_MASK
948     | ::ERROR_SEVERITY_ERROR | 0x248;
949 pub const ERROR_DRIVER_INSTALL_BLOCKED: ::DWORD = ::APPLICATION_ERROR_MASK
950     | ::ERROR_SEVERITY_ERROR | 0x249;
951 pub const ERROR_WRONG_INF_TYPE: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
952     | 0x24A;
953 pub const ERROR_FILE_HASH_NOT_IN_CATALOG: ::DWORD = ::APPLICATION_ERROR_MASK
954     | ::ERROR_SEVERITY_ERROR | 0x24B;
955 pub const ERROR_DRIVER_STORE_DELETE_FAILED: ::DWORD = ::APPLICATION_ERROR_MASK
956     | ::ERROR_SEVERITY_ERROR | 0x24C;
957 pub const ERROR_UNRECOVERABLE_STACK_OVERFLOW: ::DWORD = ::APPLICATION_ERROR_MASK
958     | ::ERROR_SEVERITY_ERROR | 0x300;
959 pub const EXCEPTION_SPAPI_UNRECOVERABLE_STACK_OVERFLOW: ::DWORD =
960     ERROR_UNRECOVERABLE_STACK_OVERFLOW;
961 pub const ERROR_NO_DEFAULT_INTERFACE_DEVICE: ::DWORD = ERROR_NO_DEFAULT_DEVICE_INTERFACE;
962 pub const ERROR_INTERFACE_DEVICE_ACTIVE: ::DWORD = ERROR_DEVICE_INTERFACE_ACTIVE;
963 pub const ERROR_INTERFACE_DEVICE_REMOVED: ::DWORD = ERROR_DEVICE_INTERFACE_REMOVED;
964 pub const ERROR_NO_SUCH_INTERFACE_DEVICE: ::DWORD = ERROR_NO_SUCH_DEVICE_INTERFACE;
965 pub const ERROR_NOT_INSTALLED: ::DWORD = ::APPLICATION_ERROR_MASK | ::ERROR_SEVERITY_ERROR
966     | 0x1000;
967 pub const INFINFO_INF_SPEC_IS_HINF: ::DWORD = 1;
968 pub const INFINFO_INF_NAME_IS_ABSOLUTE: ::DWORD = 2;
969 pub const INFINFO_DEFAULT_SEARCH: ::DWORD = 3;
970 pub const INFINFO_REVERSE_DEFAULT_SEARCH: ::DWORD = 4;
971 pub const INFINFO_INF_PATH_LIST_SEARCH: ::DWORD = 5;
972 pub const FILE_COMPRESSION_NONE: ::UINT = 0;
973 pub const FILE_COMPRESSION_WINLZA: ::UINT = 1;
974 pub const FILE_COMPRESSION_MSZIP: ::UINT = 2;
975 pub const FILE_COMPRESSION_NTCAB: ::UINT = 3;
976 pub const SRCLIST_TEMPORARY: ::DWORD = 0x00000001;
977 pub const SRCLIST_NOBROWSE: ::DWORD = 0x00000002;
978 pub const SRCLIST_SYSTEM: ::DWORD = 0x00000010;
979 pub const SRCLIST_USER: ::DWORD = 0x00000020;
980 pub const SRCLIST_SYSIFADMIN: ::DWORD = 0x00000040;
981 pub const SRCLIST_SUBDIRS: ::DWORD = 0x00000100;
982 pub const SRCLIST_APPEND: ::DWORD = 0x00000200;
983 pub const SRCLIST_NOSTRIPPLATFORM: ::DWORD = 0x00000400;
984 pub const IDF_NOBROWSE: ::DWORD = 0x00000001;
985 pub const IDF_NOSKIP: ::DWORD = 0x00000002;
986 pub const IDF_NODETAILS: ::DWORD = 0x00000004;
987 pub const IDF_NOCOMPRESSED: ::DWORD = 0x00000008;
988 pub const IDF_CHECKFIRST: ::DWORD = 0x00000100;
989 pub const IDF_NOBEEP: ::DWORD = 0x00000200;
990 pub const IDF_NOFOREGROUND: ::DWORD = 0x00000400;
991 pub const IDF_WARNIFSKIP: ::DWORD = 0x00000800;
992 pub const IDF_NOREMOVABLEMEDIAPROMPT: ::DWORD = 0x00001000;
993 pub const IDF_USEDISKNAMEASPROMPT: ::DWORD = 0x00002000;
994 pub const IDF_OEMDISK: ::DWORD = 0x80000000;
995 pub const DPROMPT_SUCCESS: ::UINT = 0;
996 pub const DPROMPT_CANCEL: ::UINT = 1;
997 pub const DPROMPT_SKIPFILE: ::UINT = 2;
998 pub const DPROMPT_BUFFERTOOSMALL: ::UINT = 3;
999 pub const DPROMPT_OUTOFMEMORY: ::UINT = 4;
1000 pub const SETDIRID_NOT_FULL_PATH: ::DWORD = 0x00000001;
1001 pub const SRCINFO_PATH: ::UINT = 1;
1002 pub const SRCINFO_TAGFILE: ::UINT = 2;
1003 pub const SRCINFO_DESCRIPTION: ::UINT = 3;
1004 pub const SRCINFO_FLAGS: ::UINT = 4;
1005 pub const SRCINFO_TAGFILE2: ::UINT = 4;
1006 pub const SRC_FLAGS_CABFILE: ::UINT = 0x0010;
1007 pub const SP_COPY_DELETESOURCE: ::DWORD = 0x0000001;
1008 pub const SP_COPY_REPLACEONLY: ::DWORD = 0x0000002;
1009 pub const SP_COPY_NEWER: ::DWORD = 0x0000004;
1010 pub const SP_COPY_NEWER_OR_SAME: ::DWORD = SP_COPY_NEWER;
1011 pub const SP_COPY_NOOVERWRITE: ::DWORD = 0x0000008;
1012 pub const SP_COPY_NODECOMP: ::DWORD = 0x0000010;
1013 pub const SP_COPY_LANGUAGEAWARE: ::DWORD = 0x0000020;
1014 pub const SP_COPY_SOURCE_ABSOLUTE: ::DWORD = 0x0000040;
1015 pub const SP_COPY_SOURCEPATH_ABSOLUTE: ::DWORD = 0x0000080;
1016 pub const SP_COPY_IN_USE_NEEDS_REBOOT: ::DWORD = 0x0000100;
1017 pub const SP_COPY_FORCE_IN_USE: ::DWORD = 0x0000200;
1018 pub const SP_COPY_NOSKIP: ::DWORD = 0x0000400;
1019 pub const SP_FLAG_CABINETCONTINUATION: ::DWORD = 0x0000800;
1020 pub const SP_COPY_FORCE_NOOVERWRITE: ::DWORD = 0x0001000;
1021 pub const SP_COPY_FORCE_NEWER: ::DWORD = 0x0002000;
1022 pub const SP_COPY_WARNIFSKIP: ::DWORD = 0x0004000;
1023 pub const SP_COPY_NOBROWSE: ::DWORD = 0x0008000;
1024 pub const SP_COPY_NEWER_ONLY: ::DWORD = 0x0010000;
1025 pub const SP_COPY_RESERVED: ::DWORD = 0x0020000;
1026 pub const SP_COPY_OEMINF_CATALOG_ONLY: ::DWORD = 0x0040000;
1027 pub const SP_COPY_REPLACE_BOOT_FILE: ::DWORD = 0x0080000;
1028 pub const SP_COPY_NOPRUNE: ::DWORD = 0x0100000;
1029 pub const SP_COPY_OEM_F6_INF: ::DWORD = 0x0200000;
1030 pub const SP_COPY_ALREADYDECOMP: ::DWORD = 0x0400000;
1031 pub const SP_COPY_WINDOWS_SIGNED: ::DWORD = 0x1000000;
1032 pub const SP_COPY_PNPLOCKED: ::DWORD = 0x2000000;
1033 pub const SP_COPY_IN_USE_TRY_RENAME: ::DWORD = 0x4000000;
1034 pub const SP_COPY_INBOX_INF: ::DWORD = 0x8000000;
1035 pub const SP_COPY_HARDLINK: ::DWORD = 0x10000000;
1036 pub const SP_BACKUP_BACKUPPASS: ::DWORD = 0x00000001;
1037 pub const SP_BACKUP_DEMANDPASS: ::DWORD = 0x00000002;
1038 pub const SP_BACKUP_SPECIAL: ::DWORD = 0x00000004;
1039 pub const SP_BACKUP_BOOTFILE: ::DWORD = 0x00000008;
1040 pub const SPQ_SCAN_FILE_PRESENCE: ::DWORD = 0x00000001;
1041 pub const SPQ_SCAN_FILE_VALIDITY: ::DWORD = 0x00000002;
1042 pub const SPQ_SCAN_USE_CALLBACK: ::DWORD = 0x00000004;
1043 pub const SPQ_SCAN_USE_CALLBACKEX: ::DWORD = 0x00000008;
1044 pub const SPQ_SCAN_INFORM_USER: ::DWORD = 0x00000010;
1045 pub const SPQ_SCAN_PRUNE_COPY_QUEUE: ::DWORD = 0x00000020;
1046 pub const SPQ_SCAN_USE_CALLBACK_SIGNERINFO: ::DWORD = 0x00000040;
1047 pub const SPQ_SCAN_PRUNE_DELREN: ::DWORD = 0x00000080;
1048 pub const SPQ_SCAN_FILE_PRESENCE_WITHOUT_SOURCE: ::DWORD = 0x00000100;
1049 pub const SPQ_SCAN_FILE_COMPARISON: ::DWORD = 0x00000200;
1050 pub const SPQ_SCAN_ACTIVATE_DRP: ::DWORD = 0x00000400;
1051 pub const SPQ_DELAYED_COPY: ::DWORD = 0x00000001;
1052 pub const SPQ_FLAG_BACKUP_AWARE: ::DWORD = 0x00000001;
1053 pub const SPQ_FLAG_ABORT_IF_UNSIGNED: ::DWORD = 0x00000002;
1054 pub const SPQ_FLAG_FILES_MODIFIED: ::DWORD = 0x00000004;
1055 pub const SPQ_FLAG_DO_SHUFFLEMOVE: ::DWORD = 0x00000008;
1056 pub const SPQ_FLAG_VALID: ::DWORD = 0x0000000F;
1057 pub const SPOST_NONE: ::DWORD = 0;
1058 pub const SPOST_PATH: ::DWORD = 1;
1059 pub const SPOST_URL: ::DWORD = 2;
1060 pub const SPOST_MAX: ::DWORD = 3;
1061 pub const SUOI_FORCEDELETE: ::DWORD = 0x00000001;
1062 pub const SUOI_INTERNAL1: ::DWORD = 0x00000002;
1063 pub const SPDSL_IGNORE_DISK: ::UINT = 0x00000001;
1064 pub const SPDSL_DISALLOW_NEGATIVE_ADJUST: ::UINT = 0x00000002;
1065 pub const SPFILEQ_FILE_IN_USE: ::INT = 0x00000001;
1066 pub const SPFILEQ_REBOOT_RECOMMENDED: ::INT = 0x00000002;
1067 pub const SPFILEQ_REBOOT_IN_PROGRESS: ::INT = 0x00000004;
1068 pub const FLG_ADDREG_DELREG_BIT: ::DWORD = 0x00008000;
1069 pub const FLG_ADDREG_BINVALUETYPE: ::DWORD = 0x00000001;
1070 pub const FLG_ADDREG_NOCLOBBER: ::DWORD = 0x00000002;
1071 pub const FLG_ADDREG_DELVAL: ::DWORD = 0x00000004;
1072 pub const FLG_ADDREG_APPEND: ::DWORD = 0x00000008;
1073 pub const FLG_ADDREG_KEYONLY: ::DWORD = 0x00000010;
1074 pub const FLG_ADDREG_OVERWRITEONLY: ::DWORD = 0x00000020;
1075 pub const FLG_ADDREG_64BITKEY: ::DWORD = 0x00001000;
1076 pub const FLG_ADDREG_KEYONLY_COMMON: ::DWORD = 0x00002000;
1077 pub const FLG_ADDREG_32BITKEY: ::DWORD = 0x00004000;
1078 pub const FLG_ADDREG_TYPE_MASK: ::DWORD = 0xFFFF0000 | FLG_ADDREG_BINVALUETYPE;
1079 pub const FLG_ADDREG_TYPE_SZ: ::DWORD = 0x00000000;
1080 pub const FLG_ADDREG_TYPE_MULTI_SZ: ::DWORD = 0x00010000;
1081 pub const FLG_ADDREG_TYPE_EXPAND_SZ: ::DWORD = 0x00020000;
1082 pub const FLG_ADDREG_TYPE_BINARY: ::DWORD = 0x00000000 | FLG_ADDREG_BINVALUETYPE;
1083 pub const FLG_ADDREG_TYPE_DWORD: ::DWORD = 0x00010000 | FLG_ADDREG_BINVALUETYPE;
1084 pub const FLG_ADDREG_TYPE_NONE: ::DWORD = 0x00020000 | FLG_ADDREG_BINVALUETYPE;
1085 pub const FLG_DELREG_VALUE: ::DWORD = 0x00000000;
1086 pub const FLG_DELREG_TYPE_MASK: ::DWORD = FLG_ADDREG_TYPE_MASK;
1087 pub const FLG_DELREG_TYPE_SZ: ::DWORD = FLG_ADDREG_TYPE_SZ;
1088 pub const FLG_DELREG_TYPE_MULTI_SZ: ::DWORD = FLG_ADDREG_TYPE_MULTI_SZ;
1089 pub const FLG_DELREG_TYPE_EXPAND_SZ: ::DWORD = FLG_ADDREG_TYPE_EXPAND_SZ;
1090 pub const FLG_DELREG_TYPE_BINARY: ::DWORD = FLG_ADDREG_TYPE_BINARY;
1091 pub const FLG_DELREG_TYPE_DWORD: ::DWORD = FLG_ADDREG_TYPE_DWORD;
1092 pub const FLG_DELREG_TYPE_NONE: ::DWORD = FLG_ADDREG_TYPE_NONE;
1093 pub const FLG_DELREG_64BITKEY: ::DWORD = FLG_ADDREG_64BITKEY;
1094 pub const FLG_DELREG_KEYONLY_COMMON: ::DWORD = FLG_ADDREG_KEYONLY_COMMON;
1095 pub const FLG_DELREG_32BITKEY: ::DWORD = FLG_ADDREG_32BITKEY;
1096 pub const FLG_DELREG_OPERATION_MASK: ::DWORD = 0x000000FE;
1097 pub const FLG_DELREG_MULTI_SZ_DELSTRING: ::DWORD = FLG_DELREG_TYPE_MULTI_SZ | FLG_ADDREG_DELREG_BIT
1098     | 0x00000002;
1099 pub const FLG_BITREG_CLEARBITS: ::DWORD = 0x00000000;
1100 pub const FLG_BITREG_SETBITS: ::DWORD = 0x00000001;
1101 pub const FLG_BITREG_64BITKEY: ::DWORD = 0x00001000;
1102 pub const FLG_BITREG_32BITKEY: ::DWORD = 0x00004000;
1103 pub const FLG_INI2REG_64BITKEY: ::DWORD = 0x00001000;
1104 pub const FLG_INI2REG_32BITKEY: ::DWORD = 0x00004000;
1105 pub const FLG_REGSVR_DLLREGISTER: ::DWORD = 0x00000001;
1106 pub const FLG_REGSVR_DLLINSTALL: ::DWORD = 0x00000002;
1107 pub const FLG_PROFITEM_CURRENTUSER: ::DWORD = 0x00000001;
1108 pub const FLG_PROFITEM_DELETE: ::DWORD = 0x00000002;
1109 pub const FLG_PROFITEM_GROUP: ::DWORD = 0x00000004;
1110 pub const FLG_PROFITEM_CSIDL: ::DWORD = 0x00000008;
1111 pub const FLG_ADDPROPERTY_NOCLOBBER: ::DWORD = 0x00000001;
1112 pub const FLG_ADDPROPERTY_OVERWRITEONLY: ::DWORD = 0x00000002;
1113 pub const FLG_ADDPROPERTY_APPEND: ::DWORD = 0x00000004;
1114 pub const FLG_ADDPROPERTY_OR: ::DWORD = 0x00000008;
1115 pub const FLG_ADDPROPERTY_AND: ::DWORD = 0x00000010;
1116 pub const FLG_DELPROPERTY_MULTI_SZ_DELSTRING: ::DWORD = 0x00000001;
1117 pub const SPINST_LOGCONFIG: ::UINT = 0x00000001;
1118 pub const SPINST_INIFILES: ::UINT = 0x00000002;
1119 pub const SPINST_REGISTRY: ::UINT = 0x00000004;
1120 pub const SPINST_INI2REG: ::UINT = 0x00000008;
1121 pub const SPINST_FILES: ::UINT = 0x00000010;
1122 pub const SPINST_BITREG: ::UINT = 0x00000020;
1123 pub const SPINST_REGSVR: ::UINT = 0x00000040;
1124 pub const SPINST_UNREGSVR: ::UINT = 0x00000080;
1125 pub const SPINST_PROFILEITEMS: ::UINT = 0x00000100;
1126 pub const SPINST_COPYINF: ::UINT = 0x00000200;
1127 pub const SPINST_PROPERTIES: ::UINT = 0x00000400;
1128 pub const SPINST_ALL: ::UINT = 0x000007ff;
1129 pub const SPINST_SINGLESECTION: ::UINT = 0x00010000;
1130 pub const SPINST_LOGCONFIG_IS_FORCED: ::UINT = 0x00020000;
1131 pub const SPINST_LOGCONFIGS_ARE_OVERRIDES: ::UINT = 0x00040000;
1132 pub const SPINST_REGISTERCALLBACKAWARE: ::UINT = 0x00080000;
1133 pub const SPINST_DEVICEINSTALL: ::UINT = 0x00100000;
1134 pub const SPSVCINST_TAGTOFRONT: ::DWORD = 0x00000001;
1135 pub const SPSVCINST_ASSOCSERVICE: ::DWORD = 0x00000002;
1136 pub const SPSVCINST_DELETEEVENTLOGENTRY: ::DWORD = 0x00000004;
1137 pub const SPSVCINST_NOCLOBBER_DISPLAYNAME: ::DWORD = 0x00000008;
1138 pub const SPSVCINST_NOCLOBBER_STARTTYPE: ::DWORD = 0x00000010;
1139 pub const SPSVCINST_NOCLOBBER_ERRORCONTROL: ::DWORD = 0x00000020;
1140 pub const SPSVCINST_NOCLOBBER_LOADORDERGROUP: ::DWORD = 0x00000040;
1141 pub const SPSVCINST_NOCLOBBER_DEPENDENCIES: ::DWORD = 0x00000080;
1142 pub const SPSVCINST_NOCLOBBER_DESCRIPTION: ::DWORD = 0x00000100;
1143 pub const SPSVCINST_STOPSERVICE: ::DWORD = 0x00000200;
1144 pub const SPSVCINST_CLOBBER_SECURITY: ::DWORD = 0x00000400;
1145 pub const SPSVCINST_STARTSERVICE: ::DWORD = 0x00000800;
1146 pub const SPSVCINST_NOCLOBBER_REQUIREDPRIVILEGES: ::DWORD = 0x00001000;
1147 pub type HSPFILELOG = ::PVOID;
1148 pub const SPFILELOG_SYSTEMLOG: ::DWORD = 0x00000001;
1149 pub const SPFILELOG_FORCENEW: ::DWORD = 0x00000002;
1150 pub const SPFILELOG_QUERYONLY: ::DWORD = 0x00000004;
1151 pub const SPFILELOG_OEMFILE: ::DWORD = 0x00000001;
1152 ENUM!{enum SetupFileLogInfo {
1153     SetupFileLogSourceFilename,
1154     SetupFileLogChecksum,
1155     SetupFileLogDiskTagfile,
1156     SetupFileLogDiskDescription,
1157     SetupFileLogOtherInfo,
1158     SetupFileLogMax,
1159 }}
1160 pub type LogSeverity = ::DWORD;
1161 pub const LogSevInformation: LogSeverity = 0x00000000;
1162 pub const LogSevWarning: LogSeverity = 0x00000001;
1163 pub const LogSevError: LogSeverity = 0x00000002;
1164 pub const LogSevFatalError: LogSeverity = 0x00000003;
1165 pub const LogSevMaximum: LogSeverity = 0x00000004;
1166 pub const DICD_GENERATE_ID: ::DWORD = 0x00000001;
1167 pub const DICD_INHERIT_CLASSDRVS: ::DWORD = 0x00000002;
1168 pub const DIOD_INHERIT_CLASSDRVS: ::DWORD = 0x00000002;
1169 pub const DIOD_CANCEL_REMOVE: ::DWORD = 0x00000004;
1170 pub const DIODI_NO_ADD: ::DWORD = 0x00000001;
1171 pub const SPRDI_FIND_DUPS: ::DWORD = 0x00000001;
1172 pub const SPDIT_NODRIVER: ::DWORD = 0x00000000;
1173 pub const SPDIT_CLASSDRIVER: ::DWORD = 0x00000001;
1174 pub const SPDIT_COMPATDRIVER: ::DWORD = 0x00000002;
1175 pub const DIGCF_DEFAULT: ::DWORD = 0x00000001;
1176 pub const DIGCF_PRESENT: ::DWORD = 0x00000002;
1177 pub const DIGCF_ALLCLASSES: ::DWORD = 0x00000004;
1178 pub const DIGCF_PROFILE: ::DWORD = 0x00000008;
1179 pub const DIGCF_DEVICEINTERFACE: ::DWORD = 0x00000010;
1180 pub const DIBCI_NOINSTALLCLASS: ::DWORD = 0x00000001;
1181 pub const DIBCI_NODISPLAYCLASS: ::DWORD = 0x00000002;
1182 pub const DIOCR_INSTALLER: ::DWORD = 0x00000001;
1183 pub const DIOCR_INTERFACE: ::DWORD = 0x00000002;
1184 pub const DIREG_DEV: ::DWORD = 0x00000001;
1185 pub const DIREG_DRV: ::DWORD = 0x00000002;
1186 pub const DIREG_BOTH: ::DWORD = 0x00000004;
1187 pub const DICLASSPROP_INSTALLER: ::DWORD = 0x00000001;
1188 pub const DICLASSPROP_INTERFACE: ::DWORD = 0x00000002;
1189 pub const SPDRP_DEVICEDESC: ::DWORD = 0x00000000;
1190 pub const SPDRP_HARDWAREID: ::DWORD = 0x00000001;
1191 pub const SPDRP_COMPATIBLEIDS: ::DWORD = 0x00000002;
1192 pub const SPDRP_UNUSED0: ::DWORD = 0x00000003;
1193 pub const SPDRP_SERVICE: ::DWORD = 0x00000004;
1194 pub const SPDRP_UNUSED1: ::DWORD = 0x00000005;
1195 pub const SPDRP_UNUSED2: ::DWORD = 0x00000006;
1196 pub const SPDRP_CLASS: ::DWORD = 0x00000007;
1197 pub const SPDRP_CLASSGUID: ::DWORD = 0x00000008;
1198 pub const SPDRP_DRIVER: ::DWORD = 0x00000009;
1199 pub const SPDRP_CONFIGFLAGS: ::DWORD = 0x0000000A;
1200 pub const SPDRP_MFG: ::DWORD = 0x0000000B;
1201 pub const SPDRP_FRIENDLYNAME: ::DWORD = 0x0000000C;
1202 pub const SPDRP_LOCATION_INFORMATION: ::DWORD = 0x0000000D;
1203 pub const SPDRP_PHYSICAL_DEVICE_OBJECT_NAME: ::DWORD = 0x0000000E;
1204 pub const SPDRP_CAPABILITIES: ::DWORD = 0x0000000F;
1205 pub const SPDRP_UI_NUMBER: ::DWORD = 0x00000010;
1206 pub const SPDRP_UPPERFILTERS: ::DWORD = 0x00000011;
1207 pub const SPDRP_LOWERFILTERS: ::DWORD = 0x00000012;
1208 pub const SPDRP_BUSTYPEGUID: ::DWORD = 0x00000013;
1209 pub const SPDRP_LEGACYBUSTYPE: ::DWORD = 0x00000014;
1210 pub const SPDRP_BUSNUMBER: ::DWORD = 0x00000015;
1211 pub const SPDRP_ENUMERATOR_NAME: ::DWORD = 0x00000016;
1212 pub const SPDRP_SECURITY: ::DWORD = 0x00000017;
1213 pub const SPDRP_SECURITY_SDS: ::DWORD = 0x00000018;
1214 pub const SPDRP_DEVTYPE: ::DWORD = 0x00000019;
1215 pub const SPDRP_EXCLUSIVE: ::DWORD = 0x0000001A;
1216 pub const SPDRP_CHARACTERISTICS: ::DWORD = 0x0000001B;
1217 pub const SPDRP_ADDRESS: ::DWORD = 0x0000001C;
1218 pub const SPDRP_UI_NUMBER_DESC_FORMAT: ::DWORD = 0x0000001D;
1219 pub const SPDRP_DEVICE_POWER_DATA: ::DWORD = 0x0000001E;
1220 pub const SPDRP_REMOVAL_POLICY: ::DWORD = 0x0000001F;
1221 pub const SPDRP_REMOVAL_POLICY_HW_DEFAULT: ::DWORD = 0x00000020;
1222 pub const SPDRP_REMOVAL_POLICY_OVERRIDE: ::DWORD = 0x00000021;
1223 pub const SPDRP_INSTALL_STATE: ::DWORD = 0x00000022;
1224 pub const SPDRP_LOCATION_PATHS: ::DWORD = 0x00000023;
1225 pub const SPDRP_BASE_CONTAINERID: ::DWORD = 0x00000024;
1226 pub const SPDRP_MAXIMUM_PROPERTY: ::DWORD = 0x00000025;
1227 pub const SPCRP_UPPERFILTERS: ::DWORD = 0x00000011;
1228 pub const SPCRP_LOWERFILTERS: ::DWORD = 0x00000012;
1229 pub const SPCRP_SECURITY: ::DWORD = 0x00000017;
1230 pub const SPCRP_SECURITY_SDS: ::DWORD = 0x00000018;
1231 pub const SPCRP_DEVTYPE: ::DWORD = 0x00000019;
1232 pub const SPCRP_EXCLUSIVE: ::DWORD = 0x0000001A;
1233 pub const SPCRP_CHARACTERISTICS: ::DWORD = 0x0000001B;
1234 pub const SPCRP_MAXIMUM_PROPERTY: ::DWORD = 0x0000001C;
1235 pub const DMI_MASK: ::DWORD = 0x00000001;
1236 pub const DMI_BKCOLOR: ::DWORD = 0x00000002;
1237 pub const DMI_USERECT: ::DWORD = 0x00000004;
1238 pub const DIGCDP_FLAG_BASIC: ::DWORD = 0x00000001;
1239 pub const DIGCDP_FLAG_ADVANCED: ::DWORD = 0x00000002;
1240 pub const DIGCDP_FLAG_REMOTE_BASIC: ::DWORD = 0x00000003;
1241 pub const DIGCDP_FLAG_REMOTE_ADVANCED: ::DWORD = 0x00000004;
1242 pub const IDI_RESOURCEFIRST: ::c_int = 159;
1243 pub const IDI_RESOURCE: ::c_int = 159;
1244 pub const IDI_RESOURCELAST: ::c_int = 161;
1245 pub const IDI_RESOURCEOVERLAYFIRST: ::c_int = 161;
1246 pub const IDI_RESOURCEOVERLAYLAST: ::c_int = 161;
1247 pub const IDI_CONFLICT: ::c_int = 161;
1248 pub const IDI_CLASSICON_OVERLAYFIRST: ::c_int = 500;
1249 pub const IDI_CLASSICON_OVERLAYLAST: ::c_int = 502;
1250 pub const IDI_PROBLEM_OVL: ::c_int = 500;
1251 pub const IDI_DISABLED_OVL: ::c_int = 501;
1252 pub const IDI_FORCED_OVL: ::c_int = 502;
1253 pub const SPWPT_SELECTDEVICE: ::DWORD = 0x00000001;
1254 pub const SPWP_USE_DEVINFO_DATA: ::DWORD = 0x00000001;
1255 STRUCT!{nodebug struct SP_INF_SIGNER_INFO_V1_A {
1256     cbSize: ::DWORD,
1257     CatalogFile: [::CHAR; ::MAX_PATH],
1258     DigitalSigner: [::CHAR; ::MAX_PATH],
1259     DigitalSignerVersion: [::CHAR; ::MAX_PATH],
1260 }}
1261 pub type PSP_INF_SIGNER_INFO_V1_A = *mut SP_INF_SIGNER_INFO_V1_A;
1262 STRUCT!{nodebug struct SP_INF_SIGNER_INFO_V1_W {
1263     cbSize: ::DWORD,
1264     CatalogFile: [::WCHAR; ::MAX_PATH],
1265     DigitalSigner: [::WCHAR; ::MAX_PATH],
1266     DigitalSignerVersion: [::WCHAR; ::MAX_PATH],
1267 }}
1268 pub type PSP_INF_SIGNER_INFO_V1_W = *mut SP_INF_SIGNER_INFO_V1_W;
1269 STRUCT!{nodebug struct SP_INF_SIGNER_INFO_V2_A {
1270     cbSize: ::DWORD,
1271     CatalogFile: [::CHAR; ::MAX_PATH],
1272     DigitalSigner: [::CHAR; ::MAX_PATH],
1273     DigitalSignerVersion: [::CHAR; ::MAX_PATH],
1274     SignerScore: ::DWORD,
1275 }}
1276 pub type PSP_INF_SIGNER_INFO_V2_A = *mut SP_INF_SIGNER_INFO_V2_A;
1277 STRUCT!{nodebug struct SP_INF_SIGNER_INFO_V2_W {
1278     cbSize: ::DWORD,
1279     CatalogFile: [::WCHAR; ::MAX_PATH],
1280     DigitalSigner: [::WCHAR; ::MAX_PATH],
1281     DigitalSignerVersion: [::WCHAR; ::MAX_PATH],
1282     SignerScore: ::DWORD,
1283 }}
1284 pub type PSP_INF_SIGNER_INFO_V2_W = *mut SP_INF_SIGNER_INFO_V2_W;
1285 pub type SP_INF_SIGNER_INFO_A = SP_INF_SIGNER_INFO_V2_A;
1286 pub type PSP_INF_SIGNER_INFO_A = PSP_INF_SIGNER_INFO_V2_A;
1287 pub type SP_INF_SIGNER_INFO_W = SP_INF_SIGNER_INFO_V2_W;
1288 pub type PSP_INF_SIGNER_INFO_W = PSP_INF_SIGNER_INFO_V2_W;
1289 pub const SIGNERSCORE_UNKNOWN: ::DWORD = 0xFF000000;
1290 pub const SIGNERSCORE_W9X_SUSPECT: ::DWORD = 0xC0000000;
1291 pub const SIGNERSCORE_UNSIGNED: ::DWORD = 0x80000000;
1292 pub const SIGNERSCORE_AUTHENTICODE: ::DWORD = 0x0F000000;
1293 pub const SIGNERSCORE_WHQL: ::DWORD = 0x0D000005;
1294 pub const SIGNERSCORE_UNCLASSIFIED: ::DWORD = 0x0D000004;
1295 pub const SIGNERSCORE_INBOX: ::DWORD = 0x0D000003;
1296 pub const SIGNERSCORE_LOGO_STANDARD: ::DWORD = 0x0D000002;
1297 pub const SIGNERSCORE_LOGO_PREMIUM: ::DWORD = 0x0D000001;
1298 pub const SIGNERSCORE_MASK: ::DWORD = 0xFF000000;
1299 pub const SIGNERSCORE_SIGNED_MASK: ::DWORD = 0xF0000000;
1300 pub const DICUSTOMDEVPROP_MERGE_MULTISZ: ::DWORD = 0x00000001;
1301 pub const SCWMI_CLOBBER_SECURITY: ::DWORD = 0x00000001;
1302