1 // Copyright © 2016-2017 winapi-rs developers
2 // Licensed under the Apache License, Version 2.0
3 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
4 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
5 // All files in the project carrying such notice may not be copied, modified, or distributed
6 // except according to those terms.
7 //! Public header file for Windows NT Setup and Device Installer services Dll.
8 use ctypes::c_int;
9 use shared::basetsd::{DWORD_PTR, UINT_PTR, ULONG_PTR};
10 use shared::devpropdef::{DEVPROPKEY, DEVPROPTYPE};
11 use shared::guiddef::{GUID, LPGUID};
12 use shared::minwindef::{
13     BOOL, BYTE, DWORD, FILETIME, HINSTANCE, HKEY, INT, LPARAM, LPCVOID, LPDWORD, MAX_PATH, PBOOL,
14     PBYTE, PDWORD, PINT, PUINT, UINT, USHORT, WORD,
15 };
16 use shared::windef::{HDC, HICON, HWND, RECT};
17 use um::commctrl::HIMAGELIST;
18 use um::prsht::{HPROPSHEETPAGE, LPPROPSHEETHEADERA, LPPROPSHEETHEADERW};
19 use um::spapidef::SP_LOG_TOKEN;
20 use um::winnt::{
21     ANYSIZE_ARRAY, APPLICATION_ERROR_MASK, CHAR, DWORDLONG, ERROR_SEVERITY_ERROR, HANDLE, LONG,
22     LONGLONG, LPCSTR, LPCWSTR, PCSTR, PCWSTR, PSTR, PVOID, PWSTR, WCHAR,
23 };
24 use um::winreg::REGSAM;
25 pub const LINE_LEN: usize = 256;
26 pub const MAX_INF_STRING_LENGTH: usize = 4096;
27 pub const MAX_INF_SECTION_NAME_LENGTH: usize = 255;
28 pub const MAX_TITLE_LEN: usize = 60;
29 pub const MAX_INSTRUCTION_LEN: usize = 256;
30 pub const MAX_LABEL_LEN: usize = 30;
31 pub const MAX_SERVICE_NAME_LEN: usize = 256;
32 pub const MAX_SUBTITLE_LEN: usize = 256;
33 pub const SP_MAX_MACHINENAME_LENGTH: usize = MAX_PATH + 3;
34 pub type HINF = PVOID;
35 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct INFCONTEXT {
36     Inf: PVOID,
37     CurrentInf: PVOID,
38     Section: UINT,
39     Line: UINT,
40 }}
41 pub type PINFCONTEXT = *mut INFCONTEXT;
42 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INF_INFORMATION {
43     InfStyle: DWORD,
44     InfCount: DWORD,
45     VersionData: [BYTE; ANYSIZE_ARRAY],
46 }}
47 pub type PSP_INF_INFORMATION = *mut SP_INF_INFORMATION;
48 UNION!{#[cfg_attr(target_arch = "x86", repr(packed))] union SP_ALTPLATFORM_INFO_V3_u {
49     [u16; 1],
50     Reserved Reserved_mut: WORD,
51     Flags Flags_mut: WORD,
52 }}
53 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ALTPLATFORM_INFO_V3 {
54     cbSize: DWORD,
55     Platform: DWORD,
56     MajorVersion: DWORD,
57     MinorVersion: DWORD,
58     ProcessorArchitecture: WORD,
59     u: SP_ALTPLATFORM_INFO_V3_u,
60     FirstValidatedMajorVersion: DWORD,
61     FirstValidatedMinorVersion: DWORD,
62     ProductType: BYTE,
63     SuiteMask: WORD,
64     BuildNumber: DWORD,
65 }}
66 pub type PSP_ALTPLATFORM_INFO_V3 = *mut SP_ALTPLATFORM_INFO_V3;
67 UNION!{#[cfg_attr(target_arch = "x86", repr(packed))] union SP_ALTPLATFORM_INFO_V2_u {
68     [u16; 1],
69     Reserved Reserved_mut: WORD,
70     Flags Flags_mut: WORD,
71 }}
72 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ALTPLATFORM_INFO_V2 {
73     cbSize: DWORD,
74     Platform: DWORD,
75     MajorVersion: DWORD,
76     MinorVersion: DWORD,
77     ProcessorArchitecture: WORD,
78     u: SP_ALTPLATFORM_INFO_V2_u,
79     FirstValidatedMajorVersion: DWORD,
80     FirstValidatedMinorVersion: DWORD,
81 }}
82 pub type PSP_ALTPLATFORM_INFO_V2 = *mut SP_ALTPLATFORM_INFO_V2;
83 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ALTPLATFORM_INFO_V1 {
84     cbSize: DWORD,
85     Platform: DWORD,
86     MajorVersion: DWORD,
87     MinorVersion: DWORD,
88     ProcessorArchitecture: WORD,
89     Reserved: WORD,
90 }}
91 pub type PSP_ALTPLATFORM_INFO_V1 = *mut SP_ALTPLATFORM_INFO_V1;
92 pub type SP_ALTPLATFORM_INFO = SP_ALTPLATFORM_INFO_V2;
93 pub type PSP_ALTPLATFORM_INFO = PSP_ALTPLATFORM_INFO_V2;
94 pub const SP_ALTPLATFORM_FLAGS_VERSION_RANGE: WORD = 0x0001;
95 pub const SP_ALTPLATFORM_FLAGS_SUITE_MASK: WORD = 0x0002;
96 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ORIGINAL_FILE_INFO_A {
97     cbSize: DWORD,
98     OriginalInfName: [CHAR; MAX_PATH],
99     OriginalCatalogName: [CHAR; MAX_PATH],
100 }}
101 pub type PSP_ORIGINAL_FILE_INFO_A = *mut SP_ORIGINAL_FILE_INFO_A;
102 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ORIGINAL_FILE_INFO_W {
103     cbSize: DWORD,
104     OriginalInfName: [WCHAR; MAX_PATH],
105     OriginalCatalogName: [WCHAR; MAX_PATH],
106 }}
107 pub type PSP_ORIGINAL_FILE_INFO_W = *mut SP_ORIGINAL_FILE_INFO_W;
108 pub const INF_STYLE_NONE: DWORD = 0x00000000;
109 pub const INF_STYLE_OLDNT: DWORD = 0x00000001;
110 pub const INF_STYLE_WIN4: DWORD = 0x00000002;
111 pub const INF_STYLE_CACHE_ENABLE: DWORD = 0x00000010;
112 pub const INF_STYLE_CACHE_DISABLE: DWORD = 0x00000020;
113 pub const INF_STYLE_CACHE_IGNORE: DWORD = 0x00000040;
114 pub const DIRID_ABSOLUTE: DWORD = -1i32 as u32;
115 pub const DIRID_ABSOLUTE_16BIT: DWORD = 0xffff;
116 pub const DIRID_NULL: DWORD = 0;
117 pub const DIRID_SRCPATH: DWORD = 1;
118 pub const DIRID_WINDOWS: DWORD = 10;
119 pub const DIRID_SYSTEM: DWORD = 11;
120 pub const DIRID_DRIVERS: DWORD = 12;
121 pub const DIRID_IOSUBSYS: DWORD = DIRID_DRIVERS;
122 pub const DIRID_DRIVER_STORE: DWORD = 13;
123 pub const DIRID_INF: DWORD = 17;
124 pub const DIRID_HELP: DWORD = 18;
125 pub const DIRID_FONTS: DWORD = 20;
126 pub const DIRID_VIEWERS: DWORD = 21;
127 pub const DIRID_COLOR: DWORD = 23;
128 pub const DIRID_APPS: DWORD = 24;
129 pub const DIRID_SHARED: DWORD = 25;
130 pub const DIRID_BOOT: DWORD = 30;
131 pub const DIRID_SYSTEM16: DWORD = 50;
132 pub const DIRID_SPOOL: DWORD = 51;
133 pub const DIRID_SPOOLDRIVERS: DWORD = 52;
134 pub const DIRID_USERPROFILE: DWORD = 53;
135 pub const DIRID_LOADER: DWORD = 54;
136 pub const DIRID_PRINTPROCESSOR: DWORD = 55;
137 pub const DIRID_DEFAULT: DWORD = DIRID_SYSTEM;
138 pub const DIRID_COMMON_STARTMENU: DWORD = 16406;
139 pub const DIRID_COMMON_PROGRAMS: DWORD = 16407;
140 pub const DIRID_COMMON_STARTUP: DWORD = 16408;
141 pub const DIRID_COMMON_DESKTOPDIRECTORY: DWORD = 16409;
142 pub const DIRID_COMMON_FAVORITES: DWORD = 16415;
143 pub const DIRID_COMMON_APPDATA: DWORD = 16419;
144 pub const DIRID_PROGRAM_FILES: DWORD = 16422;
145 pub const DIRID_SYSTEM_X86: DWORD = 16425;
146 pub const DIRID_PROGRAM_FILES_X86: DWORD = 16426;
147 pub const DIRID_PROGRAM_FILES_COMMON: DWORD = 16427;
148 pub const DIRID_PROGRAM_FILES_COMMONX86: DWORD = 16428;
149 pub const DIRID_COMMON_TEMPLATES: DWORD = 16429;
150 pub const DIRID_COMMON_DOCUMENTS: DWORD = 16430;
151 pub const DIRID_USER: DWORD = 0x8000;
152 FN!{stdcall PSP_FILE_CALLBACK_A(
153     Context: PVOID,
154     Notification: UINT,
155     Param1: UINT_PTR,
156     Param2: UINT_PTR,
157 ) -> UINT}
158 FN!{stdcall PSP_FILE_CALLBACK_W(
159     Context: PVOID,
160     Notification: UINT,
161     Param1: UINT_PTR,
162     Param2: UINT_PTR,
163 ) -> UINT}
164 pub const SPFILENOTIFY_STARTQUEUE: UINT = 0x00000001;
165 pub const SPFILENOTIFY_ENDQUEUE: UINT = 0x00000002;
166 pub const SPFILENOTIFY_STARTSUBQUEUE: UINT = 0x00000003;
167 pub const SPFILENOTIFY_ENDSUBQUEUE: UINT = 0x00000004;
168 pub const SPFILENOTIFY_STARTDELETE: UINT = 0x00000005;
169 pub const SPFILENOTIFY_ENDDELETE: UINT = 0x00000006;
170 pub const SPFILENOTIFY_DELETEERROR: UINT = 0x00000007;
171 pub const SPFILENOTIFY_STARTRENAME: UINT = 0x00000008;
172 pub const SPFILENOTIFY_ENDRENAME: UINT = 0x00000009;
173 pub const SPFILENOTIFY_RENAMEERROR: UINT = 0x0000000a;
174 pub const SPFILENOTIFY_STARTCOPY: UINT = 0x0000000b;
175 pub const SPFILENOTIFY_ENDCOPY: UINT = 0x0000000c;
176 pub const SPFILENOTIFY_COPYERROR: UINT = 0x0000000d;
177 pub const SPFILENOTIFY_NEEDMEDIA: UINT = 0x0000000e;
178 pub const SPFILENOTIFY_QUEUESCAN: UINT = 0x0000000f;
179 pub const SPFILENOTIFY_CABINETINFO: UINT = 0x00000010;
180 pub const SPFILENOTIFY_FILEINCABINET: UINT = 0x00000011;
181 pub const SPFILENOTIFY_NEEDNEWCABINET: UINT = 0x00000012;
182 pub const SPFILENOTIFY_FILEEXTRACTED: UINT = 0x00000013;
183 pub const SPFILENOTIFY_FILEOPDELAYED: UINT = 0x00000014;
184 pub const SPFILENOTIFY_STARTBACKUP: UINT = 0x00000015;
185 pub const SPFILENOTIFY_BACKUPERROR: UINT = 0x00000016;
186 pub const SPFILENOTIFY_ENDBACKUP: UINT = 0x00000017;
187 pub const SPFILENOTIFY_QUEUESCAN_EX: UINT = 0x00000018;
188 pub const SPFILENOTIFY_STARTREGISTRATION: UINT = 0x00000019;
189 pub const SPFILENOTIFY_ENDREGISTRATION: UINT = 0x00000020;
190 pub const SPFILENOTIFY_QUEUESCAN_SIGNERINFO: UINT = 0x00000040;
191 pub const SPFILENOTIFY_LANGMISMATCH: UINT = 0x00010000;
192 pub const SPFILENOTIFY_TARGETEXISTS: UINT = 0x00020000;
193 pub const SPFILENOTIFY_TARGETNEWER: UINT = 0x00040000;
194 pub const FILEOP_COPY: UINT = 0;
195 pub const FILEOP_RENAME: UINT = 1;
196 pub const FILEOP_DELETE: UINT = 2;
197 pub const FILEOP_BACKUP: UINT = 3;
198 pub const FILEOP_ABORT: UINT = 0;
199 pub const FILEOP_DOIT: UINT = 1;
200 pub const FILEOP_SKIP: UINT = 2;
201 pub const FILEOP_RETRY: UINT = FILEOP_DOIT;
202 pub const FILEOP_NEWPATH: UINT = 4;
203 pub const COPYFLG_WARN_IF_SKIP: UINT = 0x00000001;
204 pub const COPYFLG_NOSKIP: UINT = 0x00000002;
205 pub const COPYFLG_NOVERSIONCHECK: UINT = 0x00000004;
206 pub const COPYFLG_FORCE_FILE_IN_USE: UINT = 0x00000008;
207 pub const COPYFLG_NO_OVERWRITE: UINT = 0x00000010;
208 pub const COPYFLG_NO_VERSION_DIALOG: UINT = 0x00000020;
209 pub const COPYFLG_OVERWRITE_OLDER_ONLY: UINT = 0x00000040;
210 pub const COPYFLG_PROTECTED_WINDOWS_DRIVER_FILE: UINT = 0x00000100;
211 pub const COPYFLG_REPLACEONLY: UINT = 0x00000400;
212 pub const COPYFLG_NODECOMP: UINT = 0x00000800;
213 pub const COPYFLG_REPLACE_BOOT_FILE: UINT = 0x00001000;
214 pub const COPYFLG_NOPRUNE: UINT = 0x00002000;
215 pub const COPYFLG_IN_USE_TRY_RENAME: UINT = 0x00004000;
216 pub const DELFLG_IN_USE: UINT = 0x00000001;
217 pub const DELFLG_IN_USE1: UINT = 0x00010000;
218 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILEPATHS_A {
219     Target: PCSTR,
220     Source: PCSTR,
221     Win32Error: UINT,
222     Flags: DWORD,
223 }}
224 pub type PFILEPATHS_A = *mut FILEPATHS_A;
225 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILEPATHS_W {
226     Target: PCWSTR,
227     Source: PCWSTR,
228     Win32Error: UINT,
229     Flags: DWORD,
230 }}
231 pub type PFILEPATHS_W = *mut FILEPATHS_W;
232 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILEPATHS_SIGNERINFO_A {
233     Target: PCSTR,
234     Source: PCSTR,
235     Win32Error: UINT,
236     Flags: DWORD,
237     DigitalSigner: PCSTR,
238     Version: PCSTR,
239     CatalogFile: PCSTR,
240 }}
241 pub type PFILEPATHS_SIGNERINFO_A = *mut FILEPATHS_SIGNERINFO_A;
242 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILEPATHS_SIGNERINFO_W {
243     Target: PCWSTR,
244     Source: PCWSTR,
245     Win32Error: UINT,
246     Flags: DWORD,
247     DigitalSigner: PCWSTR,
248     Version: PCWSTR,
249     CatalogFile: PCWSTR,
250 }}
251 pub type PFILEPATHS_SIGNERINFO_W = *mut FILEPATHS_SIGNERINFO_W;
252 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SOURCE_MEDIA_A {
253     Reserved: PCSTR,
254     Tagfile: PCSTR,
255     Description: PCSTR,
256     SourcePath: PCSTR,
257     SourceFile: PCSTR,
258     Flags: DWORD,
259 }}
260 pub type PSOURCE_MEDIA_A = *mut SOURCE_MEDIA_A;
261 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SOURCE_MEDIA_W {
262     Reserved: PCWSTR,
263     Tagfile: PCWSTR,
264     Description: PCWSTR,
265     SourcePath: PCWSTR,
266     SourceFile: PCWSTR,
267     Flags: DWORD,
268 }}
269 pub type PSOURCE_MEDIA_W = *mut SOURCE_MEDIA_W;
270 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct CABINET_INFO_A {
271     CabinetPath: PCSTR,
272     CabinetFile: PCSTR,
273     DiskName: PCSTR,
274     SetId: USHORT,
275     CabinetNumber: USHORT,
276 }}
277 pub type PCABINET_INFO_A = *mut CABINET_INFO_A;
278 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct CABINET_INFO_W {
279     CabinetPath: PCWSTR,
280     CabinetFile: PCWSTR,
281     DiskName: PCWSTR,
282     SetId: USHORT,
283     CabinetNumber: USHORT,
284 }}
285 pub type PCABINET_INFO_W = *mut CABINET_INFO_W;
286 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILE_IN_CABINET_INFO_A {
287     NameInCabinet: PCSTR,
288     FileSize: DWORD,
289     Win32Error: DWORD,
290     DosDate: WORD,
291     DosTime: WORD,
292     DosAttribs: WORD,
293     FullTargetName: [CHAR; MAX_PATH],
294 }}
295 pub type PFILE_IN_CABINET_INFO_A = *mut FILE_IN_CABINET_INFO_A;
296 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILE_IN_CABINET_INFO_W {
297     NameInCabinet: PCWSTR,
298     FileSize: DWORD,
299     Win32Error: DWORD,
300     DosDate: WORD,
301     DosTime: WORD,
302     DosAttribs: WORD,
303     FullTargetName: [WCHAR; MAX_PATH],
304 }}
305 pub type PFILE_IN_CABINET_INFO_W = *mut FILE_IN_CABINET_INFO_W;
306 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_REGISTER_CONTROL_STATUSA {
307     cbSize: DWORD,
308     FileName: PCSTR,
309     Win32Error: DWORD,
310     FailureCode: DWORD,
311 }}
312 pub type PSP_REGISTER_CONTROL_STATUSA = *mut SP_REGISTER_CONTROL_STATUSA;
313 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_REGISTER_CONTROL_STATUSW {
314     cbSize: DWORD,
315     FileName: PCWSTR,
316     Win32Error: DWORD,
317     FailureCode: DWORD,
318 }}
319 pub type PSP_REGISTER_CONTROL_STATUSW = *mut SP_REGISTER_CONTROL_STATUSW;
320 pub const SPREG_SUCCESS: DWORD = 0x00000000;
321 pub const SPREG_LOADLIBRARY: DWORD = 0x00000001;
322 pub const SPREG_GETPROCADDR: DWORD = 0x00000002;
323 pub const SPREG_REGSVR: DWORD = 0x00000003;
324 pub const SPREG_DLLINSTALL: DWORD = 0x00000004;
325 pub const SPREG_TIMEOUT: DWORD = 0x00000005;
326 pub const SPREG_UNKNOWN: DWORD = 0xFFFFFFFF;
327 pub type HSPFILEQ = PVOID;
328 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_FILE_COPY_PARAMS_A {
329     cbSize: DWORD,
330     QueueHandle: HSPFILEQ,
331     SourceRootPath: PCSTR,
332     SourcePath: PCSTR,
333     SourceFilename: PCSTR,
334     SourceDescription: PCSTR,
335     SourceTagfile: PCSTR,
336     TargetDirectory: PCSTR,
337     TargetFilename: PCSTR,
338     CopyStyle: DWORD,
339     LayoutInf: HINF,
340     SecurityDescriptor: PCSTR,
341 }}
342 pub type PSP_FILE_COPY_PARAMS_A = *mut SP_FILE_COPY_PARAMS_A;
343 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_FILE_COPY_PARAMS_W {
344     cbSize: DWORD,
345     QueueHandle: HSPFILEQ,
346     SourceRootPath: PCWSTR,
347     SourcePath: PCWSTR,
348     SourceFilename: PCWSTR,
349     SourceDescription: PCWSTR,
350     SourceTagfile: PCWSTR,
351     TargetDirectory: PCWSTR,
352     TargetFilename: PCWSTR,
353     CopyStyle: DWORD,
354     LayoutInf: HINF,
355     SecurityDescriptor: PCWSTR,
356 }}
357 pub type PSP_FILE_COPY_PARAMS_W = *mut SP_FILE_COPY_PARAMS_W;
358 pub type HDSKSPC = PVOID;
359 pub type HDEVINFO = PVOID;
360 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVINFO_DATA {
361     cbSize: DWORD,
362     ClassGuid: GUID,
363     DevInst: DWORD,
364     Reserved: ULONG_PTR,
365 }}
366 pub type PSP_DEVINFO_DATA = *mut SP_DEVINFO_DATA;
367 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVICE_INTERFACE_DATA {
368     cbSize: DWORD,
369     InterfaceClassGuid: GUID,
370     Flags: DWORD,
371     Reserved: ULONG_PTR,
372 }}
373 pub type PSP_DEVICE_INTERFACE_DATA = *mut SP_DEVICE_INTERFACE_DATA;
374 pub const SPINT_ACTIVE: DWORD = 0x00000001;
375 pub const SPINT_DEFAULT: DWORD = 0x00000002;
376 pub const SPINT_REMOVED: DWORD = 0x00000004;
377 pub type SP_INTERFACE_DEVICE_DATA = SP_DEVICE_INTERFACE_DATA;
378 pub type PSP_INTERFACE_DEVICE_DATA = PSP_DEVICE_INTERFACE_DATA;
379 pub const SPID_ACTIVE: DWORD = SPINT_ACTIVE;
380 pub const SPID_DEFAULT: DWORD = SPINT_DEFAULT;
381 pub const SPID_REMOVED: DWORD = SPINT_REMOVED;
382 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVICE_INTERFACE_DETAIL_DATA_A {
383     cbSize: DWORD,
384     DevicePath: [CHAR; ANYSIZE_ARRAY],
385 }}
386 pub type PSP_DEVICE_INTERFACE_DETAIL_DATA_A = *mut SP_DEVICE_INTERFACE_DETAIL_DATA_A;
387 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVICE_INTERFACE_DETAIL_DATA_W {
388     cbSize: DWORD,
389     DevicePath: [WCHAR; ANYSIZE_ARRAY],
390 }}
391 pub type PSP_DEVICE_INTERFACE_DETAIL_DATA_W = *mut SP_DEVICE_INTERFACE_DETAIL_DATA_W;
392 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVINFO_LIST_DETAIL_DATA_A {
393     cbSize: DWORD,
394     ClassGuid: GUID,
395     RemoteMachineHandle: HANDLE,
396     RemoteMachineName: [CHAR; SP_MAX_MACHINENAME_LENGTH],
397 }}
398 pub type PSP_DEVINFO_LIST_DETAIL_DATA_A = *mut SP_DEVINFO_LIST_DETAIL_DATA_A;
399 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVINFO_LIST_DETAIL_DATA_W {
400     cbSize: DWORD,
401     ClassGuid: GUID,
402     RemoteMachineHandle: HANDLE,
403     RemoteMachineName: [WCHAR; SP_MAX_MACHINENAME_LENGTH],
404 }}
405 pub type PSP_DEVINFO_LIST_DETAIL_DATA_W = *mut SP_DEVINFO_LIST_DETAIL_DATA_W;
406 pub const DIF_SELECTDEVICE: DI_FUNCTION = 0x00000001;
407 pub const DIF_INSTALLDEVICE: DI_FUNCTION = 0x00000002;
408 pub const DIF_ASSIGNRESOURCES: DI_FUNCTION = 0x00000003;
409 pub const DIF_PROPERTIES: DI_FUNCTION = 0x00000004;
410 pub const DIF_REMOVE: DI_FUNCTION = 0x00000005;
411 pub const DIF_FIRSTTIMESETUP: DI_FUNCTION = 0x00000006;
412 pub const DIF_FOUNDDEVICE: DI_FUNCTION = 0x00000007;
413 pub const DIF_SELECTCLASSDRIVERS: DI_FUNCTION = 0x00000008;
414 pub const DIF_VALIDATECLASSDRIVERS: DI_FUNCTION = 0x00000009;
415 pub const DIF_INSTALLCLASSDRIVERS: DI_FUNCTION = 0x0000000A;
416 pub const DIF_CALCDISKSPACE: DI_FUNCTION = 0x0000000B;
417 pub const DIF_DESTROYPRIVATEDATA: DI_FUNCTION = 0x0000000C;
418 pub const DIF_VALIDATEDRIVER: DI_FUNCTION = 0x0000000D;
419 pub const DIF_DETECT: DI_FUNCTION = 0x0000000F;
420 pub const DIF_INSTALLWIZARD: DI_FUNCTION = 0x00000010;
421 pub const DIF_DESTROYWIZARDDATA: DI_FUNCTION = 0x00000011;
422 pub const DIF_PROPERTYCHANGE: DI_FUNCTION = 0x00000012;
423 pub const DIF_ENABLECLASS: DI_FUNCTION = 0x00000013;
424 pub const DIF_DETECTVERIFY: DI_FUNCTION = 0x00000014;
425 pub const DIF_INSTALLDEVICEFILES: DI_FUNCTION = 0x00000015;
426 pub const DIF_UNREMOVE: DI_FUNCTION = 0x00000016;
427 pub const DIF_SELECTBESTCOMPATDRV: DI_FUNCTION = 0x00000017;
428 pub const DIF_ALLOW_INSTALL: DI_FUNCTION = 0x00000018;
429 pub const DIF_REGISTERDEVICE: DI_FUNCTION = 0x00000019;
430 pub const DIF_NEWDEVICEWIZARD_PRESELECT: DI_FUNCTION = 0x0000001A;
431 pub const DIF_NEWDEVICEWIZARD_SELECT: DI_FUNCTION = 0x0000001B;
432 pub const DIF_NEWDEVICEWIZARD_PREANALYZE: DI_FUNCTION = 0x0000001C;
433 pub const DIF_NEWDEVICEWIZARD_POSTANALYZE: DI_FUNCTION = 0x0000001D;
434 pub const DIF_NEWDEVICEWIZARD_FINISHINSTALL: DI_FUNCTION = 0x0000001E;
435 pub const DIF_UNUSED1: DI_FUNCTION = 0x0000001F;
436 pub const DIF_INSTALLINTERFACES: DI_FUNCTION = 0x00000020;
437 pub const DIF_DETECTCANCEL: DI_FUNCTION = 0x00000021;
438 pub const DIF_REGISTER_COINSTALLERS: DI_FUNCTION = 0x00000022;
439 pub const DIF_ADDPROPERTYPAGE_ADVANCED: DI_FUNCTION = 0x00000023;
440 pub const DIF_ADDPROPERTYPAGE_BASIC: DI_FUNCTION = 0x00000024;
441 pub const DIF_RESERVED1: DI_FUNCTION = 0x00000025;
442 pub const DIF_TROUBLESHOOTER: DI_FUNCTION = 0x00000026;
443 pub const DIF_POWERMESSAGEWAKE: DI_FUNCTION = 0x00000027;
444 pub const DIF_ADDREMOTEPROPERTYPAGE_ADVANCED: DI_FUNCTION = 0x00000028;
445 pub const DIF_UPDATEDRIVER_UI: DI_FUNCTION = 0x00000029;
446 pub const DIF_FINISHINSTALL_ACTION: DI_FUNCTION = 0x0000002A;
447 pub const DIF_RESERVED2: DI_FUNCTION = 0x00000030;
448 pub const DIF_MOVEDEVICE: DI_FUNCTION = 0x0000000E;
449 pub type DI_FUNCTION = UINT;
450 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVINSTALL_PARAMS_A {
451     cbSize: DWORD,
452     Flags: DWORD,
453     FlagsEx: DWORD,
454     hwndParent: HWND,
455     InstallMsgHandler: PSP_FILE_CALLBACK_A,
456     InstallMsgHandlerContext: PVOID,
457     FileQueue: HSPFILEQ,
458     ClassInstallReserved: ULONG_PTR,
459     Reserved: DWORD,
460     DriverPath: [CHAR; MAX_PATH],
461 }}
462 pub type PSP_DEVINSTALL_PARAMS_A = *mut SP_DEVINSTALL_PARAMS_A;
463 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVINSTALL_PARAMS_W {
464     cbSize: DWORD,
465     Flags: DWORD,
466     FlagsEx: DWORD,
467     hwndParent: HWND,
468     InstallMsgHandler: PSP_FILE_CALLBACK_W,
469     InstallMsgHandlerContext: PVOID,
470     FileQueue: HSPFILEQ,
471     ClassInstallReserved: ULONG_PTR,
472     Reserved: DWORD,
473     DriverPath: [WCHAR; MAX_PATH],
474 }}
475 pub type PSP_DEVINSTALL_PARAMS_W = *mut SP_DEVINSTALL_PARAMS_W;
476 pub const DI_SHOWOEM: DWORD = 0x00000001;
477 pub const DI_SHOWCOMPAT: DWORD = 0x00000002;
478 pub const DI_SHOWCLASS: DWORD = 0x00000004;
479 pub const DI_SHOWALL: DWORD = 0x00000007;
480 pub const DI_NOVCP: DWORD = 0x00000008;
481 pub const DI_DIDCOMPAT: DWORD = 0x00000010;
482 pub const DI_DIDCLASS: DWORD = 0x00000020;
483 pub const DI_AUTOASSIGNRES: DWORD = 0x00000040;
484 pub const DI_NEEDRESTART: DWORD = 0x00000080;
485 pub const DI_NEEDREBOOT: DWORD = 0x00000100;
486 pub const DI_NOBROWSE: DWORD = 0x00000200;
487 pub const DI_MULTMFGS: DWORD = 0x00000400;
488 pub const DI_DISABLED: DWORD = 0x00000800;
489 pub const DI_GENERALPAGE_ADDED: DWORD = 0x00001000;
490 pub const DI_RESOURCEPAGE_ADDED: DWORD = 0x00002000;
491 pub const DI_PROPERTIES_CHANGE: DWORD = 0x00004000;
492 pub const DI_INF_IS_SORTED: DWORD = 0x00008000;
493 pub const DI_ENUMSINGLEINF: DWORD = 0x00010000;
494 pub const DI_DONOTCALLCONFIGMG: DWORD = 0x00020000;
495 pub const DI_INSTALLDISABLED: DWORD = 0x00040000;
496 pub const DI_COMPAT_FROM_CLASS: DWORD = 0x00080000;
497 pub const DI_CLASSINSTALLPARAMS: DWORD = 0x00100000;
498 pub const DI_NODI_DEFAULTACTION: DWORD = 0x00200000;
499 pub const DI_QUIETINSTALL: DWORD = 0x00800000;
500 pub const DI_NOFILECOPY: DWORD = 0x01000000;
501 pub const DI_FORCECOPY: DWORD = 0x02000000;
502 pub const DI_DRIVERPAGE_ADDED: DWORD = 0x04000000;
503 pub const DI_USECI_SELECTSTRINGS: DWORD = 0x08000000;
504 pub const DI_OVERRIDE_INFFLAGS: DWORD = 0x10000000;
505 pub const DI_PROPS_NOCHANGEUSAGE: DWORD = 0x20000000;
506 pub const DI_NOSELECTICONS: DWORD = 0x40000000;
507 pub const DI_NOWRITE_IDS: DWORD = 0x80000000;
508 pub const DI_FLAGSEX_RESERVED2: DWORD = 0x00000001;
509 pub const DI_FLAGSEX_RESERVED3: DWORD = 0x00000002;
510 pub const DI_FLAGSEX_CI_FAILED: DWORD = 0x00000004;
511 pub const DI_FLAGSEX_FINISHINSTALL_ACTION: DWORD = 0x00000008;
512 pub const DI_FLAGSEX_DIDINFOLIST: DWORD = 0x00000010;
513 pub const DI_FLAGSEX_DIDCOMPATINFO: DWORD = 0x00000020;
514 pub const DI_FLAGSEX_FILTERCLASSES: DWORD = 0x00000040;
515 pub const DI_FLAGSEX_SETFAILEDINSTALL: DWORD = 0x00000080;
516 pub const DI_FLAGSEX_DEVICECHANGE: DWORD = 0x00000100;
517 pub const DI_FLAGSEX_ALWAYSWRITEIDS: DWORD = 0x00000200;
518 pub const DI_FLAGSEX_PROPCHANGE_PENDING: DWORD = 0x00000400;
519 pub const DI_FLAGSEX_ALLOWEXCLUDEDDRVS: DWORD = 0x00000800;
520 pub const DI_FLAGSEX_NOUIONQUERYREMOVE: DWORD = 0x00001000;
521 pub const DI_FLAGSEX_USECLASSFORCOMPAT: DWORD = 0x00002000;
522 pub const DI_FLAGSEX_RESERVED4: DWORD = 0x00004000;
523 pub const DI_FLAGSEX_NO_DRVREG_MODIFY: DWORD = 0x00008000;
524 pub const DI_FLAGSEX_IN_SYSTEM_SETUP: DWORD = 0x00010000;
525 pub const DI_FLAGSEX_INET_DRIVER: DWORD = 0x00020000;
526 pub const DI_FLAGSEX_APPENDDRIVERLIST: DWORD = 0x00040000;
527 pub const DI_FLAGSEX_PREINSTALLBACKUP: DWORD = 0x00080000;
528 pub const DI_FLAGSEX_BACKUPONREPLACE: DWORD = 0x00100000;
529 pub const DI_FLAGSEX_DRIVERLIST_FROM_URL: DWORD = 0x00200000;
530 pub const DI_FLAGSEX_RESERVED1: DWORD = 0x00400000;
531 pub const DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS: DWORD = 0x00800000;
532 pub const DI_FLAGSEX_POWERPAGE_ADDED: DWORD = 0x01000000;
533 pub const DI_FLAGSEX_FILTERSIMILARDRIVERS: DWORD = 0x02000000;
534 pub const DI_FLAGSEX_INSTALLEDDRIVER: DWORD = 0x04000000;
535 pub const DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE: DWORD = 0x08000000;
536 pub const DI_FLAGSEX_ALTPLATFORM_DRVSEARCH: DWORD = 0x10000000;
537 pub const DI_FLAGSEX_RESTART_DEVICE_ONLY: DWORD = 0x20000000;
538 pub const DI_FLAGSEX_RECURSIVESEARCH: DWORD = 0x40000000;
539 pub const DI_FLAGSEX_SEARCH_PUBLISHED_INFS: DWORD = 0x80000000;
540 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_CLASSINSTALL_HEADER {
541     cbSize: DWORD,
542     InstallFunction: DI_FUNCTION,
543 }}
544 pub type PSP_CLASSINSTALL_HEADER = *mut SP_CLASSINSTALL_HEADER;
545 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ENABLECLASS_PARAMS {
546     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
547     ClassGuid: GUID,
548     EnableMessage: DWORD,
549 }}
550 pub type PSP_ENABLECLASS_PARAMS = *mut SP_ENABLECLASS_PARAMS;
551 pub const ENABLECLASS_QUERY: DWORD = 0;
552 pub const ENABLECLASS_SUCCESS: DWORD = 1;
553 pub const ENABLECLASS_FAILURE: DWORD = 2;
554 pub const DICS_ENABLE: DWORD = 0x00000001;
555 pub const DICS_DISABLE: DWORD = 0x00000002;
556 pub const DICS_PROPCHANGE: DWORD = 0x00000003;
557 pub const DICS_START: DWORD = 0x00000004;
558 pub const DICS_STOP: DWORD = 0x00000005;
559 pub const DICS_FLAG_GLOBAL: DWORD = 0x00000001;
560 pub const DICS_FLAG_CONFIGSPECIFIC: DWORD = 0x00000002;
561 pub const DICS_FLAG_CONFIGGENERAL: DWORD = 0x00000004;
562 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_PROPCHANGE_PARAMS {
563     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
564     StateChange: DWORD,
565     Scope: DWORD,
566     HwProfile: DWORD,
567 }}
568 pub type PSP_PROPCHANGE_PARAMS = *mut SP_PROPCHANGE_PARAMS;
569 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_REMOVEDEVICE_PARAMS {
570     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
571     Scope: DWORD,
572     HwProfile: DWORD,
573 }}
574 pub type PSP_REMOVEDEVICE_PARAMS = *mut SP_REMOVEDEVICE_PARAMS;
575 pub const DI_REMOVEDEVICE_GLOBAL: DWORD = 0x00000001;
576 pub const DI_REMOVEDEVICE_CONFIGSPECIFIC: DWORD = 0x00000002;
577 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_UNREMOVEDEVICE_PARAMS {
578     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
579     Scope: DWORD,
580     HwProfile: DWORD,
581 }}
582 pub type PSP_UNREMOVEDEVICE_PARAMS = *mut SP_UNREMOVEDEVICE_PARAMS;
583 pub const DI_UNREMOVEDEVICE_CONFIGSPECIFIC: DWORD = 0x00000002;
584 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_SELECTDEVICE_PARAMS_A {
585     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
586     Title: [CHAR; MAX_TITLE_LEN],
587     Instructions: [CHAR; MAX_INSTRUCTION_LEN],
588     ListLabel: [CHAR; MAX_LABEL_LEN],
589     SubTitle: [CHAR; MAX_SUBTITLE_LEN],
590     Reserved: [BYTE; 2],
591 }}
592 pub type PSP_SELECTDEVICE_PARAMS_A = *mut SP_SELECTDEVICE_PARAMS_A;
593 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_SELECTDEVICE_PARAMS_W {
594     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
595     Title: [WCHAR; MAX_TITLE_LEN],
596     Instructions: [WCHAR; MAX_INSTRUCTION_LEN],
597     ListLabel: [WCHAR; MAX_LABEL_LEN],
598     SubTitle: [WCHAR; MAX_SUBTITLE_LEN],
599 }}
600 pub type PSP_SELECTDEVICE_PARAMS_W = *mut SP_SELECTDEVICE_PARAMS_W;
601 FN!{stdcall PDETECT_PROGRESS_NOTIFY(
602     ProgressNotifyParam: PVOID,
603     DetectComplete: DWORD,
604 ) -> BOOL}
605 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DETECTDEVICE_PARAMS {
606     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
607     DetectProgressNotify: PDETECT_PROGRESS_NOTIFY,
608     ProgressNotifyParam: PVOID,
609 }}
610 pub type PSP_DETECTDEVICE_PARAMS = *mut SP_DETECTDEVICE_PARAMS;
611 pub const MAX_INSTALLWIZARD_DYNAPAGES: usize = 20;
612 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INSTALLWIZARD_DATA {
613     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
614     Flags: DWORD,
615     DynamicPages: [HPROPSHEETPAGE; MAX_INSTALLWIZARD_DYNAPAGES],
616     NumDynamicPages: DWORD,
617     DynamicPageFlags: DWORD,
618     PrivateFlags: DWORD,
619     PrivateData: LPARAM,
620     hwndWizardDlg: HWND,
621 }}
622 pub type PSP_INSTALLWIZARD_DATA = *mut SP_INSTALLWIZARD_DATA;
623 pub const NDW_INSTALLFLAG_DIDFACTDEFS: DWORD = 0x00000001;
624 pub const NDW_INSTALLFLAG_HARDWAREALLREADYIN: DWORD = 0x00000002;
625 pub const NDW_INSTALLFLAG_NEEDRESTART: DWORD = DI_NEEDRESTART;
626 pub const NDW_INSTALLFLAG_NEEDREBOOT: DWORD = DI_NEEDREBOOT;
627 pub const NDW_INSTALLFLAG_NEEDSHUTDOWN: DWORD = 0x00000200;
628 pub const NDW_INSTALLFLAG_EXPRESSINTRO: DWORD = 0x00000400;
629 pub const NDW_INSTALLFLAG_SKIPISDEVINSTALLED: DWORD = 0x00000800;
630 pub const NDW_INSTALLFLAG_NODETECTEDDEVS: DWORD = 0x00001000;
631 pub const NDW_INSTALLFLAG_INSTALLSPECIFIC: DWORD = 0x00002000;
632 pub const NDW_INSTALLFLAG_SKIPCLASSLIST: DWORD = 0x00004000;
633 pub const NDW_INSTALLFLAG_CI_PICKED_OEM: DWORD = 0x00008000;
634 pub const NDW_INSTALLFLAG_PCMCIAMODE: DWORD = 0x00010000;
635 pub const NDW_INSTALLFLAG_PCMCIADEVICE: DWORD = 0x00020000;
636 pub const NDW_INSTALLFLAG_USERCANCEL: DWORD = 0x00040000;
637 pub const NDW_INSTALLFLAG_KNOWNCLASS: DWORD = 0x00080000;
638 pub const DYNAWIZ_FLAG_PAGESADDED: DWORD = 0x00000001;
639 pub const DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT: DWORD = 0x00000008;
640 pub const DYNAWIZ_FLAG_INSTALLDET_NEXT: DWORD = 0x00000002;
641 pub const DYNAWIZ_FLAG_INSTALLDET_PREV: DWORD = 0x00000004;
642 pub const MIN_IDD_DYNAWIZ_RESOURCE_ID: c_int = 10000;
643 pub const MAX_IDD_DYNAWIZ_RESOURCE_ID: c_int = 11000;
644 pub const IDD_DYNAWIZ_FIRSTPAGE: c_int = 10000;
645 pub const IDD_DYNAWIZ_SELECT_PREVPAGE: c_int = 10001;
646 pub const IDD_DYNAWIZ_SELECT_NEXTPAGE: c_int = 10002;
647 pub const IDD_DYNAWIZ_ANALYZE_PREVPAGE: c_int = 10003;
648 pub const IDD_DYNAWIZ_ANALYZE_NEXTPAGE: c_int = 10004;
649 pub const IDD_DYNAWIZ_SELECTDEV_PAGE: c_int = 10009;
650 pub const IDD_DYNAWIZ_ANALYZEDEV_PAGE: c_int = 10010;
651 pub const IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE: c_int = 10011;
652 pub const IDD_DYNAWIZ_SELECTCLASS_PAGE: c_int = 10012;
653 pub const IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE: c_int = 10006;
654 pub const IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE: c_int = 10007;
655 pub const IDD_DYNAWIZ_INSTALLDETECTED_NODEVS: c_int = 10008;
656 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_NEWDEVICEWIZARD_DATA {
657     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
658     Flags: DWORD,
659     DynamicPages: [HPROPSHEETPAGE; MAX_INSTALLWIZARD_DYNAPAGES],
660     NumDynamicPages: DWORD,
661     hwndWizardDlg: HWND,
662 }}
663 pub type PSP_NEWDEVICEWIZARD_DATA = *mut SP_NEWDEVICEWIZARD_DATA;
664 pub type SP_ADDPROPERTYPAGE_DATA = SP_NEWDEVICEWIZARD_DATA;
665 pub type PSP_ADDPROPERTYPAGE_DATA = PSP_NEWDEVICEWIZARD_DATA;
666 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_TROUBLESHOOTER_PARAMS_A {
667     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
668     ChmFile: [CHAR; MAX_PATH],
669     HtmlTroubleShooter: [CHAR; MAX_PATH],
670 }}
671 pub type PSP_TROUBLESHOOTER_PARAMS_A = *mut SP_TROUBLESHOOTER_PARAMS_A;
672 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_TROUBLESHOOTER_PARAMS_W {
673     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
674     ChmFile: [WCHAR; MAX_PATH],
675     HtmlTroubleShooter: [WCHAR; MAX_PATH],
676 }}
677 pub type PSP_TROUBLESHOOTER_PARAMS_W = *mut SP_TROUBLESHOOTER_PARAMS_W;
678 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_POWERMESSAGEWAKE_PARAMS_A {
679     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
680     PowerMessageWake: [CHAR; LINE_LEN * 2],
681 }}
682 pub type PSP_POWERMESSAGEWAKE_PARAMS_A = *mut SP_POWERMESSAGEWAKE_PARAMS_A;
683 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_POWERMESSAGEWAKE_PARAMS_W {
684     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
685     PowerMessageWake: [WCHAR; LINE_LEN * 2],
686 }}
687 pub type PSP_POWERMESSAGEWAKE_PARAMS_W = *mut SP_POWERMESSAGEWAKE_PARAMS_W;
688 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DATA_V2_A {
689     cbSize: DWORD,
690     DriverType: DWORD,
691     Reserved: ULONG_PTR,
692     Description: [CHAR; LINE_LEN],
693     MfgName: [CHAR; LINE_LEN],
694     ProviderName: [CHAR; LINE_LEN],
695     DriverDate: FILETIME,
696     DriverVersion: DWORDLONG,
697 }}
698 pub type PSP_DRVINFO_DATA_V2_A = *mut SP_DRVINFO_DATA_V2_A;
699 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DATA_V2_W {
700     cbSize: DWORD,
701     DriverType: DWORD,
702     Reserved: ULONG_PTR,
703     Description: [WCHAR; LINE_LEN],
704     MfgName: [WCHAR; LINE_LEN],
705     ProviderName: [WCHAR; LINE_LEN],
706     DriverDate: FILETIME,
707     DriverVersion: DWORDLONG,
708 }}
709 pub type PSP_DRVINFO_DATA_V2_W = *mut SP_DRVINFO_DATA_V2_W;
710 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DATA_V1_A {
711     cbSize: DWORD,
712     DriverType: DWORD,
713     Reserved: ULONG_PTR,
714     Description: [CHAR; LINE_LEN],
715     MfgName: [CHAR; LINE_LEN],
716     ProviderName: [CHAR; LINE_LEN],
717 }}
718 pub type PSP_DRVINFO_DATA_V1_A = *mut SP_DRVINFO_DATA_V1_A;
719 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DATA_V1_W {
720     cbSize: DWORD,
721     DriverType: DWORD,
722     Reserved: ULONG_PTR,
723     Description: [WCHAR; LINE_LEN],
724     MfgName: [WCHAR; LINE_LEN],
725     ProviderName: [WCHAR; LINE_LEN],
726 }}
727 pub type PSP_DRVINFO_DATA_V1_W = *mut SP_DRVINFO_DATA_V1_W;
728 pub type SP_DRVINFO_DATA_A = SP_DRVINFO_DATA_V2_A;
729 pub type PSP_DRVINFO_DATA_A = PSP_DRVINFO_DATA_V2_A;
730 pub type SP_DRVINFO_DATA_W = SP_DRVINFO_DATA_V2_W;
731 pub type PSP_DRVINFO_DATA_W = PSP_DRVINFO_DATA_V2_W;
732 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DETAIL_DATA_A {
733     cbSize: DWORD,
734     InfDate: FILETIME,
735     CompatIDsOffset: DWORD,
736     CompatIDsLength: DWORD,
737     Reserved: ULONG_PTR,
738     SectionName: [CHAR; LINE_LEN],
739     InfFileName: [CHAR; MAX_PATH],
740     DrvDescription: [CHAR; LINE_LEN],
741     HardwareID: [CHAR; ANYSIZE_ARRAY],
742 }}
743 pub type PSP_DRVINFO_DETAIL_DATA_A = *mut SP_DRVINFO_DETAIL_DATA_A;
744 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DETAIL_DATA_W {
745     cbSize: DWORD,
746     InfDate: FILETIME,
747     CompatIDsOffset: DWORD,
748     CompatIDsLength: DWORD,
749     Reserved: ULONG_PTR,
750     SectionName: [WCHAR; LINE_LEN],
751     InfFileName: [WCHAR; MAX_PATH],
752     DrvDescription: [WCHAR; LINE_LEN],
753     HardwareID: [WCHAR; ANYSIZE_ARRAY],
754 }}
755 pub type PSP_DRVINFO_DETAIL_DATA_W = *mut SP_DRVINFO_DETAIL_DATA_W;
756 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINSTALL_PARAMS {
757     cbSize: DWORD,
758     Rank: DWORD,
759     Flags: DWORD,
760     PrivateData: DWORD_PTR,
761     Reserved: DWORD,
762 }}
763 pub type PSP_DRVINSTALL_PARAMS = *mut SP_DRVINSTALL_PARAMS;
764 pub const DNF_DUPDESC: DWORD = 0x00000001;
765 pub const DNF_OLDDRIVER: DWORD = 0x00000002;
766 pub const DNF_EXCLUDEFROMLIST: DWORD = 0x00000004;
767 pub const DNF_NODRIVER: DWORD = 0x00000008;
768 pub const DNF_LEGACYINF: DWORD = 0x00000010;
769 pub const DNF_CLASS_DRIVER: DWORD = 0x00000020;
770 pub const DNF_COMPATIBLE_DRIVER: DWORD = 0x00000040;
771 pub const DNF_INET_DRIVER: DWORD = 0x00000080;
772 pub const DNF_UNUSED1: DWORD = 0x00000100;
773 pub const DNF_UNUSED2: DWORD = 0x00000200;
774 pub const DNF_OLD_INET_DRIVER: DWORD = 0x00000400;
775 pub const DNF_BAD_DRIVER: DWORD = 0x00000800;
776 pub const DNF_DUPPROVIDER: DWORD = 0x00001000;
777 pub const DNF_INF_IS_SIGNED: DWORD = 0x00002000;
778 pub const DNF_OEM_F6_INF: DWORD = 0x00004000;
779 pub const DNF_DUPDRIVERVER: DWORD = 0x00008000;
780 pub const DNF_BASIC_DRIVER: DWORD = 0x00010000;
781 pub const DNF_AUTHENTICODE_SIGNED: DWORD = 0x00020000;
782 pub const DNF_INSTALLEDDRIVER: DWORD = 0x00040000;
783 pub const DNF_ALWAYSEXCLUDEFROMLIST: DWORD = 0x00080000;
784 pub const DNF_INBOX_DRIVER: DWORD = 0x00100000;
785 pub const DNF_REQUESTADDITIONALSOFTWARE: DWORD = 0x00200000;
786 pub const DNF_UNUSED_22: DWORD = 0x00400000;
787 pub const DNF_UNUSED_23: DWORD = 0x00800000;
788 pub const DNF_UNUSED_24: DWORD = 0x01000000;
789 pub const DNF_UNUSED_25: DWORD = 0x02000000;
790 pub const DNF_UNUSED_26: DWORD = 0x04000000;
791 pub const DNF_UNUSED_27: DWORD = 0x08000000;
792 pub const DNF_UNUSED_28: DWORD = 0x10000000;
793 pub const DNF_UNUSED_29: DWORD = 0x20000000;
794 pub const DNF_UNUSED_30: DWORD = 0x40000000;
795 pub const DNF_UNUSED_31: DWORD = 0x80000000;
796 pub const DRIVER_HARDWAREID_RANK: DWORD = 0x00000FFF;
797 pub const DRIVER_HARDWAREID_MASK: DWORD = 0x80000FFF;
798 pub const DRIVER_UNTRUSTED_RANK: DWORD = 0x80000000;
799 pub const DRIVER_W9X_SUSPECT_RANK: DWORD = 0xC0000000;
800 FN!{stdcall PSP_DETSIG_CMPPROC(
801     DeviceInfoSet: HDEVINFO,
802     NewDeviceData: PSP_DEVINFO_DATA,
803     ExistingDeviceData: PSP_DEVINFO_DATA,
804     CompareContext: PVOID,
805 ) -> DWORD}
806 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct COINSTALLER_CONTEXT_DATA {
807     PostProcessing: BOOL,
808     InstallResult: DWORD,
809     PrivateData: PVOID,
810 }}
811 pub type PCOINSTALLER_CONTEXT_DATA = *mut COINSTALLER_CONTEXT_DATA;
812 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_CLASSIMAGELIST_DATA {
813     cbSize: DWORD,
814     ImageList: HIMAGELIST,
815     Reserved: ULONG_PTR,
816 }}
817 pub type PSP_CLASSIMAGELIST_DATA = *mut SP_CLASSIMAGELIST_DATA;
818 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_PROPSHEETPAGE_REQUEST {
819     cbSize: DWORD,
820     PageRequested: DWORD,
821     DeviceInfoSet: HDEVINFO,
822     DeviceInfoData: PSP_DEVINFO_DATA,
823 }}
824 pub type PSP_PROPSHEETPAGE_REQUEST = *mut SP_PROPSHEETPAGE_REQUEST;
825 pub const SPPSR_SELECT_DEVICE_RESOURCES: DWORD = 1;
826 pub const SPPSR_ENUM_BASIC_DEVICE_PROPERTIES: DWORD = 2;
827 pub const SPPSR_ENUM_ADV_DEVICE_PROPERTIES: DWORD = 3;
828 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_BACKUP_QUEUE_PARAMS_V2_A {
829     cbSize: DWORD,
830     FullInfPath: [CHAR; MAX_PATH],
831     FilenameOffset: INT,
832     ReinstallInstance: [CHAR; MAX_PATH],
833 }}
834 pub type PSP_BACKUP_QUEUE_PARAMS_V2_A = *mut SP_BACKUP_QUEUE_PARAMS_V2_A;
835 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_BACKUP_QUEUE_PARAMS_V2_W {
836     cbSize: DWORD,
837     FullInfPath: [WCHAR; MAX_PATH],
838     FilenameOffset: INT,
839     ReinstallInstance: [WCHAR; MAX_PATH],
840 }}
841 pub type PSP_BACKUP_QUEUE_PARAMS_V2_W = *mut SP_BACKUP_QUEUE_PARAMS_V2_W;
842 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_BACKUP_QUEUE_PARAMS_V1_A {
843     cbSize: DWORD,
844     FullInfPath: [CHAR; MAX_PATH],
845     FilenameOffset: INT,
846 }}
847 pub type PSP_BACKUP_QUEUE_PARAMS_V1_A = *mut SP_BACKUP_QUEUE_PARAMS_V1_A;
848 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_BACKUP_QUEUE_PARAMS_V1_W {
849     cbSize: DWORD,
850     FullInfPath: [WCHAR; MAX_PATH],
851     FilenameOffset: INT,
852 }}
853 pub type PSP_BACKUP_QUEUE_PARAMS_V1_W = *mut SP_BACKUP_QUEUE_PARAMS_V1_W;
854 pub type SP_BACKUP_QUEUE_PARAMS_A = SP_BACKUP_QUEUE_PARAMS_V2_A;
855 pub type PSP_BACKUP_QUEUE_PARAMS_A = PSP_BACKUP_QUEUE_PARAMS_V2_A;
856 pub type SP_BACKUP_QUEUE_PARAMS_W = SP_BACKUP_QUEUE_PARAMS_V2_W;
857 pub type PSP_BACKUP_QUEUE_PARAMS_W = PSP_BACKUP_QUEUE_PARAMS_V2_W;
858 pub const ERROR_EXPECTED_SECTION_NAME: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0;
859 pub const ERROR_BAD_SECTION_NAME_LINE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 1;
860 pub const ERROR_SECTION_NAME_TOO_LONG: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 2;
861 pub const ERROR_GENERAL_SYNTAX: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 3;
862 pub const ERROR_WRONG_INF_STYLE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x100;
863 pub const ERROR_SECTION_NOT_FOUND: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x101;
864 pub const ERROR_LINE_NOT_FOUND: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x102;
865 pub const ERROR_NO_BACKUP: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x103;
866 pub const ERROR_NO_ASSOCIATED_CLASS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x200;
867 pub const ERROR_CLASS_MISMATCH: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x201;
868 pub const ERROR_DUPLICATE_FOUND: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x202;
869 pub const ERROR_NO_DRIVER_SELECTED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x203;
870 pub const ERROR_KEY_DOES_NOT_EXIST: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x204;
871 pub const ERROR_INVALID_DEVINST_NAME: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
872     | 0x205;
873 pub const ERROR_INVALID_CLASS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x206;
874 pub const ERROR_DEVINST_ALREADY_EXISTS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
875     | 0x207;
876 pub const ERROR_DEVINFO_NOT_REGISTERED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
877     | 0x208;
878 pub const ERROR_INVALID_REG_PROPERTY: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
879     | 0x209;
880 pub const ERROR_NO_INF: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20A;
881 pub const ERROR_NO_SUCH_DEVINST: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20B;
882 pub const ERROR_CANT_LOAD_CLASS_ICON: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
883     | 0x20C;
884 pub const ERROR_INVALID_CLASS_INSTALLER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
885     | 0x20D;
886 pub const ERROR_DI_DO_DEFAULT: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20E;
887 pub const ERROR_DI_NOFILECOPY: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20F;
888 pub const ERROR_INVALID_HWPROFILE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x210;
889 pub const ERROR_NO_DEVICE_SELECTED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x211;
890 pub const ERROR_DEVINFO_LIST_LOCKED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x212;
891 pub const ERROR_DEVINFO_DATA_LOCKED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x213;
892 pub const ERROR_DI_BAD_PATH: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x214;
893 pub const ERROR_NO_CLASSINSTALL_PARAMS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
894     | 0x215;
895 pub const ERROR_FILEQUEUE_LOCKED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x216;
896 pub const ERROR_BAD_SERVICE_INSTALLSECT: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
897     | 0x217;
898 pub const ERROR_NO_CLASS_DRIVER_LIST: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
899     | 0x218;
900 pub const ERROR_NO_ASSOCIATED_SERVICE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
901     | 0x219;
902 pub const ERROR_NO_DEFAULT_DEVICE_INTERFACE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
903     | 0x21A;
904 pub const ERROR_DEVICE_INTERFACE_ACTIVE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
905     | 0x21B;
906 pub const ERROR_DEVICE_INTERFACE_REMOVED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
907     | 0x21C;
908 pub const ERROR_BAD_INTERFACE_INSTALLSECT: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
909     | 0x21D;
910 pub const ERROR_NO_SUCH_INTERFACE_CLASS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
911     | 0x21E;
912 pub const ERROR_INVALID_REFERENCE_STRING: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
913     | 0x21F;
914 pub const ERROR_INVALID_MACHINENAME: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x220;
915 pub const ERROR_REMOTE_COMM_FAILURE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x221;
916 pub const ERROR_MACHINE_UNAVAILABLE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x222;
917 pub const ERROR_NO_CONFIGMGR_SERVICES: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
918     | 0x223;
919 pub const ERROR_INVALID_PROPPAGE_PROVIDER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
920     | 0x224;
921 pub const ERROR_NO_SUCH_DEVICE_INTERFACE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
922     | 0x225;
923 pub const ERROR_DI_POSTPROCESSING_REQUIRED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
924     | 0x226;
925 pub const ERROR_INVALID_COINSTALLER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x227;
926 pub const ERROR_NO_COMPAT_DRIVERS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x228;
927 pub const ERROR_NO_DEVICE_ICON: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x229;
928 pub const ERROR_INVALID_INF_LOGCONFIG: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
929     | 0x22A;
930 pub const ERROR_DI_DONT_INSTALL: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22B;
931 pub const ERROR_INVALID_FILTER_DRIVER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
932     | 0x22C;
933 pub const ERROR_NON_WINDOWS_NT_DRIVER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
934     | 0x22D;
935 pub const ERROR_NON_WINDOWS_DRIVER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22E;
936 pub const ERROR_NO_CATALOG_FOR_OEM_INF: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
937     | 0x22F;
938 pub const ERROR_DEVINSTALL_QUEUE_NONNATIVE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
939     | 0x230;
940 pub const ERROR_NOT_DISABLEABLE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x231;
941 pub const ERROR_CANT_REMOVE_DEVINST: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x232;
942 pub const ERROR_INVALID_TARGET: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x233;
943 pub const ERROR_DRIVER_NONNATIVE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x234;
944 pub const ERROR_IN_WOW64: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x235;
945 pub const ERROR_SET_SYSTEM_RESTORE_POINT: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
946     | 0x236;
947 pub const ERROR_SCE_DISABLED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x238;
948 pub const ERROR_UNKNOWN_EXCEPTION: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x239;
949 pub const ERROR_PNP_REGISTRY_ERROR: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x23A;
950 pub const ERROR_REMOTE_REQUEST_UNSUPPORTED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
951     | 0x23B;
952 pub const ERROR_NOT_AN_INSTALLED_OEM_INF: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
953     | 0x23C;
954 pub const ERROR_INF_IN_USE_BY_DEVICES: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
955     | 0x23D;
956 pub const ERROR_DI_FUNCTION_OBSOLETE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
957     | 0x23E;
958 pub const ERROR_NO_AUTHENTICODE_CATALOG: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
959     | 0x23F;
960 pub const ERROR_AUTHENTICODE_DISALLOWED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
961     | 0x240;
962 pub const ERROR_AUTHENTICODE_TRUSTED_PUBLISHER: DWORD = APPLICATION_ERROR_MASK
963     | ERROR_SEVERITY_ERROR | 0x241;
964 pub const ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED: DWORD = APPLICATION_ERROR_MASK
965     | ERROR_SEVERITY_ERROR | 0x242;
966 pub const ERROR_AUTHENTICODE_PUBLISHER_NOT_TRUSTED: DWORD = APPLICATION_ERROR_MASK
967     | ERROR_SEVERITY_ERROR | 0x243;
968 pub const ERROR_SIGNATURE_OSATTRIBUTE_MISMATCH: DWORD = APPLICATION_ERROR_MASK
969     | ERROR_SEVERITY_ERROR | 0x244;
970 pub const ERROR_ONLY_VALIDATE_VIA_AUTHENTICODE: DWORD = APPLICATION_ERROR_MASK
971     | ERROR_SEVERITY_ERROR | 0x245;
972 pub const ERROR_DEVICE_INSTALLER_NOT_READY: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
973     | 0x246;
974 pub const ERROR_DRIVER_STORE_ADD_FAILED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
975     | 0x247;
976 pub const ERROR_DEVICE_INSTALL_BLOCKED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
977     | 0x248;
978 pub const ERROR_DRIVER_INSTALL_BLOCKED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
979     | 0x249;
980 pub const ERROR_WRONG_INF_TYPE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x24A;
981 pub const ERROR_FILE_HASH_NOT_IN_CATALOG: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
982     | 0x24B;
983 pub const ERROR_DRIVER_STORE_DELETE_FAILED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
984     | 0x24C;
985 pub const ERROR_UNRECOVERABLE_STACK_OVERFLOW: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
986     | 0x300;
987 pub const EXCEPTION_SPAPI_UNRECOVERABLE_STACK_OVERFLOW: DWORD = ERROR_UNRECOVERABLE_STACK_OVERFLOW;
988 pub const ERROR_NO_DEFAULT_INTERFACE_DEVICE: DWORD = ERROR_NO_DEFAULT_DEVICE_INTERFACE;
989 pub const ERROR_INTERFACE_DEVICE_ACTIVE: DWORD = ERROR_DEVICE_INTERFACE_ACTIVE;
990 pub const ERROR_INTERFACE_DEVICE_REMOVED: DWORD = ERROR_DEVICE_INTERFACE_REMOVED;
991 pub const ERROR_NO_SUCH_INTERFACE_DEVICE: DWORD = ERROR_NO_SUCH_DEVICE_INTERFACE;
992 pub const ERROR_NOT_INSTALLED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
993     | 0x1000;
994 extern "system" {
SetupGetInfInformationA( InfSpec: LPCVOID, SearchControl: DWORD, ReturnBuffer: PSP_INF_INFORMATION, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL995     pub fn SetupGetInfInformationA(
996         InfSpec: LPCVOID,
997         SearchControl: DWORD,
998         ReturnBuffer: PSP_INF_INFORMATION,
999         ReturnBufferSize: DWORD,
1000         RequiredSize: PDWORD,
1001     ) -> BOOL;
SetupGetInfInformationW( InfSpec: LPCVOID, SearchControl: DWORD, ReturnBuffer: PSP_INF_INFORMATION, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1002     pub fn SetupGetInfInformationW(
1003         InfSpec: LPCVOID,
1004         SearchControl: DWORD,
1005         ReturnBuffer: PSP_INF_INFORMATION,
1006         ReturnBufferSize: DWORD,
1007         RequiredSize: PDWORD,
1008     ) -> BOOL;
1009 }
1010 pub const INFINFO_INF_SPEC_IS_HINF: DWORD = 1;
1011 pub const INFINFO_INF_NAME_IS_ABSOLUTE: DWORD = 2;
1012 pub const INFINFO_DEFAULT_SEARCH: DWORD = 3;
1013 pub const INFINFO_REVERSE_DEFAULT_SEARCH: DWORD = 4;
1014 pub const INFINFO_INF_PATH_LIST_SEARCH: DWORD = 5;
1015 extern "system" {
SetupQueryInfFileInformationA( InfInformation: PSP_INF_INFORMATION, InfIndex: UINT, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1016     pub fn SetupQueryInfFileInformationA(
1017         InfInformation: PSP_INF_INFORMATION,
1018         InfIndex: UINT,
1019         ReturnBuffer: PSTR,
1020         ReturnBufferSize: DWORD,
1021         RequiredSize: PDWORD,
1022     ) -> BOOL;
SetupQueryInfFileInformationW( InfInformation: PSP_INF_INFORMATION, InfIndex: UINT, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1023     pub fn SetupQueryInfFileInformationW(
1024         InfInformation: PSP_INF_INFORMATION,
1025         InfIndex: UINT,
1026         ReturnBuffer: PWSTR,
1027         ReturnBufferSize: DWORD,
1028         RequiredSize: PDWORD,
1029     ) -> BOOL;
SetupQueryInfOriginalFileInformationA( InfInformation: PSP_INF_INFORMATION, InfIndex: UINT, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, OriginalFileInfo: PSP_ORIGINAL_FILE_INFO_A, ) -> BOOL1030     pub fn SetupQueryInfOriginalFileInformationA(
1031         InfInformation: PSP_INF_INFORMATION,
1032         InfIndex: UINT,
1033         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
1034         OriginalFileInfo: PSP_ORIGINAL_FILE_INFO_A,
1035     ) -> BOOL;
SetupQueryInfOriginalFileInformationW( InfInformation: PSP_INF_INFORMATION, InfIndex: UINT, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, OriginalFileInfo: PSP_ORIGINAL_FILE_INFO_W, ) -> BOOL1036     pub fn SetupQueryInfOriginalFileInformationW(
1037         InfInformation: PSP_INF_INFORMATION,
1038         InfIndex: UINT,
1039         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
1040         OriginalFileInfo: PSP_ORIGINAL_FILE_INFO_W,
1041     ) -> BOOL;
SetupQueryInfVersionInformationA( InfInformation: PSP_INF_INFORMATION, InfIndex: UINT, Key: PCSTR, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1042     pub fn SetupQueryInfVersionInformationA(
1043         InfInformation: PSP_INF_INFORMATION,
1044         InfIndex: UINT,
1045         Key: PCSTR,
1046         ReturnBuffer: PSTR,
1047         ReturnBufferSize: DWORD,
1048         RequiredSize: PDWORD,
1049     ) -> BOOL;
SetupQueryInfVersionInformationW( InfInformation: PSP_INF_INFORMATION, InfIndex: UINT, Key: PCWSTR, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1050     pub fn SetupQueryInfVersionInformationW(
1051         InfInformation: PSP_INF_INFORMATION,
1052         InfIndex: UINT,
1053         Key: PCWSTR,
1054         ReturnBuffer: PWSTR,
1055         ReturnBufferSize: DWORD,
1056         RequiredSize: PDWORD,
1057     ) -> BOOL;
SetupGetInfDriverStoreLocationA( FileName: PCSTR, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, LocaleName: PCSTR, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1058     pub fn SetupGetInfDriverStoreLocationA(
1059         FileName: PCSTR,
1060         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
1061         LocaleName: PCSTR,
1062         ReturnBuffer: PSTR,
1063         ReturnBufferSize: DWORD,
1064         RequiredSize: PDWORD,
1065     ) -> BOOL;
SetupGetInfDriverStoreLocationW( FileName: PCWSTR, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, LocaleName: PCWSTR, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1066     pub fn SetupGetInfDriverStoreLocationW(
1067         FileName: PCWSTR,
1068         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
1069         LocaleName: PCWSTR,
1070         ReturnBuffer: PWSTR,
1071         ReturnBufferSize: DWORD,
1072         RequiredSize: PDWORD,
1073     ) -> BOOL;
SetupGetInfPublishedNameA( DriverStoreLocation: PCSTR, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1074     pub fn SetupGetInfPublishedNameA(
1075         DriverStoreLocation: PCSTR,
1076         ReturnBuffer: PSTR,
1077         ReturnBufferSize: DWORD,
1078         RequiredSize: PDWORD,
1079     ) -> BOOL;
SetupGetInfPublishedNameW( DriverStoreLocation: PCWSTR, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1080     pub fn SetupGetInfPublishedNameW(
1081         DriverStoreLocation: PCWSTR,
1082         ReturnBuffer: PWSTR,
1083         ReturnBufferSize: DWORD,
1084         RequiredSize: PDWORD,
1085     ) -> BOOL;
SetupGetInfFileListA( DirectoryPath: PCSTR, InfStyle: DWORD, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1086     pub fn SetupGetInfFileListA(
1087         DirectoryPath: PCSTR,
1088         InfStyle: DWORD,
1089         ReturnBuffer: PSTR,
1090         ReturnBufferSize: DWORD,
1091         RequiredSize: PDWORD,
1092     ) -> BOOL;
SetupGetInfFileListW( DirectoryPath: PCWSTR, InfStyle: DWORD, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1093     pub fn SetupGetInfFileListW(
1094         DirectoryPath: PCWSTR,
1095         InfStyle: DWORD,
1096         ReturnBuffer: PWSTR,
1097         ReturnBufferSize: DWORD,
1098         RequiredSize: PDWORD,
1099     ) -> BOOL;
SetupOpenInfFileW( FileName: PCWSTR, InfClass: PCWSTR, InfStyle: DWORD, ErrorLine: PUINT, ) -> HINF1100     pub fn SetupOpenInfFileW(
1101         FileName: PCWSTR,
1102         InfClass: PCWSTR,
1103         InfStyle: DWORD,
1104         ErrorLine: PUINT,
1105     ) -> HINF;
SetupOpenInfFileA( FileName: PCSTR, InfClass: PCSTR, InfStyle: DWORD, ErrorLine: PUINT, ) -> HINF1106     pub fn SetupOpenInfFileA(
1107         FileName: PCSTR,
1108         InfClass: PCSTR,
1109         InfStyle: DWORD,
1110         ErrorLine: PUINT,
1111     ) -> HINF;
SetupOpenMasterInf() -> HINF1112     pub fn SetupOpenMasterInf() -> HINF;
SetupOpenAppendInfFileW( FileName: PCWSTR, InfHandle: HINF, ErrorLine: PUINT, ) -> BOOL1113     pub fn SetupOpenAppendInfFileW(
1114         FileName: PCWSTR,
1115         InfHandle: HINF,
1116         ErrorLine: PUINT,
1117     ) -> BOOL;
SetupOpenAppendInfFileA( FileName: PCSTR, InfHandle: HINF, ErrorLine: PUINT, ) -> BOOL1118     pub fn SetupOpenAppendInfFileA(
1119         FileName: PCSTR,
1120         InfHandle: HINF,
1121         ErrorLine: PUINT,
1122     ) -> BOOL;
SetupCloseInfFile( InfHandle: HINF, ) -> ()1123     pub fn SetupCloseInfFile(
1124         InfHandle: HINF,
1125     ) -> ();
SetupFindFirstLineA( InfHandle: HINF, Section: PCSTR, Key: PCSTR, Context: PINFCONTEXT, ) -> BOOL1126     pub fn SetupFindFirstLineA(
1127         InfHandle: HINF,
1128         Section: PCSTR,
1129         Key: PCSTR,
1130         Context: PINFCONTEXT,
1131     ) -> BOOL;
SetupFindFirstLineW( InfHandle: HINF, Section: PCWSTR, Key: PCWSTR, Context: PINFCONTEXT, ) -> BOOL1132     pub fn SetupFindFirstLineW(
1133         InfHandle: HINF,
1134         Section: PCWSTR,
1135         Key: PCWSTR,
1136         Context: PINFCONTEXT,
1137     ) -> BOOL;
SetupFindNextLine( ContextIn: PINFCONTEXT, ContextOut: PINFCONTEXT, ) -> BOOL1138     pub fn SetupFindNextLine(
1139         ContextIn: PINFCONTEXT,
1140         ContextOut: PINFCONTEXT,
1141     ) -> BOOL;
SetupFindNextMatchLineA( ContextIn: PINFCONTEXT, Key: PCSTR, ContextOut: PINFCONTEXT, ) -> BOOL1142     pub fn SetupFindNextMatchLineA(
1143         ContextIn: PINFCONTEXT,
1144         Key: PCSTR,
1145         ContextOut: PINFCONTEXT,
1146     ) -> BOOL;
SetupFindNextMatchLineW( ContextIn: PINFCONTEXT, Key: PCWSTR, ContextOut: PINFCONTEXT, ) -> BOOL1147     pub fn SetupFindNextMatchLineW(
1148         ContextIn: PINFCONTEXT,
1149         Key: PCWSTR,
1150         ContextOut: PINFCONTEXT,
1151     ) -> BOOL;
SetupGetLineByIndexA( InfHandle: HINF, Section: PCSTR, Index: DWORD, Context: PINFCONTEXT, ) -> BOOL1152     pub fn SetupGetLineByIndexA(
1153         InfHandle: HINF,
1154         Section: PCSTR,
1155         Index: DWORD,
1156         Context: PINFCONTEXT,
1157     ) -> BOOL;
SetupGetLineByIndexW( InfHandle: HINF, Section: PCWSTR, Index: DWORD, Context: PINFCONTEXT, ) -> BOOL1158     pub fn SetupGetLineByIndexW(
1159         InfHandle: HINF,
1160         Section: PCWSTR,
1161         Index: DWORD,
1162         Context: PINFCONTEXT,
1163     ) -> BOOL;
SetupGetLineCountA( InfHandle: HINF, Section: PCSTR, ) -> LONG1164     pub fn SetupGetLineCountA(
1165         InfHandle: HINF,
1166         Section: PCSTR,
1167     ) -> LONG;
SetupGetLineCountW( InfHandle: HINF, Section: PCWSTR, ) -> LONG1168     pub fn SetupGetLineCountW(
1169         InfHandle: HINF,
1170         Section: PCWSTR,
1171     ) -> LONG;
SetupGetLineTextA( Context: PINFCONTEXT, InfHandle: HINF, Section: PCSTR, Key: PCSTR, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, ReturnBufferSize: PDWORD, ) -> BOOL1172     pub fn SetupGetLineTextA(
1173         Context: PINFCONTEXT,
1174         InfHandle: HINF,
1175         Section: PCSTR,
1176         Key: PCSTR,
1177         ReturnBuffer: PSTR,
1178         ReturnBufferSize: DWORD,
1179         ReturnBufferSize: PDWORD,
1180     ) -> BOOL;
SetupGetLineTextW( Context: PINFCONTEXT, InfHandle: HINF, Section: PCWSTR, Key: PCWSTR, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, ReturnBufferSize: PDWORD, ) -> BOOL1181     pub fn SetupGetLineTextW(
1182         Context: PINFCONTEXT,
1183         InfHandle: HINF,
1184         Section: PCWSTR,
1185         Key: PCWSTR,
1186         ReturnBuffer: PWSTR,
1187         ReturnBufferSize: DWORD,
1188         ReturnBufferSize: PDWORD,
1189     ) -> BOOL;
SetupGetFieldCount( Context: PINFCONTEXT, ) -> DWORD1190     pub fn SetupGetFieldCount(
1191         Context: PINFCONTEXT,
1192     ) -> DWORD;
SetupGetStringFieldA( Context: PINFCONTEXT, FieldIndex: DWORD, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1193     pub fn SetupGetStringFieldA(
1194         Context: PINFCONTEXT,
1195         FieldIndex: DWORD,
1196         ReturnBuffer: PSTR,
1197         ReturnBufferSize: DWORD,
1198         RequiredSize: PDWORD,
1199     ) -> BOOL;
SetupGetStringFieldW( Context: PINFCONTEXT, FieldIndex: DWORD, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1200     pub fn SetupGetStringFieldW(
1201         Context: PINFCONTEXT,
1202         FieldIndex: DWORD,
1203         ReturnBuffer: PWSTR,
1204         ReturnBufferSize: DWORD,
1205         RequiredSize: PDWORD,
1206     ) -> BOOL;
SetupGetIntField( Context: PINFCONTEXT, FieldIndex: DWORD, IntegerValue: PINT, ) -> BOOL1207     pub fn SetupGetIntField(
1208         Context: PINFCONTEXT,
1209         FieldIndex: DWORD,
1210         IntegerValue: PINT,
1211     ) -> BOOL;
SetupGetMultiSzFieldA( Context: PINFCONTEXT, FieldIndex: DWORD, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: LPDWORD, ) -> BOOL1212     pub fn SetupGetMultiSzFieldA(
1213         Context: PINFCONTEXT,
1214         FieldIndex: DWORD,
1215         ReturnBuffer: PSTR,
1216         ReturnBufferSize: DWORD,
1217         RequiredSize: LPDWORD,
1218     ) -> BOOL;
SetupGetMultiSzFieldW( Context: PINFCONTEXT, FieldIndex: DWORD, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: LPDWORD, ) -> BOOL1219     pub fn SetupGetMultiSzFieldW(
1220         Context: PINFCONTEXT,
1221         FieldIndex: DWORD,
1222         ReturnBuffer: PWSTR,
1223         ReturnBufferSize: DWORD,
1224         RequiredSize: LPDWORD,
1225     ) -> BOOL;
SetupGetBinaryField( Context: PINFCONTEXT, FieldIndex: DWORD, ReturnBuffer: PBYTE, ReturnBufferSize: DWORD, RequiredSize: LPDWORD, ) -> BOOL1226     pub fn SetupGetBinaryField(
1227         Context: PINFCONTEXT,
1228         FieldIndex: DWORD,
1229         ReturnBuffer: PBYTE,
1230         ReturnBufferSize: DWORD,
1231         RequiredSize: LPDWORD,
1232     ) -> BOOL;
SetupGetFileCompressionInfoA( SourceFileName: PCSTR, ActualSourceFileName: *mut PSTR, SourceFileSize: PDWORD, TargetFileSize: PDWORD, CompressionType: PUINT, ) -> DWORD1233     pub fn SetupGetFileCompressionInfoA(
1234         SourceFileName: PCSTR,
1235         ActualSourceFileName: *mut PSTR,
1236         SourceFileSize: PDWORD,
1237         TargetFileSize: PDWORD,
1238         CompressionType: PUINT,
1239     ) -> DWORD;
SetupGetFileCompressionInfoW( SourceFileName: PCWSTR, ActualSourceFileName: *mut PWSTR, SourceFileSize: PDWORD, TargetFileSize: PDWORD, CompressionType: PUINT, ) -> DWORD1240     pub fn SetupGetFileCompressionInfoW(
1241         SourceFileName: PCWSTR,
1242         ActualSourceFileName: *mut PWSTR,
1243         SourceFileSize: PDWORD,
1244         TargetFileSize: PDWORD,
1245         CompressionType: PUINT,
1246     ) -> DWORD;
SetupGetFileCompressionInfoExA( SourceFileName: PCSTR, ActualSourceFileNameBuffer: PSTR, ActualSourceFileNameBufferLen: DWORD, RequiredBufferLen: PDWORD, SourceFileSize: PDWORD, TargetFileSize: PDWORD, CompressionType: PUINT, ) -> BOOL1247     pub fn SetupGetFileCompressionInfoExA(
1248         SourceFileName: PCSTR,
1249         ActualSourceFileNameBuffer: PSTR,
1250         ActualSourceFileNameBufferLen: DWORD,
1251         RequiredBufferLen: PDWORD,
1252         SourceFileSize: PDWORD,
1253         TargetFileSize: PDWORD,
1254         CompressionType: PUINT,
1255     ) -> BOOL;
SetupGetFileCompressionInfoExW( SourceFileName: PCWSTR, ActualSourceFileNameBuffer: PWSTR, ActualSourceFileNameBufferLen: DWORD, RequiredBufferLen: PDWORD, SourceFileSize: PDWORD, TargetFileSize: PDWORD, CompressionType: PUINT, ) -> BOOL1256     pub fn SetupGetFileCompressionInfoExW(
1257         SourceFileName: PCWSTR,
1258         ActualSourceFileNameBuffer: PWSTR,
1259         ActualSourceFileNameBufferLen: DWORD,
1260         RequiredBufferLen: PDWORD,
1261         SourceFileSize: PDWORD,
1262         TargetFileSize: PDWORD,
1263         CompressionType: PUINT,
1264     ) -> BOOL;
1265 }
1266 pub const FILE_COMPRESSION_NONE: UINT = 0;
1267 pub const FILE_COMPRESSION_WINLZA: UINT = 1;
1268 pub const FILE_COMPRESSION_MSZIP: UINT = 2;
1269 pub const FILE_COMPRESSION_NTCAB: UINT = 3;
1270 extern "system" {
SetupDecompressOrCopyFileA( SourceFileName: PCSTR, TargetFileName: PCSTR, CompressionType: PUINT, ) -> DWORD1271     pub fn SetupDecompressOrCopyFileA(
1272         SourceFileName: PCSTR,
1273         TargetFileName: PCSTR,
1274         CompressionType: PUINT,
1275     ) -> DWORD;
SetupDecompressOrCopyFileW( SourceFileName: PCWSTR, TargetFileName: PCWSTR, CompressionType: PUINT, ) -> DWORD1276     pub fn SetupDecompressOrCopyFileW(
1277         SourceFileName: PCWSTR,
1278         TargetFileName: PCWSTR,
1279         CompressionType: PUINT,
1280     ) -> DWORD;
SetupGetSourceFileLocationA( InfHandle: HINF, InfContext: PINFCONTEXT, FileName: PCSTR, SourceId: PUINT, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1281     pub fn SetupGetSourceFileLocationA(
1282         InfHandle: HINF,
1283         InfContext: PINFCONTEXT,
1284         FileName: PCSTR,
1285         SourceId: PUINT,
1286         ReturnBuffer: PSTR,
1287         ReturnBufferSize: DWORD,
1288         RequiredSize: PDWORD,
1289     ) -> BOOL;
SetupGetSourceFileLocationW( InfHandle: HINF, InfContext: PINFCONTEXT, FileName: PCWSTR, SourceId: PUINT, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1290     pub fn SetupGetSourceFileLocationW(
1291         InfHandle: HINF,
1292         InfContext: PINFCONTEXT,
1293         FileName: PCWSTR,
1294         SourceId: PUINT,
1295         ReturnBuffer: PWSTR,
1296         ReturnBufferSize: DWORD,
1297         RequiredSize: PDWORD,
1298     ) -> BOOL;
SetupGetSourceFileSizeA( InfHandle: HINF, InfContext: PINFCONTEXT, FileName: PCSTR, Section: PCSTR, FileSize: PDWORD, RoundingFactor: UINT, ) -> BOOL1299     pub fn SetupGetSourceFileSizeA(
1300         InfHandle: HINF,
1301         InfContext: PINFCONTEXT,
1302         FileName: PCSTR,
1303         Section: PCSTR,
1304         FileSize: PDWORD,
1305         RoundingFactor: UINT,
1306     ) -> BOOL;
SetupGetSourceFileSizeW( InfHandle: HINF, InfContext: PINFCONTEXT, FileName: PCWSTR, Section: PCWSTR, FileSize: PDWORD, RoundingFactor: UINT, ) -> BOOL1307     pub fn SetupGetSourceFileSizeW(
1308         InfHandle: HINF,
1309         InfContext: PINFCONTEXT,
1310         FileName: PCWSTR,
1311         Section: PCWSTR,
1312         FileSize: PDWORD,
1313         RoundingFactor: UINT,
1314     ) -> BOOL;
SetupGetTargetPathA( InfHandle: HINF, InfContext: PINFCONTEXT, Section: PCSTR, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1315     pub fn SetupGetTargetPathA(
1316         InfHandle: HINF,
1317         InfContext: PINFCONTEXT,
1318         Section: PCSTR,
1319         ReturnBuffer: PSTR,
1320         ReturnBufferSize: DWORD,
1321         RequiredSize: PDWORD,
1322     ) -> BOOL;
SetupGetTargetPathW( InfHandle: HINF, InfContext: PINFCONTEXT, Section: PCWSTR, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1323     pub fn SetupGetTargetPathW(
1324         InfHandle: HINF,
1325         InfContext: PINFCONTEXT,
1326         Section: PCWSTR,
1327         ReturnBuffer: PWSTR,
1328         ReturnBufferSize: DWORD,
1329         RequiredSize: PDWORD,
1330     ) -> BOOL;
1331 }
1332 pub const SRCLIST_TEMPORARY: DWORD = 0x00000001;
1333 pub const SRCLIST_NOBROWSE: DWORD = 0x00000002;
1334 pub const SRCLIST_SYSTEM: DWORD = 0x00000010;
1335 pub const SRCLIST_USER: DWORD = 0x00000020;
1336 pub const SRCLIST_SYSIFADMIN: DWORD = 0x00000040;
1337 pub const SRCLIST_SUBDIRS: DWORD = 0x00000100;
1338 pub const SRCLIST_APPEND: DWORD = 0x00000200;
1339 pub const SRCLIST_NOSTRIPPLATFORM: DWORD = 0x00000400;
1340 extern "system" {
SetupSetSourceListA( Flags: DWORD, SourceList: *mut PCSTR, SourceCount: UINT, ) -> BOOL1341     pub fn SetupSetSourceListA(
1342         Flags: DWORD,
1343         SourceList: *mut PCSTR,
1344         SourceCount: UINT,
1345     ) -> BOOL;
SetupSetSourceListW( Flags: DWORD, SourceList: *mut PCWSTR, SourceCount: UINT, ) -> BOOL1346     pub fn SetupSetSourceListW(
1347         Flags: DWORD,
1348         SourceList: *mut PCWSTR,
1349         SourceCount: UINT,
1350     ) -> BOOL;
SetupCancelTemporarySourceList() -> BOOL1351     pub fn SetupCancelTemporarySourceList() -> BOOL;
SetupAddToSourceListA( Flags: DWORD, Source: PCSTR, ) -> BOOL1352     pub fn SetupAddToSourceListA(
1353         Flags: DWORD,
1354         Source: PCSTR,
1355     ) -> BOOL;
SetupAddToSourceListW( Flags: DWORD, Source: PCWSTR, ) -> BOOL1356     pub fn SetupAddToSourceListW(
1357         Flags: DWORD,
1358         Source: PCWSTR,
1359     ) -> BOOL;
SetupRemoveFromSourceListA( Flags: DWORD, Source: PCSTR, ) -> BOOL1360     pub fn SetupRemoveFromSourceListA(
1361         Flags: DWORD,
1362         Source: PCSTR,
1363     ) -> BOOL;
SetupRemoveFromSourceListW( Flags: DWORD, Source: PCWSTR, ) -> BOOL1364     pub fn SetupRemoveFromSourceListW(
1365         Flags: DWORD,
1366         Source: PCWSTR,
1367     ) -> BOOL;
SetupQuerySourceListA( Flags: DWORD, List: *mut *mut PCSTR, Count: PUINT, ) -> BOOL1368     pub fn SetupQuerySourceListA(
1369         Flags: DWORD,
1370         List: *mut *mut PCSTR,
1371         Count: PUINT,
1372     ) -> BOOL;
SetupQuerySourceListW( Flags: DWORD, List: *mut *mut PCWSTR, Count: PUINT, ) -> BOOL1373     pub fn SetupQuerySourceListW(
1374         Flags: DWORD,
1375         List: *mut *mut PCWSTR,
1376         Count: PUINT,
1377     ) -> BOOL;
SetupFreeSourceListA( List: *mut *mut PCSTR, Count: UINT, ) -> BOOL1378     pub fn SetupFreeSourceListA(
1379         List: *mut *mut PCSTR,
1380         Count: UINT,
1381     ) -> BOOL;
SetupFreeSourceListW( List: *mut *mut PCWSTR, Count: UINT, ) -> BOOL1382     pub fn SetupFreeSourceListW(
1383         List: *mut *mut PCWSTR,
1384         Count: UINT,
1385     ) -> BOOL;
SetupPromptForDiskA( hwndParent: HWND, DialogTitle: PCSTR, DiskName: PCSTR, PathToSource: PCSTR, FileSought: PCSTR, TagFile: PCSTR, DiskPromptStyle: DWORD, PathBuffer: PSTR, PathBufferSize: DWORD, PathRequiredSize: PDWORD, ) -> UINT1386     pub fn SetupPromptForDiskA(
1387         hwndParent: HWND,
1388         DialogTitle: PCSTR,
1389         DiskName: PCSTR,
1390         PathToSource: PCSTR,
1391         FileSought: PCSTR,
1392         TagFile: PCSTR,
1393         DiskPromptStyle: DWORD,
1394         PathBuffer: PSTR,
1395         PathBufferSize: DWORD,
1396         PathRequiredSize: PDWORD,
1397     ) -> UINT;
SetupPromptForDiskW( hwndParent: HWND, DialogTitle: PCWSTR, DiskName: PCWSTR, PathToSource: PCWSTR, FileSought: PCWSTR, TagFile: PCWSTR, DiskPromptStyle: DWORD, PathBuffer: PWSTR, PathBufferSize: DWORD, PathRequiredSize: PDWORD, ) -> UINT1398     pub fn SetupPromptForDiskW(
1399         hwndParent: HWND,
1400         DialogTitle: PCWSTR,
1401         DiskName: PCWSTR,
1402         PathToSource: PCWSTR,
1403         FileSought: PCWSTR,
1404         TagFile: PCWSTR,
1405         DiskPromptStyle: DWORD,
1406         PathBuffer: PWSTR,
1407         PathBufferSize: DWORD,
1408         PathRequiredSize: PDWORD,
1409     ) -> UINT;
SetupCopyErrorA( hwndParent: HWND, DialogTitle: PCSTR, DiskName: PCSTR, PathToSource: PCSTR, SourceFile: PCSTR, TargetPathFile: PCSTR, Win32ErrorCode: UINT, Style: DWORD, PathBuffer: PSTR, PathBufferSize: DWORD, PathRequiredSize: PDWORD, ) -> UINT1410     pub fn SetupCopyErrorA(
1411         hwndParent: HWND,
1412         DialogTitle: PCSTR,
1413         DiskName: PCSTR,
1414         PathToSource: PCSTR,
1415         SourceFile: PCSTR,
1416         TargetPathFile: PCSTR,
1417         Win32ErrorCode: UINT,
1418         Style: DWORD,
1419         PathBuffer: PSTR,
1420         PathBufferSize: DWORD,
1421         PathRequiredSize: PDWORD,
1422     ) -> UINT;
SetupCopyErrorW( hwndParent: HWND, DialogTitle: PCWSTR, DiskName: PCWSTR, PathToSource: PCWSTR, SourceFile: PCWSTR, TargetPathFile: PCWSTR, Win32ErrorCode: UINT, Style: DWORD, PathBuffer: PWSTR, PathBufferSize: DWORD, PathRequiredSize: PDWORD, ) -> UINT1423     pub fn SetupCopyErrorW(
1424         hwndParent: HWND,
1425         DialogTitle: PCWSTR,
1426         DiskName: PCWSTR,
1427         PathToSource: PCWSTR,
1428         SourceFile: PCWSTR,
1429         TargetPathFile: PCWSTR,
1430         Win32ErrorCode: UINT,
1431         Style: DWORD,
1432         PathBuffer: PWSTR,
1433         PathBufferSize: DWORD,
1434         PathRequiredSize: PDWORD,
1435     ) -> UINT;
SetupRenameErrorA( hwndParent: HWND, DialogTitle: PCSTR, SourceFile: PCSTR, TargetFile: PCSTR, Win32ErrorCode: UINT, Style: DWORD, ) -> UINT1436     pub fn SetupRenameErrorA(
1437         hwndParent: HWND,
1438         DialogTitle: PCSTR,
1439         SourceFile: PCSTR,
1440         TargetFile: PCSTR,
1441         Win32ErrorCode: UINT,
1442         Style: DWORD,
1443     ) -> UINT;
SetupRenameErrorW( hwndParent: HWND, DialogTitle: PCWSTR, SourceFile: PCWSTR, TargetFile: PCWSTR, Win32ErrorCode: UINT, Style: DWORD, ) -> UINT1444     pub fn SetupRenameErrorW(
1445         hwndParent: HWND,
1446         DialogTitle: PCWSTR,
1447         SourceFile: PCWSTR,
1448         TargetFile: PCWSTR,
1449         Win32ErrorCode: UINT,
1450         Style: DWORD,
1451     ) -> UINT;
SetupDeleteErrorA( hwndParent: HWND, DialogTitle: PCSTR, File: PCSTR, Win32ErrorCode: UINT, Style: DWORD, ) -> UINT1452     pub fn SetupDeleteErrorA(
1453         hwndParent: HWND,
1454         DialogTitle: PCSTR,
1455         File: PCSTR,
1456         Win32ErrorCode: UINT,
1457         Style: DWORD,
1458     ) -> UINT;
SetupDeleteErrorW( hwndParent: HWND, DialogTitle: PCWSTR, File: PCWSTR, Win32ErrorCode: UINT, Style: DWORD, ) -> UINT1459     pub fn SetupDeleteErrorW(
1460         hwndParent: HWND,
1461         DialogTitle: PCWSTR,
1462         File: PCWSTR,
1463         Win32ErrorCode: UINT,
1464         Style: DWORD,
1465     ) -> UINT;
SetupBackupErrorA( hwndParent: HWND, DialogTitle: PCSTR, SourceFile: PCSTR, TargetFile: PCSTR, Win32ErrorCode: UINT, Style: DWORD, ) -> UINT1466     pub fn SetupBackupErrorA(
1467         hwndParent: HWND,
1468         DialogTitle: PCSTR,
1469         SourceFile: PCSTR,
1470         TargetFile: PCSTR,
1471         Win32ErrorCode: UINT,
1472         Style: DWORD,
1473     ) -> UINT;
SetupBackupErrorW( hwndParent: HWND, DialogTitle: PCWSTR, SourceFile: PCWSTR, TargetFile: PCWSTR, Win32ErrorCode: UINT, Style: DWORD, ) -> UINT1474     pub fn SetupBackupErrorW(
1475         hwndParent: HWND,
1476         DialogTitle: PCWSTR,
1477         SourceFile: PCWSTR,
1478         TargetFile: PCWSTR,
1479         Win32ErrorCode: UINT,
1480         Style: DWORD,
1481     ) -> UINT;
1482 }
1483 pub const IDF_NOBROWSE: DWORD = 0x00000001;
1484 pub const IDF_NOSKIP: DWORD = 0x00000002;
1485 pub const IDF_NODETAILS: DWORD = 0x00000004;
1486 pub const IDF_NOCOMPRESSED: DWORD = 0x00000008;
1487 pub const IDF_CHECKFIRST: DWORD = 0x00000100;
1488 pub const IDF_NOBEEP: DWORD = 0x00000200;
1489 pub const IDF_NOFOREGROUND: DWORD = 0x00000400;
1490 pub const IDF_WARNIFSKIP: DWORD = 0x00000800;
1491 pub const IDF_NOREMOVABLEMEDIAPROMPT: DWORD = 0x00001000;
1492 pub const IDF_USEDISKNAMEASPROMPT: DWORD = 0x00002000;
1493 pub const IDF_OEMDISK: DWORD = 0x80000000;
1494 pub const DPROMPT_SUCCESS: UINT = 0;
1495 pub const DPROMPT_CANCEL: UINT = 1;
1496 pub const DPROMPT_SKIPFILE: UINT = 2;
1497 pub const DPROMPT_BUFFERTOOSMALL: UINT = 3;
1498 pub const DPROMPT_OUTOFMEMORY: UINT = 4;
1499 extern "system" {
SetupSetDirectoryIdA( InfHandle: HINF, Id: DWORD, Directory: PCSTR, ) -> BOOL1500     pub fn SetupSetDirectoryIdA(
1501         InfHandle: HINF,
1502         Id: DWORD,
1503         Directory: PCSTR,
1504     ) -> BOOL;
SetupSetDirectoryIdW( InfHandle: HINF, Id: DWORD, Directory: PCWSTR, ) -> BOOL1505     pub fn SetupSetDirectoryIdW(
1506         InfHandle: HINF,
1507         Id: DWORD,
1508         Directory: PCWSTR,
1509     ) -> BOOL;
SetupSetDirectoryIdExA( InfHandle: HINF, Id: DWORD, Directory: PCSTR, Flags: DWORD, Reserved1: DWORD, Reserved2: PVOID, ) -> BOOL1510     pub fn SetupSetDirectoryIdExA(
1511         InfHandle: HINF,
1512         Id: DWORD,
1513         Directory: PCSTR,
1514         Flags: DWORD,
1515         Reserved1: DWORD,
1516         Reserved2: PVOID,
1517     ) -> BOOL;
SetupSetDirectoryIdExW( InfHandle: HINF, Id: DWORD, Directory: PCWSTR, Flags: DWORD, Reserved1: DWORD, Reserved2: PVOID, ) -> BOOL1518     pub fn SetupSetDirectoryIdExW(
1519         InfHandle: HINF,
1520         Id: DWORD,
1521         Directory: PCWSTR,
1522         Flags: DWORD,
1523         Reserved1: DWORD,
1524         Reserved2: PVOID,
1525     ) -> BOOL;
1526 }
1527 pub const SETDIRID_NOT_FULL_PATH: DWORD = 0x00000001;
1528 extern "system" {
SetupGetSourceInfoA( InfHandle: HINF, SourceId: UINT, InfoDesired: UINT, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1529     pub fn SetupGetSourceInfoA(
1530         InfHandle: HINF,
1531         SourceId: UINT,
1532         InfoDesired: UINT,
1533         ReturnBuffer: PSTR,
1534         ReturnBufferSize: DWORD,
1535         RequiredSize: PDWORD,
1536     ) -> BOOL;
SetupGetSourceInfoW( InfHandle: HINF, SourceId: UINT, InfoDesired: UINT, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1537     pub fn SetupGetSourceInfoW(
1538         InfHandle: HINF,
1539         SourceId: UINT,
1540         InfoDesired: UINT,
1541         ReturnBuffer: PWSTR,
1542         ReturnBufferSize: DWORD,
1543         RequiredSize: PDWORD,
1544     ) -> BOOL;
1545 }
1546 pub const SRCINFO_PATH: UINT = 1;
1547 pub const SRCINFO_TAGFILE: UINT = 2;
1548 pub const SRCINFO_DESCRIPTION: UINT = 3;
1549 pub const SRCINFO_FLAGS: UINT = 4;
1550 pub const SRCINFO_TAGFILE2: UINT = 4;
1551 pub const SRC_FLAGS_CABFILE: UINT = 0x0010;
1552 extern "system" {
SetupInstallFileA( InfHandle: HINF, InfContext: PINFCONTEXT, SourceFile: PCSTR, SourcePathRoot: PCSTR, DestinationName: PCSTR, CopyStyle: DWORD, CopyMsgHandler: PSP_FILE_CALLBACK_A, Context: PVOID, ) -> BOOL1553     pub fn SetupInstallFileA(
1554         InfHandle: HINF,
1555         InfContext: PINFCONTEXT,
1556         SourceFile: PCSTR,
1557         SourcePathRoot: PCSTR,
1558         DestinationName: PCSTR,
1559         CopyStyle: DWORD,
1560         CopyMsgHandler: PSP_FILE_CALLBACK_A,
1561         Context: PVOID,
1562     ) -> BOOL;
SetupInstallFileW( InfHandle: HINF, InfContext: PINFCONTEXT, SourceFile: PCWSTR, SourcePathRoot: PCWSTR, DestinationName: PCWSTR, CopyStyle: DWORD, CopyMsgHandler: PSP_FILE_CALLBACK_W, Context: PVOID, ) -> BOOL1563     pub fn SetupInstallFileW(
1564         InfHandle: HINF,
1565         InfContext: PINFCONTEXT,
1566         SourceFile: PCWSTR,
1567         SourcePathRoot: PCWSTR,
1568         DestinationName: PCWSTR,
1569         CopyStyle: DWORD,
1570         CopyMsgHandler: PSP_FILE_CALLBACK_W,
1571         Context: PVOID,
1572     ) -> BOOL;
SetupInstallFileExA( InfHandle: HINF, InfContext: PINFCONTEXT, SourceFile: PCSTR, SourcePathRoot: PCSTR, DestinationName: PCSTR, CopyStyle: DWORD, CopyMsgHandler: PSP_FILE_CALLBACK_A, Context: PVOID, FileWasInUse: PBOOL, ) -> BOOL1573     pub fn SetupInstallFileExA(
1574         InfHandle: HINF,
1575         InfContext: PINFCONTEXT,
1576         SourceFile: PCSTR,
1577         SourcePathRoot: PCSTR,
1578         DestinationName: PCSTR,
1579         CopyStyle: DWORD,
1580         CopyMsgHandler: PSP_FILE_CALLBACK_A,
1581         Context: PVOID,
1582         FileWasInUse: PBOOL,
1583     ) -> BOOL;
SetupInstallFileExW( InfHandle: HINF, InfContext: PINFCONTEXT, SourceFile: PCWSTR, SourcePathRoot: PCWSTR, DestinationName: PCWSTR, CopyStyle: DWORD, CopyMsgHandler: PSP_FILE_CALLBACK_W, Context: PVOID, FileWasInUse: PBOOL, ) -> BOOL1584     pub fn SetupInstallFileExW(
1585         InfHandle: HINF,
1586         InfContext: PINFCONTEXT,
1587         SourceFile: PCWSTR,
1588         SourcePathRoot: PCWSTR,
1589         DestinationName: PCWSTR,
1590         CopyStyle: DWORD,
1591         CopyMsgHandler: PSP_FILE_CALLBACK_W,
1592         Context: PVOID,
1593         FileWasInUse: PBOOL,
1594     ) -> BOOL;
1595 }
1596 pub const SP_COPY_DELETESOURCE: DWORD = 0x0000001;
1597 pub const SP_COPY_REPLACEONLY: DWORD = 0x0000002;
1598 pub const SP_COPY_NEWER: DWORD = 0x0000004;
1599 pub const SP_COPY_NEWER_OR_SAME: DWORD = SP_COPY_NEWER;
1600 pub const SP_COPY_NOOVERWRITE: DWORD = 0x0000008;
1601 pub const SP_COPY_NODECOMP: DWORD = 0x0000010;
1602 pub const SP_COPY_LANGUAGEAWARE: DWORD = 0x0000020;
1603 pub const SP_COPY_SOURCE_ABSOLUTE: DWORD = 0x0000040;
1604 pub const SP_COPY_SOURCEPATH_ABSOLUTE: DWORD = 0x0000080;
1605 pub const SP_COPY_IN_USE_NEEDS_REBOOT: DWORD = 0x0000100;
1606 pub const SP_COPY_FORCE_IN_USE: DWORD = 0x0000200;
1607 pub const SP_COPY_NOSKIP: DWORD = 0x0000400;
1608 pub const SP_FLAG_CABINETCONTINUATION: DWORD = 0x0000800;
1609 pub const SP_COPY_FORCE_NOOVERWRITE: DWORD = 0x0001000;
1610 pub const SP_COPY_FORCE_NEWER: DWORD = 0x0002000;
1611 pub const SP_COPY_WARNIFSKIP: DWORD = 0x0004000;
1612 pub const SP_COPY_NOBROWSE: DWORD = 0x0008000;
1613 pub const SP_COPY_NEWER_ONLY: DWORD = 0x0010000;
1614 pub const SP_COPY_RESERVED: DWORD = 0x0020000;
1615 pub const SP_COPY_OEMINF_CATALOG_ONLY: DWORD = 0x0040000;
1616 pub const SP_COPY_REPLACE_BOOT_FILE: DWORD = 0x0080000;
1617 pub const SP_COPY_NOPRUNE: DWORD = 0x0100000;
1618 pub const SP_COPY_OEM_F6_INF: DWORD = 0x0200000;
1619 pub const SP_COPY_ALREADYDECOMP: DWORD = 0x0400000;
1620 pub const SP_COPY_WINDOWS_SIGNED: DWORD = 0x1000000;
1621 pub const SP_COPY_PNPLOCKED: DWORD = 0x2000000;
1622 pub const SP_COPY_IN_USE_TRY_RENAME: DWORD = 0x4000000;
1623 pub const SP_COPY_INBOX_INF: DWORD = 0x8000000;
1624 pub const SP_COPY_HARDLINK: DWORD = 0x10000000;
1625 pub const SP_BACKUP_BACKUPPASS: DWORD = 0x00000001;
1626 pub const SP_BACKUP_DEMANDPASS: DWORD = 0x00000002;
1627 pub const SP_BACKUP_SPECIAL: DWORD = 0x00000004;
1628 pub const SP_BACKUP_BOOTFILE: DWORD = 0x00000008;
1629 extern "system" {
SetupOpenFileQueue( ) -> HSPFILEQ1630     pub fn SetupOpenFileQueue(
1631     ) -> HSPFILEQ;
SetupCloseFileQueue( QueueHandle: HSPFILEQ, ) -> BOOL1632     pub fn SetupCloseFileQueue(
1633         QueueHandle: HSPFILEQ,
1634     ) -> BOOL;
SetupSetFileQueueAlternatePlatformA( QueueHandle: HSPFILEQ, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, AlternateDefaultCatalogFile: PCSTR, ) -> BOOL1635     pub fn SetupSetFileQueueAlternatePlatformA(
1636         QueueHandle: HSPFILEQ,
1637         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
1638         AlternateDefaultCatalogFile: PCSTR,
1639     ) -> BOOL;
SetupSetFileQueueAlternatePlatformW( QueueHandle: HSPFILEQ, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, AlternateDefaultCatalogFile: PCWSTR, ) -> BOOL1640     pub fn SetupSetFileQueueAlternatePlatformW(
1641         QueueHandle: HSPFILEQ,
1642         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
1643         AlternateDefaultCatalogFile: PCWSTR,
1644     ) -> BOOL;
SetupSetPlatformPathOverrideA( Override: PCSTR, ) -> BOOL1645     pub fn SetupSetPlatformPathOverrideA(
1646         Override: PCSTR,
1647     ) -> BOOL;
SetupSetPlatformPathOverrideW( Override: PCWSTR, ) -> BOOL1648     pub fn SetupSetPlatformPathOverrideW(
1649         Override: PCWSTR,
1650     ) -> BOOL;
SetupQueueCopyA( QueueHandle: HSPFILEQ, SourceRootPath: PCSTR, SourcePath: PCSTR, SourceFilename: PCSTR, SourceDescription: PCSTR, SourceTagfile: PCSTR, TargetDirectory: PCSTR, TargetFilename: PCSTR, CopyStyle: DWORD, ) -> BOOL1651     pub fn SetupQueueCopyA(
1652         QueueHandle: HSPFILEQ,
1653         SourceRootPath: PCSTR,
1654         SourcePath: PCSTR,
1655         SourceFilename: PCSTR,
1656         SourceDescription: PCSTR,
1657         SourceTagfile: PCSTR,
1658         TargetDirectory: PCSTR,
1659         TargetFilename: PCSTR,
1660         CopyStyle: DWORD,
1661     ) -> BOOL;
SetupQueueCopyW( QueueHandle: HSPFILEQ, SourceRootPath: PCWSTR, SourcePath: PCWSTR, SourceFilename: PCWSTR, SourceDescription: PCWSTR, SourceTagfile: PCWSTR, TargetDirectory: PCWSTR, TargetFilename: PCWSTR, CopyStyle: DWORD, ) -> BOOL1662     pub fn SetupQueueCopyW(
1663         QueueHandle: HSPFILEQ,
1664         SourceRootPath: PCWSTR,
1665         SourcePath: PCWSTR,
1666         SourceFilename: PCWSTR,
1667         SourceDescription: PCWSTR,
1668         SourceTagfile: PCWSTR,
1669         TargetDirectory: PCWSTR,
1670         TargetFilename: PCWSTR,
1671         CopyStyle: DWORD,
1672     ) -> BOOL;
SetupQueueCopyIndirectA( CopyParams: PSP_FILE_COPY_PARAMS_A, ) -> BOOL1673     pub fn SetupQueueCopyIndirectA(
1674         CopyParams: PSP_FILE_COPY_PARAMS_A,
1675     ) -> BOOL;
SetupQueueCopyIndirectW( CopyParams: PSP_FILE_COPY_PARAMS_W, ) -> BOOL1676     pub fn SetupQueueCopyIndirectW(
1677         CopyParams: PSP_FILE_COPY_PARAMS_W,
1678     ) -> BOOL;
SetupQueueDefaultCopyA( QueueHandle: HSPFILEQ, InfHandle: HINF, SourceRootPath: PCSTR, SourceFilename: PCSTR, TargetFilename: PCSTR, CopyStyle: DWORD, ) -> BOOL1679     pub fn SetupQueueDefaultCopyA(
1680         QueueHandle: HSPFILEQ,
1681         InfHandle: HINF,
1682         SourceRootPath: PCSTR,
1683         SourceFilename: PCSTR,
1684         TargetFilename: PCSTR,
1685         CopyStyle: DWORD,
1686     ) -> BOOL;
SetupQueueDefaultCopyW( QueueHandle: HSPFILEQ, InfHandle: HINF, SourceRootPath: PCWSTR, SourceFilename: PCWSTR, TargetFilename: PCWSTR, CopyStyle: DWORD, ) -> BOOL1687     pub fn SetupQueueDefaultCopyW(
1688         QueueHandle: HSPFILEQ,
1689         InfHandle: HINF,
1690         SourceRootPath: PCWSTR,
1691         SourceFilename: PCWSTR,
1692         TargetFilename: PCWSTR,
1693         CopyStyle: DWORD,
1694     ) -> BOOL;
SetupQueueCopySectionA( QueueHandle: HSPFILEQ, SourceRootPath: PCSTR, InfHandle: HINF, ListInfHandle: HINF, Section: PCSTR, CopyStyle: DWORD, ) -> BOOL1695     pub fn SetupQueueCopySectionA(
1696         QueueHandle: HSPFILEQ,
1697         SourceRootPath: PCSTR,
1698         InfHandle: HINF,
1699         ListInfHandle: HINF,
1700         Section: PCSTR,
1701         CopyStyle: DWORD,
1702     ) -> BOOL;
SetupQueueCopySectionW( QueueHandle: HSPFILEQ, SourceRootPath: PCWSTR, InfHandle: HINF, ListInfHandle: HINF, Section: PCWSTR, CopyStyle: DWORD, ) -> BOOL1703     pub fn SetupQueueCopySectionW(
1704         QueueHandle: HSPFILEQ,
1705         SourceRootPath: PCWSTR,
1706         InfHandle: HINF,
1707         ListInfHandle: HINF,
1708         Section: PCWSTR,
1709         CopyStyle: DWORD,
1710     ) -> BOOL;
SetupQueueDeleteA( QueueHandle: HSPFILEQ, PathPart1: PCSTR, PathPart2: PCSTR, ) -> BOOL1711     pub fn SetupQueueDeleteA(
1712         QueueHandle: HSPFILEQ,
1713         PathPart1: PCSTR,
1714         PathPart2: PCSTR,
1715     ) -> BOOL;
SetupQueueDeleteW( QueueHandle: HSPFILEQ, PathPart1: PCWSTR, PathPart2: PCWSTR, ) -> BOOL1716     pub fn SetupQueueDeleteW(
1717         QueueHandle: HSPFILEQ,
1718         PathPart1: PCWSTR,
1719         PathPart2: PCWSTR,
1720     ) -> BOOL;
SetupQueueDeleteSectionA( QueueHandle: HSPFILEQ, InfHandle: HINF, ListInfHandle: HINF, Section: PCSTR, ) -> BOOL1721     pub fn SetupQueueDeleteSectionA(
1722         QueueHandle: HSPFILEQ,
1723         InfHandle: HINF,
1724         ListInfHandle: HINF,
1725         Section: PCSTR,
1726     ) -> BOOL;
SetupQueueDeleteSectionW( QueueHandle: HSPFILEQ, InfHandle: HINF, ListInfHandle: HINF, Section: PCWSTR, ) -> BOOL1727     pub fn SetupQueueDeleteSectionW(
1728         QueueHandle: HSPFILEQ,
1729         InfHandle: HINF,
1730         ListInfHandle: HINF,
1731         Section: PCWSTR,
1732     ) -> BOOL;
SetupQueueRenameA( QueueHandle: HSPFILEQ, SourcePath: PCSTR, SourceFilename: PCSTR, TargetPath: PCSTR, TargetFilename: PCSTR, ) -> BOOL1733     pub fn SetupQueueRenameA(
1734         QueueHandle: HSPFILEQ,
1735         SourcePath: PCSTR,
1736         SourceFilename: PCSTR,
1737         TargetPath: PCSTR,
1738         TargetFilename: PCSTR,
1739     ) -> BOOL;
SetupQueueRenameW( QueueHandle: HSPFILEQ, SourcePath: PCWSTR, SourceFilename: PCWSTR, TargetPath: PCWSTR, TargetFilename: PCWSTR, ) -> BOOL1740     pub fn SetupQueueRenameW(
1741         QueueHandle: HSPFILEQ,
1742         SourcePath: PCWSTR,
1743         SourceFilename: PCWSTR,
1744         TargetPath: PCWSTR,
1745         TargetFilename: PCWSTR,
1746     ) -> BOOL;
SetupQueueRenameSectionA( QueueHandle: HSPFILEQ, InfHandle: HINF, ListInfHandle: HINF, Section: PCSTR, ) -> BOOL1747     pub fn SetupQueueRenameSectionA(
1748         QueueHandle: HSPFILEQ,
1749         InfHandle: HINF,
1750         ListInfHandle: HINF,
1751         Section: PCSTR,
1752     ) -> BOOL;
SetupQueueRenameSectionW( QueueHandle: HSPFILEQ, InfHandle: HINF, ListInfHandle: HINF, Section: PCWSTR, ) -> BOOL1753     pub fn SetupQueueRenameSectionW(
1754         QueueHandle: HSPFILEQ,
1755         InfHandle: HINF,
1756         ListInfHandle: HINF,
1757         Section: PCWSTR,
1758     ) -> BOOL;
SetupCommitFileQueueA( Owner: HWND, QueueHandle: HSPFILEQ, MsgHandler: PSP_FILE_CALLBACK_A, Context: PVOID, ) -> BOOL1759     pub fn SetupCommitFileQueueA(
1760         Owner: HWND,
1761         QueueHandle: HSPFILEQ,
1762         MsgHandler: PSP_FILE_CALLBACK_A,
1763         Context: PVOID,
1764     ) -> BOOL;
SetupCommitFileQueueW( Owner: HWND, QueueHandle: HSPFILEQ, MsgHandler: PSP_FILE_CALLBACK_W, Context: PVOID, ) -> BOOL1765     pub fn SetupCommitFileQueueW(
1766         Owner: HWND,
1767         QueueHandle: HSPFILEQ,
1768         MsgHandler: PSP_FILE_CALLBACK_W,
1769         Context: PVOID,
1770     ) -> BOOL;
SetupScanFileQueueA( FileQueue: HSPFILEQ, Flags: DWORD, Window: HWND, CallbackRoutine: PSP_FILE_CALLBACK_A, CallbackContext: PVOID, Result: PDWORD, ) -> BOOL1771     pub fn SetupScanFileQueueA(
1772         FileQueue: HSPFILEQ,
1773         Flags: DWORD,
1774         Window: HWND,
1775         CallbackRoutine: PSP_FILE_CALLBACK_A,
1776         CallbackContext: PVOID,
1777         Result: PDWORD,
1778     ) -> BOOL;
SetupScanFileQueueW( FileQueue: HSPFILEQ, Flags: DWORD, Window: HWND, CallbackRoutine: PSP_FILE_CALLBACK_W, CallbackContext: PVOID, Result: PDWORD, ) -> BOOL1779     pub fn SetupScanFileQueueW(
1780         FileQueue: HSPFILEQ,
1781         Flags: DWORD,
1782         Window: HWND,
1783         CallbackRoutine: PSP_FILE_CALLBACK_W,
1784         CallbackContext: PVOID,
1785         Result: PDWORD,
1786     ) -> BOOL;
1787 }
1788 pub const SPQ_SCAN_FILE_PRESENCE: DWORD = 0x00000001;
1789 pub const SPQ_SCAN_FILE_VALIDITY: DWORD = 0x00000002;
1790 pub const SPQ_SCAN_USE_CALLBACK: DWORD = 0x00000004;
1791 pub const SPQ_SCAN_USE_CALLBACKEX: DWORD = 0x00000008;
1792 pub const SPQ_SCAN_INFORM_USER: DWORD = 0x00000010;
1793 pub const SPQ_SCAN_PRUNE_COPY_QUEUE: DWORD = 0x00000020;
1794 pub const SPQ_SCAN_USE_CALLBACK_SIGNERINFO: DWORD = 0x00000040;
1795 pub const SPQ_SCAN_PRUNE_DELREN: DWORD = 0x00000080;
1796 pub const SPQ_SCAN_FILE_PRESENCE_WITHOUT_SOURCE: DWORD = 0x00000100;
1797 pub const SPQ_SCAN_FILE_COMPARISON: DWORD = 0x00000200;
1798 pub const SPQ_SCAN_ACTIVATE_DRP: DWORD = 0x00000400;
1799 pub const SPQ_DELAYED_COPY: DWORD = 0x00000001;
1800 extern "system" {
SetupGetFileQueueCount( FileQueue: HSPFILEQ, SubQueueFileOp: UINT, NumOperations: PUINT, ) -> BOOL1801     pub fn SetupGetFileQueueCount(
1802         FileQueue: HSPFILEQ,
1803         SubQueueFileOp: UINT,
1804         NumOperations: PUINT,
1805     ) -> BOOL;
SetupGetFileQueueFlags( FileQueue: HSPFILEQ, Flags: PDWORD, ) -> BOOL1806     pub fn SetupGetFileQueueFlags(
1807         FileQueue: HSPFILEQ,
1808         Flags: PDWORD,
1809     ) -> BOOL;
SetupSetFileQueueFlags( FileQueue: HSPFILEQ, FlagMask: DWORD, Flags: DWORD, ) -> BOOL1810     pub fn SetupSetFileQueueFlags(
1811         FileQueue: HSPFILEQ,
1812         FlagMask: DWORD,
1813         Flags: DWORD,
1814     ) -> BOOL;
1815 }
1816 pub const SPQ_FLAG_BACKUP_AWARE: DWORD = 0x00000001;
1817 pub const SPQ_FLAG_ABORT_IF_UNSIGNED: DWORD = 0x00000002;
1818 pub const SPQ_FLAG_FILES_MODIFIED: DWORD = 0x00000004;
1819 pub const SPQ_FLAG_DO_SHUFFLEMOVE: DWORD = 0x00000008;
1820 pub const SPQ_FLAG_VALID: DWORD = 0x0000000F;
1821 pub const SPOST_NONE: DWORD = 0;
1822 pub const SPOST_PATH: DWORD = 1;
1823 pub const SPOST_URL: DWORD = 2;
1824 pub const SPOST_MAX: DWORD = 3;
1825 extern "system" {
SetupCopyOEMInfA( SourceInfFileName: PCSTR, OEMSourceMediaLocation: PCSTR, OEMSourceMediaType: DWORD, CopyStyle: DWORD, DestinationInfFileName: PSTR, DestinationInfFileNameSize: DWORD, RequiredSize: PDWORD, DestinationInfFileNameComponent: *mut PSTR, ) -> BOOL1826     pub fn SetupCopyOEMInfA(
1827         SourceInfFileName: PCSTR,
1828         OEMSourceMediaLocation: PCSTR,
1829         OEMSourceMediaType: DWORD,
1830         CopyStyle: DWORD,
1831         DestinationInfFileName: PSTR,
1832         DestinationInfFileNameSize: DWORD,
1833         RequiredSize: PDWORD,
1834         DestinationInfFileNameComponent: *mut PSTR,
1835     ) -> BOOL;
SetupCopyOEMInfW( SourceInfFileName: PCWSTR, OEMSourceMediaLocation: PCWSTR, OEMSourceMediaType: DWORD, CopyStyle: DWORD, DestinationInfFileName: PWSTR, DestinationInfFileNameSize: DWORD, RequiredSize: PDWORD, DestinationInfFileNameComponent: *mut PWSTR, ) -> BOOL1836     pub fn SetupCopyOEMInfW(
1837         SourceInfFileName: PCWSTR,
1838         OEMSourceMediaLocation: PCWSTR,
1839         OEMSourceMediaType: DWORD,
1840         CopyStyle: DWORD,
1841         DestinationInfFileName: PWSTR,
1842         DestinationInfFileNameSize: DWORD,
1843         RequiredSize: PDWORD,
1844         DestinationInfFileNameComponent: *mut PWSTR,
1845     ) -> BOOL;
1846 }
1847 pub const SUOI_FORCEDELETE: DWORD = 0x00000001;
1848 pub const SUOI_INTERNAL1: DWORD = 0x00000002;
1849 extern "system" {
SetupUninstallOEMInfA( InfFileName: PCSTR, Flags: DWORD, Reserved: PVOID, ) -> BOOL1850     pub fn SetupUninstallOEMInfA(
1851         InfFileName: PCSTR,
1852         Flags: DWORD,
1853         Reserved: PVOID,
1854     ) -> BOOL;
SetupUninstallOEMInfW( InfFileName: PCWSTR, Flags: DWORD, Reserved: PVOID, ) -> BOOL1855     pub fn SetupUninstallOEMInfW(
1856         InfFileName: PCWSTR,
1857         Flags: DWORD,
1858         Reserved: PVOID,
1859     ) -> BOOL;
SetupUninstallNewlyCopiedInfs( FileQueue: HSPFILEQ, Flags: DWORD, Reserved: PVOID, ) -> BOOL1860     pub fn SetupUninstallNewlyCopiedInfs(
1861         FileQueue: HSPFILEQ,
1862         Flags: DWORD,
1863         Reserved: PVOID,
1864     ) -> BOOL;
SetupCreateDiskSpaceListA( Reserved1: PVOID, Reserved2: DWORD, Flags: UINT, ) -> HDSKSPC1865     pub fn SetupCreateDiskSpaceListA(
1866         Reserved1: PVOID,
1867         Reserved2: DWORD,
1868         Flags: UINT,
1869     ) -> HDSKSPC;
SetupCreateDiskSpaceListW( Reserved1: PVOID, Reserved2: DWORD, Flags: UINT, ) -> HDSKSPC1870     pub fn SetupCreateDiskSpaceListW(
1871         Reserved1: PVOID,
1872         Reserved2: DWORD,
1873         Flags: UINT,
1874     ) -> HDSKSPC;
1875 }
1876 pub const SPDSL_IGNORE_DISK: UINT = 0x00000001;
1877 pub const SPDSL_DISALLOW_NEGATIVE_ADJUST: UINT = 0x00000002;
1878 extern "system" {
SetupDuplicateDiskSpaceListA( DiskSpace: HDSKSPC, Reserved1: PVOID, Reserved2: DWORD, Flags: UINT, ) -> HDSKSPC1879     pub fn SetupDuplicateDiskSpaceListA(
1880         DiskSpace: HDSKSPC,
1881         Reserved1: PVOID,
1882         Reserved2: DWORD,
1883         Flags: UINT,
1884     ) -> HDSKSPC;
SetupDuplicateDiskSpaceListW( DiskSpace: HDSKSPC, Reserved1: PVOID, Reserved2: DWORD, Flags: UINT, ) -> HDSKSPC1885     pub fn SetupDuplicateDiskSpaceListW(
1886         DiskSpace: HDSKSPC,
1887         Reserved1: PVOID,
1888         Reserved2: DWORD,
1889         Flags: UINT,
1890     ) -> HDSKSPC;
SetupDestroyDiskSpaceList( DiskSpace: HDSKSPC, ) -> BOOL1891     pub fn SetupDestroyDiskSpaceList(
1892         DiskSpace: HDSKSPC,
1893     ) -> BOOL;
SetupQueryDrivesInDiskSpaceListA( DiskSpace: HDSKSPC, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1894     pub fn SetupQueryDrivesInDiskSpaceListA(
1895         DiskSpace: HDSKSPC,
1896         ReturnBuffer: PSTR,
1897         ReturnBufferSize: DWORD,
1898         RequiredSize: PDWORD,
1899     ) -> BOOL;
SetupQueryDrivesInDiskSpaceListW( DiskSpace: HDSKSPC, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1900     pub fn SetupQueryDrivesInDiskSpaceListW(
1901         DiskSpace: HDSKSPC,
1902         ReturnBuffer: PWSTR,
1903         ReturnBufferSize: DWORD,
1904         RequiredSize: PDWORD,
1905     ) -> BOOL;
SetupQuerySpaceRequiredOnDriveA( DiskSpace: HDSKSPC, DriveSpec: PCSTR, SpaceRequired: *mut LONGLONG, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1906     pub fn SetupQuerySpaceRequiredOnDriveA(
1907         DiskSpace: HDSKSPC,
1908         DriveSpec: PCSTR,
1909         SpaceRequired: *mut LONGLONG,
1910         Reserved1: PVOID,
1911         Reserved2: UINT,
1912     ) -> BOOL;
SetupQuerySpaceRequiredOnDriveW( DiskSpace: HDSKSPC, DriveSpec: PCWSTR, SpaceRequired: *mut LONGLONG, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1913     pub fn SetupQuerySpaceRequiredOnDriveW(
1914         DiskSpace: HDSKSPC,
1915         DriveSpec: PCWSTR,
1916         SpaceRequired: *mut LONGLONG,
1917         Reserved1: PVOID,
1918         Reserved2: UINT,
1919     ) -> BOOL;
SetupAdjustDiskSpaceListA( DiskSpace: HDSKSPC, DriveRoot: LPCSTR, Amount: LONGLONG, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1920     pub fn SetupAdjustDiskSpaceListA(
1921         DiskSpace: HDSKSPC,
1922         DriveRoot: LPCSTR,
1923         Amount: LONGLONG,
1924         Reserved1: PVOID,
1925         Reserved2: UINT,
1926     ) -> BOOL;
SetupAdjustDiskSpaceListW( DiskSpace: HDSKSPC, DriveRoot: LPCWSTR, Amount: LONGLONG, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1927     pub fn SetupAdjustDiskSpaceListW(
1928         DiskSpace: HDSKSPC,
1929         DriveRoot: LPCWSTR,
1930         Amount: LONGLONG,
1931         Reserved1: PVOID,
1932         Reserved2: UINT,
1933     ) -> BOOL;
SetupAddToDiskSpaceListA( DiskSpace: HDSKSPC, TargetFilespec: PCSTR, FileSize: LONGLONG, Operation: UINT, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1934     pub fn SetupAddToDiskSpaceListA(
1935         DiskSpace: HDSKSPC,
1936         TargetFilespec: PCSTR,
1937         FileSize: LONGLONG,
1938         Operation: UINT,
1939         Reserved1: PVOID,
1940         Reserved2: UINT,
1941     ) -> BOOL;
SetupAddToDiskSpaceListW( DiskSpace: HDSKSPC, TargetFilespec: PCWSTR, FileSize: LONGLONG, Operation: UINT, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1942     pub fn SetupAddToDiskSpaceListW(
1943         DiskSpace: HDSKSPC,
1944         TargetFilespec: PCWSTR,
1945         FileSize: LONGLONG,
1946         Operation: UINT,
1947         Reserved1: PVOID,
1948         Reserved2: UINT,
1949     ) -> BOOL;
SetupAddSectionToDiskSpaceListA( DiskSpace: HDSKSPC, InfHandle: HINF, ListInfHandle: HINF, SectionName: PCSTR, Operation: UINT, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1950     pub fn SetupAddSectionToDiskSpaceListA(
1951         DiskSpace: HDSKSPC,
1952         InfHandle: HINF,
1953         ListInfHandle: HINF,
1954         SectionName: PCSTR,
1955         Operation: UINT,
1956         Reserved1: PVOID,
1957         Reserved2: UINT,
1958     ) -> BOOL;
SetupAddSectionToDiskSpaceListW( DiskSpace: HDSKSPC, InfHandle: HINF, ListInfHandle: HINF, SectionName: PCWSTR, Operation: UINT, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1959     pub fn SetupAddSectionToDiskSpaceListW(
1960         DiskSpace: HDSKSPC,
1961         InfHandle: HINF,
1962         ListInfHandle: HINF,
1963         SectionName: PCWSTR,
1964         Operation: UINT,
1965         Reserved1: PVOID,
1966         Reserved2: UINT,
1967     ) -> BOOL;
SetupAddInstallSectionToDiskSpaceListA( DiskSpace: HDSKSPC, InfHandle: HINF, LayoutInfHandle: HINF, SectionName: PCSTR, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1968     pub fn SetupAddInstallSectionToDiskSpaceListA(
1969         DiskSpace: HDSKSPC,
1970         InfHandle: HINF,
1971         LayoutInfHandle: HINF,
1972         SectionName: PCSTR,
1973         Reserved1: PVOID,
1974         Reserved2: UINT,
1975     ) -> BOOL;
SetupAddInstallSectionToDiskSpaceListW( DiskSpace: HDSKSPC, InfHandle: HINF, LayoutInfHandle: HINF, SectionName: PCWSTR, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1976     pub fn SetupAddInstallSectionToDiskSpaceListW(
1977         DiskSpace: HDSKSPC,
1978         InfHandle: HINF,
1979         LayoutInfHandle: HINF,
1980         SectionName: PCWSTR,
1981         Reserved1: PVOID,
1982         Reserved2: UINT,
1983     ) -> BOOL;
SetupRemoveFromDiskSpaceListA( DiskSpace: HDSKSPC, TargetFilespec: PCSTR, Operation: UINT, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1984     pub fn SetupRemoveFromDiskSpaceListA(
1985         DiskSpace: HDSKSPC,
1986         TargetFilespec: PCSTR,
1987         Operation: UINT,
1988         Reserved1: PVOID,
1989         Reserved2: UINT,
1990     ) -> BOOL;
SetupRemoveFromDiskSpaceListW( DiskSpace: HDSKSPC, TargetFilespec: PCWSTR, Operation: UINT, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1991     pub fn SetupRemoveFromDiskSpaceListW(
1992         DiskSpace: HDSKSPC,
1993         TargetFilespec: PCWSTR,
1994         Operation: UINT,
1995         Reserved1: PVOID,
1996         Reserved2: UINT,
1997     ) -> BOOL;
SetupRemoveSectionFromDiskSpaceListA( DiskSpace: HDSKSPC, InfHandle: HINF, ListInfHandle: HINF, SectionName: PCSTR, Operation: UINT, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1998     pub fn SetupRemoveSectionFromDiskSpaceListA(
1999         DiskSpace: HDSKSPC,
2000         InfHandle: HINF,
2001         ListInfHandle: HINF,
2002         SectionName: PCSTR,
2003         Operation: UINT,
2004         Reserved1: PVOID,
2005         Reserved2: UINT,
2006     ) -> BOOL;
SetupRemoveSectionFromDiskSpaceListW( DiskSpace: HDSKSPC, InfHandle: HINF, ListInfHandle: HINF, SectionName: PCWSTR, Operation: UINT, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL2007     pub fn SetupRemoveSectionFromDiskSpaceListW(
2008         DiskSpace: HDSKSPC,
2009         InfHandle: HINF,
2010         ListInfHandle: HINF,
2011         SectionName: PCWSTR,
2012         Operation: UINT,
2013         Reserved1: PVOID,
2014         Reserved2: UINT,
2015     ) -> BOOL;
SetupRemoveInstallSectionFromDiskSpaceListA( DiskSpace: HDSKSPC, InfHandle: HINF, LayoutInfHandle: HINF, SectionName: PCSTR, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL2016     pub fn SetupRemoveInstallSectionFromDiskSpaceListA(
2017         DiskSpace: HDSKSPC,
2018         InfHandle: HINF,
2019         LayoutInfHandle: HINF,
2020         SectionName: PCSTR,
2021         Reserved1: PVOID,
2022         Reserved2: UINT,
2023     ) -> BOOL;
SetupRemoveInstallSectionFromDiskSpaceListW( DiskSpace: HDSKSPC, InfHandle: HINF, LayoutInfHandle: HINF, SectionName: PCWSTR, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL2024     pub fn SetupRemoveInstallSectionFromDiskSpaceListW(
2025         DiskSpace: HDSKSPC,
2026         InfHandle: HINF,
2027         LayoutInfHandle: HINF,
2028         SectionName: PCWSTR,
2029         Reserved1: PVOID,
2030         Reserved2: UINT,
2031     ) -> BOOL;
SetupIterateCabinetA( CabinetFile: PCSTR, Reserved: DWORD, MsgHandler: PSP_FILE_CALLBACK_A, Context: PVOID, ) -> BOOL2032     pub fn SetupIterateCabinetA(
2033         CabinetFile: PCSTR,
2034         Reserved: DWORD,
2035         MsgHandler: PSP_FILE_CALLBACK_A,
2036         Context: PVOID,
2037     ) -> BOOL;
SetupIterateCabinetW( CabinetFile: PCWSTR, Reserved: DWORD, MsgHandler: PSP_FILE_CALLBACK_W, Context: PVOID, ) -> BOOL2038     pub fn SetupIterateCabinetW(
2039         CabinetFile: PCWSTR,
2040         Reserved: DWORD,
2041         MsgHandler: PSP_FILE_CALLBACK_W,
2042         Context: PVOID,
2043     ) -> BOOL;
SetupPromptReboot( FileQueue: HSPFILEQ, Owner: HWND, ScanOnly: BOOL, ) -> INT2044     pub fn SetupPromptReboot(
2045         FileQueue: HSPFILEQ,
2046         Owner: HWND,
2047         ScanOnly: BOOL,
2048     ) -> INT;
2049 }
2050 pub const SPFILEQ_FILE_IN_USE: INT = 0x00000001;
2051 pub const SPFILEQ_REBOOT_RECOMMENDED: INT = 0x00000002;
2052 pub const SPFILEQ_REBOOT_IN_PROGRESS: INT = 0x00000004;
2053 extern "system" {
SetupInitDefaultQueueCallback( OwnerWindow: HWND, ) -> PVOID2054     pub fn SetupInitDefaultQueueCallback(
2055         OwnerWindow: HWND,
2056     ) -> PVOID;
SetupInitDefaultQueueCallbackEx( OwnerWindow: HWND, AlternateProgressWindow: HWND, ProgressMessage: UINT, Reserved1: DWORD, Reserved2: PVOID, ) -> PVOID2057     pub fn SetupInitDefaultQueueCallbackEx(
2058         OwnerWindow: HWND,
2059         AlternateProgressWindow: HWND,
2060         ProgressMessage: UINT,
2061         Reserved1: DWORD,
2062         Reserved2: PVOID,
2063     ) -> PVOID;
SetupTermDefaultQueueCallback( Context: PVOID, ) -> ()2064     pub fn SetupTermDefaultQueueCallback(
2065         Context: PVOID,
2066     ) -> ();
SetupDefaultQueueCallbackA( Context: PVOID, Notification: UINT, Param1: UINT_PTR, Param2: UINT_PTR, ) -> UINT2067     pub fn SetupDefaultQueueCallbackA(
2068         Context: PVOID,
2069         Notification: UINT,
2070         Param1: UINT_PTR,
2071         Param2: UINT_PTR,
2072     ) -> UINT;
SetupDefaultQueueCallbackW( Context: PVOID, Notification: UINT, Param1: UINT_PTR, Param2: UINT_PTR, ) -> UINT2073     pub fn SetupDefaultQueueCallbackW(
2074         Context: PVOID,
2075         Notification: UINT,
2076         Param1: UINT_PTR,
2077         Param2: UINT_PTR,
2078     ) -> UINT;
2079 }
2080 pub const FLG_ADDREG_DELREG_BIT: DWORD = 0x00008000;
2081 pub const FLG_ADDREG_BINVALUETYPE: DWORD = 0x00000001;
2082 pub const FLG_ADDREG_NOCLOBBER: DWORD = 0x00000002;
2083 pub const FLG_ADDREG_DELVAL: DWORD = 0x00000004;
2084 pub const FLG_ADDREG_APPEND: DWORD = 0x00000008;
2085 pub const FLG_ADDREG_KEYONLY: DWORD = 0x00000010;
2086 pub const FLG_ADDREG_OVERWRITEONLY: DWORD = 0x00000020;
2087 pub const FLG_ADDREG_64BITKEY: DWORD = 0x00001000;
2088 pub const FLG_ADDREG_KEYONLY_COMMON: DWORD = 0x00002000;
2089 pub const FLG_ADDREG_32BITKEY: DWORD = 0x00004000;
2090 pub const FLG_ADDREG_TYPE_MASK: DWORD = 0xFFFF0000 | FLG_ADDREG_BINVALUETYPE;
2091 pub const FLG_ADDREG_TYPE_SZ: DWORD = 0x00000000;
2092 pub const FLG_ADDREG_TYPE_MULTI_SZ: DWORD = 0x00010000;
2093 pub const FLG_ADDREG_TYPE_EXPAND_SZ: DWORD = 0x00020000;
2094 pub const FLG_ADDREG_TYPE_BINARY: DWORD = 0x00000000 | FLG_ADDREG_BINVALUETYPE;
2095 pub const FLG_ADDREG_TYPE_DWORD: DWORD = 0x00010000 | FLG_ADDREG_BINVALUETYPE;
2096 pub const FLG_ADDREG_TYPE_NONE: DWORD = 0x00020000 | FLG_ADDREG_BINVALUETYPE;
2097 pub const FLG_DELREG_VALUE: DWORD = 0x00000000;
2098 pub const FLG_DELREG_TYPE_MASK: DWORD = FLG_ADDREG_TYPE_MASK;
2099 pub const FLG_DELREG_TYPE_SZ: DWORD = FLG_ADDREG_TYPE_SZ;
2100 pub const FLG_DELREG_TYPE_MULTI_SZ: DWORD = FLG_ADDREG_TYPE_MULTI_SZ;
2101 pub const FLG_DELREG_TYPE_EXPAND_SZ: DWORD = FLG_ADDREG_TYPE_EXPAND_SZ;
2102 pub const FLG_DELREG_TYPE_BINARY: DWORD = FLG_ADDREG_TYPE_BINARY;
2103 pub const FLG_DELREG_TYPE_DWORD: DWORD = FLG_ADDREG_TYPE_DWORD;
2104 pub const FLG_DELREG_TYPE_NONE: DWORD = FLG_ADDREG_TYPE_NONE;
2105 pub const FLG_DELREG_64BITKEY: DWORD = FLG_ADDREG_64BITKEY;
2106 pub const FLG_DELREG_KEYONLY_COMMON: DWORD = FLG_ADDREG_KEYONLY_COMMON;
2107 pub const FLG_DELREG_32BITKEY: DWORD = FLG_ADDREG_32BITKEY;
2108 pub const FLG_DELREG_OPERATION_MASK: DWORD = 0x000000FE;
2109 pub const FLG_DELREG_MULTI_SZ_DELSTRING: DWORD = FLG_DELREG_TYPE_MULTI_SZ | FLG_ADDREG_DELREG_BIT
2110     | 0x00000002;
2111 pub const FLG_BITREG_CLEARBITS: DWORD = 0x00000000;
2112 pub const FLG_BITREG_SETBITS: DWORD = 0x00000001;
2113 pub const FLG_BITREG_64BITKEY: DWORD = 0x00001000;
2114 pub const FLG_BITREG_32BITKEY: DWORD = 0x00004000;
2115 pub const FLG_INI2REG_64BITKEY: DWORD = 0x00001000;
2116 pub const FLG_INI2REG_32BITKEY: DWORD = 0x00004000;
2117 pub const FLG_REGSVR_DLLREGISTER: DWORD = 0x00000001;
2118 pub const FLG_REGSVR_DLLINSTALL: DWORD = 0x00000002;
2119 pub const FLG_PROFITEM_CURRENTUSER: DWORD = 0x00000001;
2120 pub const FLG_PROFITEM_DELETE: DWORD = 0x00000002;
2121 pub const FLG_PROFITEM_GROUP: DWORD = 0x00000004;
2122 pub const FLG_PROFITEM_CSIDL: DWORD = 0x00000008;
2123 pub const FLG_ADDPROPERTY_NOCLOBBER: DWORD = 0x00000001;
2124 pub const FLG_ADDPROPERTY_OVERWRITEONLY: DWORD = 0x00000002;
2125 pub const FLG_ADDPROPERTY_APPEND: DWORD = 0x00000004;
2126 pub const FLG_ADDPROPERTY_OR: DWORD = 0x00000008;
2127 pub const FLG_ADDPROPERTY_AND: DWORD = 0x00000010;
2128 pub const FLG_DELPROPERTY_MULTI_SZ_DELSTRING: DWORD = 0x00000001;
2129 extern "system" {
SetupInstallFromInfSectionA( Owner: HWND, InfHandle: HINF, SectionName: PCSTR, Flags: UINT, RelativeKeyRoot: HKEY, SourceRootPath: PCSTR, CopyFlags: UINT, MsgHandler: PSP_FILE_CALLBACK_A, Context: PVOID, DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2130     pub fn SetupInstallFromInfSectionA(
2131         Owner: HWND,
2132         InfHandle: HINF,
2133         SectionName: PCSTR,
2134         Flags: UINT,
2135         RelativeKeyRoot: HKEY,
2136         SourceRootPath: PCSTR,
2137         CopyFlags: UINT,
2138         MsgHandler: PSP_FILE_CALLBACK_A,
2139         Context: PVOID,
2140         DeviceInfoSet: HDEVINFO,
2141         DeviceInfoData: PSP_DEVINFO_DATA,
2142     ) -> BOOL;
SetupInstallFromInfSectionW( Owner: HWND, InfHandle: HINF, SectionName: PCWSTR, Flags: UINT, RelativeKeyRoot: HKEY, SourceRootPath: PCWSTR, CopyFlags: UINT, MsgHandler: PSP_FILE_CALLBACK_W, Context: PVOID, DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2143     pub fn SetupInstallFromInfSectionW(
2144         Owner: HWND,
2145         InfHandle: HINF,
2146         SectionName: PCWSTR,
2147         Flags: UINT,
2148         RelativeKeyRoot: HKEY,
2149         SourceRootPath: PCWSTR,
2150         CopyFlags: UINT,
2151         MsgHandler: PSP_FILE_CALLBACK_W,
2152         Context: PVOID,
2153         DeviceInfoSet: HDEVINFO,
2154         DeviceInfoData: PSP_DEVINFO_DATA,
2155     ) -> BOOL;
2156 }
2157 pub const SPINST_LOGCONFIG: UINT = 0x00000001;
2158 pub const SPINST_INIFILES: UINT = 0x00000002;
2159 pub const SPINST_REGISTRY: UINT = 0x00000004;
2160 pub const SPINST_INI2REG: UINT = 0x00000008;
2161 pub const SPINST_FILES: UINT = 0x00000010;
2162 pub const SPINST_BITREG: UINT = 0x00000020;
2163 pub const SPINST_REGSVR: UINT = 0x00000040;
2164 pub const SPINST_UNREGSVR: UINT = 0x00000080;
2165 pub const SPINST_PROFILEITEMS: UINT = 0x00000100;
2166 pub const SPINST_COPYINF: UINT = 0x00000200;
2167 pub const SPINST_PROPERTIES: UINT = 0x00000400;
2168 pub const SPINST_ALL: UINT = 0x000007ff;
2169 pub const SPINST_SINGLESECTION: UINT = 0x00010000;
2170 pub const SPINST_LOGCONFIG_IS_FORCED: UINT = 0x00020000;
2171 pub const SPINST_LOGCONFIGS_ARE_OVERRIDES: UINT = 0x00040000;
2172 pub const SPINST_REGISTERCALLBACKAWARE: UINT = 0x00080000;
2173 pub const SPINST_DEVICEINSTALL: UINT = 0x00100000;
2174 extern "system" {
SetupInstallFilesFromInfSectionA( InfHandle: HINF, LayoutInfHandle: HINF, FileQueue: HSPFILEQ, SectionName: PCSTR, SourceRootPath: PCSTR, CopyFlags: UINT, ) -> BOOL2175     pub fn SetupInstallFilesFromInfSectionA(
2176         InfHandle: HINF,
2177         LayoutInfHandle: HINF,
2178         FileQueue: HSPFILEQ,
2179         SectionName: PCSTR,
2180         SourceRootPath: PCSTR,
2181         CopyFlags: UINT,
2182     ) -> BOOL;
SetupInstallFilesFromInfSectionW( InfHandle: HINF, LayoutInfHandle: HINF, FileQueue: HSPFILEQ, SectionName: PCWSTR, SourceRootPath: PCWSTR, CopyFlags: UINT, ) -> BOOL2183     pub fn SetupInstallFilesFromInfSectionW(
2184         InfHandle: HINF,
2185         LayoutInfHandle: HINF,
2186         FileQueue: HSPFILEQ,
2187         SectionName: PCWSTR,
2188         SourceRootPath: PCWSTR,
2189         CopyFlags: UINT,
2190     ) -> BOOL;
2191 }
2192 pub const SPSVCINST_TAGTOFRONT: DWORD = 0x00000001;
2193 pub const SPSVCINST_ASSOCSERVICE: DWORD = 0x00000002;
2194 pub const SPSVCINST_DELETEEVENTLOGENTRY: DWORD = 0x00000004;
2195 pub const SPSVCINST_NOCLOBBER_DISPLAYNAME: DWORD = 0x00000008;
2196 pub const SPSVCINST_NOCLOBBER_STARTTYPE: DWORD = 0x00000010;
2197 pub const SPSVCINST_NOCLOBBER_ERRORCONTROL: DWORD = 0x00000020;
2198 pub const SPSVCINST_NOCLOBBER_LOADORDERGROUP: DWORD = 0x00000040;
2199 pub const SPSVCINST_NOCLOBBER_DEPENDENCIES: DWORD = 0x00000080;
2200 pub const SPSVCINST_NOCLOBBER_DESCRIPTION: DWORD = 0x00000100;
2201 pub const SPSVCINST_STOPSERVICE: DWORD = 0x00000200;
2202 pub const SPSVCINST_CLOBBER_SECURITY: DWORD = 0x00000400;
2203 pub const SPSVCINST_STARTSERVICE: DWORD = 0x00000800;
2204 pub const SPSVCINST_NOCLOBBER_REQUIREDPRIVILEGES: DWORD = 0x00001000;
2205 extern "system" {
SetupInstallServicesFromInfSectionA( InfHandle: HINF, SectionName: PCSTR, Flags: DWORD, ) -> BOOL2206     pub fn SetupInstallServicesFromInfSectionA(
2207         InfHandle: HINF,
2208         SectionName: PCSTR,
2209         Flags: DWORD,
2210     ) -> BOOL;
SetupInstallServicesFromInfSectionW( InfHandle: HINF, SectionName: PCWSTR, Flags: DWORD, ) -> BOOL2211     pub fn SetupInstallServicesFromInfSectionW(
2212         InfHandle: HINF,
2213         SectionName: PCWSTR,
2214         Flags: DWORD,
2215     ) -> BOOL;
SetupInstallServicesFromInfSectionExA( InfHandle: HINF, SectionName: PCSTR, Flags: DWORD, DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Reserved1: PVOID, Reserved2: PVOID, ) -> BOOL2216     pub fn SetupInstallServicesFromInfSectionExA(
2217         InfHandle: HINF,
2218         SectionName: PCSTR,
2219         Flags: DWORD,
2220         DeviceInfoSet: HDEVINFO,
2221         DeviceInfoData: PSP_DEVINFO_DATA,
2222         Reserved1: PVOID,
2223         Reserved2: PVOID,
2224     ) -> BOOL;
SetupInstallServicesFromInfSectionExW( InfHandle: HINF, SectionName: PCWSTR, Flags: DWORD, DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Reserved1: PVOID, Reserved2: PVOID, ) -> BOOL2225     pub fn SetupInstallServicesFromInfSectionExW(
2226         InfHandle: HINF,
2227         SectionName: PCWSTR,
2228         Flags: DWORD,
2229         DeviceInfoSet: HDEVINFO,
2230         DeviceInfoData: PSP_DEVINFO_DATA,
2231         Reserved1: PVOID,
2232         Reserved2: PVOID,
2233     ) -> BOOL;
InstallHinfSectionA( Window: HWND, ModuleHandle: HINSTANCE, CommandLine: PCSTR, ShowCommand: INT, ) -> ()2234     pub fn InstallHinfSectionA(
2235         Window: HWND,
2236         ModuleHandle: HINSTANCE,
2237         CommandLine: PCSTR,
2238         ShowCommand: INT,
2239     ) -> ();
InstallHinfSectionW( Window: HWND, ModuleHandle: HINSTANCE, CommandLine: PCWSTR, ShowCommand: INT, ) -> ()2240     pub fn InstallHinfSectionW(
2241         Window: HWND,
2242         ModuleHandle: HINSTANCE,
2243         CommandLine: PCWSTR,
2244         ShowCommand: INT,
2245     ) -> ();
2246 }
2247 pub type HSPFILELOG = PVOID;
2248 extern "system" {
SetupInitializeFileLogA( LogFileName: PCSTR, Flags: DWORD, ) -> HSPFILELOG2249     pub fn SetupInitializeFileLogA(
2250         LogFileName: PCSTR,
2251         Flags: DWORD,
2252     ) -> HSPFILELOG;
SetupInitializeFileLogW( LogFileName: PCWSTR, Flags: DWORD, ) -> HSPFILELOG2253     pub fn SetupInitializeFileLogW(
2254         LogFileName: PCWSTR,
2255         Flags: DWORD,
2256     ) -> HSPFILELOG;
2257 }
2258 pub const SPFILELOG_SYSTEMLOG: DWORD = 0x00000001;
2259 pub const SPFILELOG_FORCENEW: DWORD = 0x00000002;
2260 pub const SPFILELOG_QUERYONLY: DWORD = 0x00000004;
2261 extern "system" {
SetupTerminateFileLog( FileLogHandle: HSPFILELOG, ) -> BOOL2262     pub fn SetupTerminateFileLog(
2263         FileLogHandle: HSPFILELOG,
2264     ) -> BOOL;
SetupLogFileA( FileLogHandle: HSPFILELOG, LogSectionName: PCSTR, SourceFilename: PCSTR, TargetFilename: PCSTR, Checksum: DWORD, DiskTagfile: PCSTR, DiskDescription: PCSTR, OtherInfo: PCSTR, Flags: DWORD, ) -> BOOL2265     pub fn SetupLogFileA(
2266         FileLogHandle: HSPFILELOG,
2267         LogSectionName: PCSTR,
2268         SourceFilename: PCSTR,
2269         TargetFilename: PCSTR,
2270         Checksum: DWORD,
2271         DiskTagfile: PCSTR,
2272         DiskDescription: PCSTR,
2273         OtherInfo: PCSTR,
2274         Flags: DWORD,
2275     ) -> BOOL;
SetupLogFileW( FileLogHandle: HSPFILELOG, LogSectionName: PCWSTR, SourceFilename: PCWSTR, TargetFilename: PCWSTR, Checksum: DWORD, DiskTagfile: PCWSTR, DiskDescription: PCWSTR, OtherInfo: PCWSTR, Flags: DWORD, ) -> BOOL2276     pub fn SetupLogFileW(
2277         FileLogHandle: HSPFILELOG,
2278         LogSectionName: PCWSTR,
2279         SourceFilename: PCWSTR,
2280         TargetFilename: PCWSTR,
2281         Checksum: DWORD,
2282         DiskTagfile: PCWSTR,
2283         DiskDescription: PCWSTR,
2284         OtherInfo: PCWSTR,
2285         Flags: DWORD,
2286     ) -> BOOL;
2287 }
2288 pub const SPFILELOG_OEMFILE: DWORD = 0x00000001;
2289 extern "system" {
SetupRemoveFileLogEntryA( FileLogHandle: HSPFILELOG, LogSectionName: PCSTR, TargetFilename: PCSTR, ) -> BOOL2290     pub fn SetupRemoveFileLogEntryA(
2291         FileLogHandle: HSPFILELOG,
2292         LogSectionName: PCSTR,
2293         TargetFilename: PCSTR,
2294     ) -> BOOL;
SetupRemoveFileLogEntryW( FileLogHandle: HSPFILELOG, LogSectionName: PCWSTR, TargetFilename: PCWSTR, ) -> BOOL2295     pub fn SetupRemoveFileLogEntryW(
2296         FileLogHandle: HSPFILELOG,
2297         LogSectionName: PCWSTR,
2298         TargetFilename: PCWSTR,
2299     ) -> BOOL;
2300 }
2301 ENUM!{enum SetupFileLogInfo {
2302     SetupFileLogSourceFilename,
2303     SetupFileLogChecksum,
2304     SetupFileLogDiskTagfile,
2305     SetupFileLogDiskDescription,
2306     SetupFileLogOtherInfo,
2307     SetupFileLogMax,
2308 }}
2309 extern "system" {
SetupQueryFileLogA( FileLogHandle: HSPFILELOG, LogSectionName: PCSTR, TargetFilename: PCSTR, DesiredInfo: SetupFileLogInfo, DataOut: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2310     pub fn SetupQueryFileLogA(
2311         FileLogHandle: HSPFILELOG,
2312         LogSectionName: PCSTR,
2313         TargetFilename: PCSTR,
2314         DesiredInfo: SetupFileLogInfo,
2315         DataOut: PSTR,
2316         ReturnBufferSize: DWORD,
2317         RequiredSize: PDWORD,
2318     ) -> BOOL;
SetupQueryFileLogW( FileLogHandle: HSPFILELOG, LogSectionName: PCWSTR, TargetFilename: PCWSTR, DesiredInfo: SetupFileLogInfo, DataOut: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2319     pub fn SetupQueryFileLogW(
2320         FileLogHandle: HSPFILELOG,
2321         LogSectionName: PCWSTR,
2322         TargetFilename: PCWSTR,
2323         DesiredInfo: SetupFileLogInfo,
2324         DataOut: PWSTR,
2325         ReturnBufferSize: DWORD,
2326         RequiredSize: PDWORD,
2327     ) -> BOOL;
2328 }
2329 pub type LogSeverity = DWORD;
2330 pub const LogSevInformation: LogSeverity = 0x00000000;
2331 pub const LogSevWarning: LogSeverity = 0x00000001;
2332 pub const LogSevError: LogSeverity = 0x00000002;
2333 pub const LogSevFatalError: LogSeverity = 0x00000003;
2334 pub const LogSevMaximum: LogSeverity = 0x00000004;
2335 extern "system" {
SetupOpenLog( Erase: BOOL, ) -> BOOL2336     pub fn SetupOpenLog(
2337         Erase: BOOL,
2338     ) -> BOOL;
SetupLogErrorA( MessageString: LPCSTR, Severity: LogSeverity, ) -> BOOL2339     pub fn SetupLogErrorA(
2340         MessageString: LPCSTR,
2341         Severity: LogSeverity,
2342     ) -> BOOL;
SetupLogErrorW( MessageString: LPCWSTR, Severity: LogSeverity, ) -> BOOL2343     pub fn SetupLogErrorW(
2344         MessageString: LPCWSTR,
2345         Severity: LogSeverity,
2346     ) -> BOOL;
SetupCloseLog() -> ()2347     pub fn SetupCloseLog() -> ();
SetupGetThreadLogToken() -> SP_LOG_TOKEN2348     pub fn SetupGetThreadLogToken() -> SP_LOG_TOKEN;
SetupSetThreadLogToken( LogToken: SP_LOG_TOKEN, ) -> ()2349     pub fn SetupSetThreadLogToken(
2350         LogToken: SP_LOG_TOKEN,
2351     ) -> ();
2352 }
2353 //pub fn SetupWriteTextLog() -> ();
2354 //pub fn SetupWriteTextLogError() -> ();
2355 extern "system" {
SetupWriteTextLogInfLine( LogToken: SP_LOG_TOKEN, Flags: DWORD, InfHandle: HINF, Context: PINFCONTEXT, ) -> ()2356     pub fn SetupWriteTextLogInfLine(
2357         LogToken: SP_LOG_TOKEN,
2358         Flags: DWORD,
2359         InfHandle: HINF,
2360         Context: PINFCONTEXT,
2361     ) -> ();
SetupGetBackupInformationA( QueueHandle: HSPFILEQ, BackupParams: PSP_BACKUP_QUEUE_PARAMS_A, ) -> BOOL2362     pub fn SetupGetBackupInformationA(
2363         QueueHandle: HSPFILEQ,
2364         BackupParams: PSP_BACKUP_QUEUE_PARAMS_A,
2365     ) -> BOOL;
SetupGetBackupInformationW( QueueHandle: HSPFILEQ, BackupParams: PSP_BACKUP_QUEUE_PARAMS_W, ) -> BOOL2366     pub fn SetupGetBackupInformationW(
2367         QueueHandle: HSPFILEQ,
2368         BackupParams: PSP_BACKUP_QUEUE_PARAMS_W,
2369     ) -> BOOL;
SetupPrepareQueueForRestoreA( QueueHandle: HSPFILEQ, BackupPath: PCSTR, RestoreFlags: DWORD, ) -> BOOL2370     pub fn SetupPrepareQueueForRestoreA(
2371         QueueHandle: HSPFILEQ,
2372         BackupPath: PCSTR,
2373         RestoreFlags: DWORD,
2374     ) -> BOOL;
SetupPrepareQueueForRestoreW( QueueHandle: HSPFILEQ, BackupPath: PCWSTR, RestoreFlags: DWORD, ) -> BOOL2375     pub fn SetupPrepareQueueForRestoreW(
2376         QueueHandle: HSPFILEQ,
2377         BackupPath: PCWSTR,
2378         RestoreFlags: DWORD,
2379     ) -> BOOL;
SetupSetNonInteractiveMode( NonInteractiveFlag: BOOL, ) -> BOOL2380     pub fn SetupSetNonInteractiveMode(
2381         NonInteractiveFlag: BOOL,
2382     ) -> BOOL;
SetupGetNonInteractiveMode() -> BOOL2383     pub fn SetupGetNonInteractiveMode() -> BOOL;
SetupDiCreateDeviceInfoList( ClassGuid: *const GUID, hwndParent: HWND, ) -> HDEVINFO2384     pub fn SetupDiCreateDeviceInfoList(
2385         ClassGuid: *const GUID,
2386         hwndParent: HWND,
2387     ) -> HDEVINFO;
SetupDiCreateDeviceInfoListExA( ClassGuid: *const GUID, hwndParent: HWND, MachineName: PCSTR, Reserved: PVOID, ) -> HDEVINFO2388     pub fn SetupDiCreateDeviceInfoListExA(
2389         ClassGuid: *const GUID,
2390         hwndParent: HWND,
2391         MachineName: PCSTR,
2392         Reserved: PVOID,
2393     ) -> HDEVINFO;
SetupDiCreateDeviceInfoListExW( ClassGuid: *const GUID, hwndParent: HWND, MachineName: PCWSTR, Reserved: PVOID, ) -> HDEVINFO2394     pub fn SetupDiCreateDeviceInfoListExW(
2395         ClassGuid: *const GUID,
2396         hwndParent: HWND,
2397         MachineName: PCWSTR,
2398         Reserved: PVOID,
2399     ) -> HDEVINFO;
SetupDiGetDeviceInfoListClass( DeviceInfoSet: HDEVINFO, ClassGuid: LPGUID, ) -> BOOL2400     pub fn SetupDiGetDeviceInfoListClass(
2401         DeviceInfoSet: HDEVINFO,
2402         ClassGuid: LPGUID,
2403     ) -> BOOL;
SetupDiGetDeviceInfoListDetailA( DeviceInfoSet: HDEVINFO, DeviceInfoSetDetailData: PSP_DEVINFO_LIST_DETAIL_DATA_A, ) -> BOOL2404     pub fn SetupDiGetDeviceInfoListDetailA(
2405         DeviceInfoSet: HDEVINFO,
2406         DeviceInfoSetDetailData: PSP_DEVINFO_LIST_DETAIL_DATA_A,
2407     ) -> BOOL;
SetupDiGetDeviceInfoListDetailW( DeviceInfoSet: HDEVINFO, DeviceInfoSetDetailData: PSP_DEVINFO_LIST_DETAIL_DATA_W, ) -> BOOL2408     pub fn SetupDiGetDeviceInfoListDetailW(
2409         DeviceInfoSet: HDEVINFO,
2410         DeviceInfoSetDetailData: PSP_DEVINFO_LIST_DETAIL_DATA_W,
2411     ) -> BOOL;
2412 }
2413 pub const DICD_GENERATE_ID: DWORD = 0x00000001;
2414 pub const DICD_INHERIT_CLASSDRVS: DWORD = 0x00000002;
2415 extern "system" {
SetupDiCreateDeviceInfoA( DeviceInfoSet: HDEVINFO, DeviceName: PCSTR, ClassGuid: *const GUID, DeviceDescription: PCSTR, hwndParent: HWND, CreationFlags: DWORD, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2416     pub fn SetupDiCreateDeviceInfoA(
2417         DeviceInfoSet: HDEVINFO,
2418         DeviceName: PCSTR,
2419         ClassGuid: *const GUID,
2420         DeviceDescription: PCSTR,
2421         hwndParent: HWND,
2422         CreationFlags: DWORD,
2423         DeviceInfoData: PSP_DEVINFO_DATA,
2424     ) -> BOOL;
SetupDiCreateDeviceInfoW( DeviceInfoSet: HDEVINFO, DeviceName: PCWSTR, ClassGuid: *const GUID, DeviceDescription: PCWSTR, hwndParent: HWND, CreationFlags: DWORD, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2425     pub fn SetupDiCreateDeviceInfoW(
2426         DeviceInfoSet: HDEVINFO,
2427         DeviceName: PCWSTR,
2428         ClassGuid: *const GUID,
2429         DeviceDescription: PCWSTR,
2430         hwndParent: HWND,
2431         CreationFlags: DWORD,
2432         DeviceInfoData: PSP_DEVINFO_DATA,
2433     ) -> BOOL;
2434 }
2435 pub const DIOD_INHERIT_CLASSDRVS: DWORD = 0x00000002;
2436 pub const DIOD_CANCEL_REMOVE: DWORD = 0x00000004;
2437 extern "system" {
SetupDiOpenDeviceInfoA( DeviceInfoSet: HDEVINFO, DeviceInstanceId: PCSTR, hwndParent: HWND, OpenFlags: DWORD, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2438     pub fn SetupDiOpenDeviceInfoA(
2439         DeviceInfoSet: HDEVINFO,
2440         DeviceInstanceId: PCSTR,
2441         hwndParent: HWND,
2442         OpenFlags: DWORD,
2443         DeviceInfoData: PSP_DEVINFO_DATA,
2444     ) -> BOOL;
SetupDiOpenDeviceInfoW( DeviceInfoSet: HDEVINFO, DeviceInstanceId: PCWSTR, hwndParent: HWND, OpenFlags: DWORD, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2445     pub fn SetupDiOpenDeviceInfoW(
2446         DeviceInfoSet: HDEVINFO,
2447         DeviceInstanceId: PCWSTR,
2448         hwndParent: HWND,
2449         OpenFlags: DWORD,
2450         DeviceInfoData: PSP_DEVINFO_DATA,
2451     ) -> BOOL;
SetupDiGetDeviceInstanceIdA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DeviceInstanceId: PSTR, DeviceInstanceIdSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2452     pub fn SetupDiGetDeviceInstanceIdA(
2453         DeviceInfoSet: HDEVINFO,
2454         DeviceInfoData: PSP_DEVINFO_DATA,
2455         DeviceInstanceId: PSTR,
2456         DeviceInstanceIdSize: DWORD,
2457         RequiredSize: PDWORD,
2458     ) -> BOOL;
SetupDiGetDeviceInstanceIdW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DeviceInstanceId: PWSTR, DeviceInstanceIdSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2459     pub fn SetupDiGetDeviceInstanceIdW(
2460         DeviceInfoSet: HDEVINFO,
2461         DeviceInfoData: PSP_DEVINFO_DATA,
2462         DeviceInstanceId: PWSTR,
2463         DeviceInstanceIdSize: DWORD,
2464         RequiredSize: PDWORD,
2465     ) -> BOOL;
SetupDiDeleteDeviceInfo( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2466     pub fn SetupDiDeleteDeviceInfo(
2467         DeviceInfoSet: HDEVINFO,
2468         DeviceInfoData: PSP_DEVINFO_DATA,
2469     ) -> BOOL;
SetupDiEnumDeviceInfo( DeviceInfoSet: HDEVINFO, MemberIndex: DWORD, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2470     pub fn SetupDiEnumDeviceInfo(
2471         DeviceInfoSet: HDEVINFO,
2472         MemberIndex: DWORD,
2473         DeviceInfoData: PSP_DEVINFO_DATA,
2474     ) -> BOOL;
SetupDiDestroyDeviceInfoList( DeviceInfoSet: HDEVINFO, ) -> BOOL2475     pub fn SetupDiDestroyDeviceInfoList(
2476         DeviceInfoSet: HDEVINFO,
2477     ) -> BOOL;
SetupDiEnumDeviceInterfaces( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, InterfaceClassGuid: *const GUID, MemberIndex: DWORD, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, ) -> BOOL2478     pub fn SetupDiEnumDeviceInterfaces(
2479         DeviceInfoSet: HDEVINFO,
2480         DeviceInfoData: PSP_DEVINFO_DATA,
2481         InterfaceClassGuid: *const GUID,
2482         MemberIndex: DWORD,
2483         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2484     ) -> BOOL;
SetupDiCreateDeviceInterfaceA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, InterfaceClassGuid: *const GUID, ReferenceString: PCSTR, CreationFlags: DWORD, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, ) -> BOOL2485     pub fn SetupDiCreateDeviceInterfaceA(
2486         DeviceInfoSet: HDEVINFO,
2487         DeviceInfoData: PSP_DEVINFO_DATA,
2488         InterfaceClassGuid: *const GUID,
2489         ReferenceString: PCSTR,
2490         CreationFlags: DWORD,
2491         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2492     ) -> BOOL;
SetupDiCreateDeviceInterfaceW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, InterfaceClassGuid: *const GUID, ReferenceString: PCWSTR, CreationFlags: DWORD, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, ) -> BOOL2493     pub fn SetupDiCreateDeviceInterfaceW(
2494         DeviceInfoSet: HDEVINFO,
2495         DeviceInfoData: PSP_DEVINFO_DATA,
2496         InterfaceClassGuid: *const GUID,
2497         ReferenceString: PCWSTR,
2498         CreationFlags: DWORD,
2499         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2500     ) -> BOOL;
2501 }
2502 pub const DIODI_NO_ADD: DWORD = 0x00000001;
2503 extern "system" {
SetupDiOpenDeviceInterfaceA( DeviceInfoSet: HDEVINFO, DevicePath: PCSTR, OpenFlags: DWORD, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, ) -> BOOL2504     pub fn SetupDiOpenDeviceInterfaceA(
2505         DeviceInfoSet: HDEVINFO,
2506         DevicePath: PCSTR,
2507         OpenFlags: DWORD,
2508         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2509     ) -> BOOL;
SetupDiOpenDeviceInterfaceW( DeviceInfoSet: HDEVINFO, DevicePath: PCWSTR, OpenFlags: DWORD, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, ) -> BOOL2510     pub fn SetupDiOpenDeviceInterfaceW(
2511         DeviceInfoSet: HDEVINFO,
2512         DevicePath: PCWSTR,
2513         OpenFlags: DWORD,
2514         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2515     ) -> BOOL;
SetupDiGetDeviceInterfaceAlias( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, AliasInterfaceClassGuid: *const GUID, AliasDeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, ) -> BOOL2516     pub fn SetupDiGetDeviceInterfaceAlias(
2517         DeviceInfoSet: HDEVINFO,
2518         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2519         AliasInterfaceClassGuid: *const GUID,
2520         AliasDeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2521     ) -> BOOL;
SetupDiDeleteDeviceInterfaceData( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, ) -> BOOL2522     pub fn SetupDiDeleteDeviceInterfaceData(
2523         DeviceInfoSet: HDEVINFO,
2524         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2525     ) -> BOOL;
SetupDiRemoveDeviceInterface( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, ) -> BOOL2526     pub fn SetupDiRemoveDeviceInterface(
2527         DeviceInfoSet: HDEVINFO,
2528         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2529     ) -> BOOL;
SetupDiGetDeviceInterfaceDetailA( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, DeviceInterfaceDetailData: PSP_DEVICE_INTERFACE_DETAIL_DATA_A, DeviceInterfaceDetailDataSize: DWORD, RequiredSize: PDWORD, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2530     pub fn SetupDiGetDeviceInterfaceDetailA(
2531         DeviceInfoSet: HDEVINFO,
2532         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2533         DeviceInterfaceDetailData: PSP_DEVICE_INTERFACE_DETAIL_DATA_A,
2534         DeviceInterfaceDetailDataSize: DWORD,
2535         RequiredSize: PDWORD,
2536         DeviceInfoData: PSP_DEVINFO_DATA,
2537     ) -> BOOL;
SetupDiGetDeviceInterfaceDetailW( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, DeviceInterfaceDetailData: PSP_DEVICE_INTERFACE_DETAIL_DATA_W, DeviceInterfaceDetailDataSize: DWORD, RequiredSize: PDWORD, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2538     pub fn SetupDiGetDeviceInterfaceDetailW(
2539         DeviceInfoSet: HDEVINFO,
2540         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2541         DeviceInterfaceDetailData: PSP_DEVICE_INTERFACE_DETAIL_DATA_W,
2542         DeviceInterfaceDetailDataSize: DWORD,
2543         RequiredSize: PDWORD,
2544         DeviceInfoData: PSP_DEVINFO_DATA,
2545     ) -> BOOL;
SetupDiInstallDeviceInterfaces( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2546     pub fn SetupDiInstallDeviceInterfaces(
2547         DeviceInfoSet: HDEVINFO,
2548         DeviceInfoData: PSP_DEVINFO_DATA,
2549     ) -> BOOL;
SetupDiSetDeviceInterfaceDefault( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Flags: DWORD, Reserved: PVOID, ) -> BOOL2550     pub fn SetupDiSetDeviceInterfaceDefault(
2551         DeviceInfoSet: HDEVINFO,
2552         DeviceInfoData: PSP_DEVINFO_DATA,
2553         Flags: DWORD,
2554         Reserved: PVOID,
2555     ) -> BOOL;
2556 }
2557 pub const SPRDI_FIND_DUPS: DWORD = 0x00000001;
2558 extern "system" {
SetupDiRegisterDeviceInfo( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Flags: DWORD, CompareProc: PSP_DETSIG_CMPPROC, CompareContext: PVOID, DupDeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2559     pub fn SetupDiRegisterDeviceInfo(
2560         DeviceInfoSet: HDEVINFO,
2561         DeviceInfoData: PSP_DEVINFO_DATA,
2562         Flags: DWORD,
2563         CompareProc: PSP_DETSIG_CMPPROC,
2564         CompareContext: PVOID,
2565         DupDeviceInfoData: PSP_DEVINFO_DATA,
2566     ) -> BOOL;
2567 }
2568 pub const SPDIT_NODRIVER: DWORD = 0x00000000;
2569 pub const SPDIT_CLASSDRIVER: DWORD = 0x00000001;
2570 pub const SPDIT_COMPATDRIVER: DWORD = 0x00000002;
2571 extern "system" {
SetupDiBuildDriverInfoList( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverType: DWORD, ) -> BOOL2572     pub fn SetupDiBuildDriverInfoList(
2573         DeviceInfoSet: HDEVINFO,
2574         DeviceInfoData: PSP_DEVINFO_DATA,
2575         DriverType: DWORD,
2576     ) -> BOOL;
SetupDiCancelDriverInfoSearch( DeviceInfoSet: HDEVINFO, ) -> BOOL2577     pub fn SetupDiCancelDriverInfoSearch(
2578         DeviceInfoSet: HDEVINFO,
2579     ) -> BOOL;
SetupDiEnumDriverInfoA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverType: DWORD, MemberIndex: DWORD, DriverInfoData: PSP_DRVINFO_DATA_A, ) -> BOOL2580     pub fn SetupDiEnumDriverInfoA(
2581         DeviceInfoSet: HDEVINFO,
2582         DeviceInfoData: PSP_DEVINFO_DATA,
2583         DriverType: DWORD,
2584         MemberIndex: DWORD,
2585         DriverInfoData: PSP_DRVINFO_DATA_A,
2586     ) -> BOOL;
SetupDiEnumDriverInfoW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverType: DWORD, MemberIndex: DWORD, DriverInfoData: PSP_DRVINFO_DATA_W, ) -> BOOL2587     pub fn SetupDiEnumDriverInfoW(
2588         DeviceInfoSet: HDEVINFO,
2589         DeviceInfoData: PSP_DEVINFO_DATA,
2590         DriverType: DWORD,
2591         MemberIndex: DWORD,
2592         DriverInfoData: PSP_DRVINFO_DATA_W,
2593     ) -> BOOL;
SetupDiGetSelectedDriverA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_A, ) -> BOOL2594     pub fn SetupDiGetSelectedDriverA(
2595         DeviceInfoSet: HDEVINFO,
2596         DeviceInfoData: PSP_DEVINFO_DATA,
2597         DriverInfoData: PSP_DRVINFO_DATA_A,
2598     ) -> BOOL;
SetupDiGetSelectedDriverW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_W, ) -> BOOL2599     pub fn SetupDiGetSelectedDriverW(
2600         DeviceInfoSet: HDEVINFO,
2601         DeviceInfoData: PSP_DEVINFO_DATA,
2602         DriverInfoData: PSP_DRVINFO_DATA_W,
2603     ) -> BOOL;
SetupDiSetSelectedDriverA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_A, ) -> BOOL2604     pub fn SetupDiSetSelectedDriverA(
2605         DeviceInfoSet: HDEVINFO,
2606         DeviceInfoData: PSP_DEVINFO_DATA,
2607         DriverInfoData: PSP_DRVINFO_DATA_A,
2608     ) -> BOOL;
SetupDiSetSelectedDriverW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_W, ) -> BOOL2609     pub fn SetupDiSetSelectedDriverW(
2610         DeviceInfoSet: HDEVINFO,
2611         DeviceInfoData: PSP_DEVINFO_DATA,
2612         DriverInfoData: PSP_DRVINFO_DATA_W,
2613     ) -> BOOL;
SetupDiGetDriverInfoDetailA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_A, DriverInfoDetailData: PSP_DRVINFO_DETAIL_DATA_A, DriverInfoDetailDataSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2614     pub fn SetupDiGetDriverInfoDetailA(
2615         DeviceInfoSet: HDEVINFO,
2616         DeviceInfoData: PSP_DEVINFO_DATA,
2617         DriverInfoData: PSP_DRVINFO_DATA_A,
2618         DriverInfoDetailData: PSP_DRVINFO_DETAIL_DATA_A,
2619         DriverInfoDetailDataSize: DWORD,
2620         RequiredSize: PDWORD,
2621     ) -> BOOL;
SetupDiGetDriverInfoDetailW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_W, DriverInfoDetailData: PSP_DRVINFO_DETAIL_DATA_W, DriverInfoDetailDataSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2622     pub fn SetupDiGetDriverInfoDetailW(
2623         DeviceInfoSet: HDEVINFO,
2624         DeviceInfoData: PSP_DEVINFO_DATA,
2625         DriverInfoData: PSP_DRVINFO_DATA_W,
2626         DriverInfoDetailData: PSP_DRVINFO_DETAIL_DATA_W,
2627         DriverInfoDetailDataSize: DWORD,
2628         RequiredSize: PDWORD,
2629     ) -> BOOL;
SetupDiDestroyDriverInfoList( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverType: DWORD, ) -> BOOL2630     pub fn SetupDiDestroyDriverInfoList(
2631         DeviceInfoSet: HDEVINFO,
2632         DeviceInfoData: PSP_DEVINFO_DATA,
2633         DriverType: DWORD,
2634     ) -> BOOL;
2635 }
2636 pub const DIGCF_DEFAULT: DWORD = 0x00000001;
2637 pub const DIGCF_PRESENT: DWORD = 0x00000002;
2638 pub const DIGCF_ALLCLASSES: DWORD = 0x00000004;
2639 pub const DIGCF_PROFILE: DWORD = 0x00000008;
2640 pub const DIGCF_DEVICEINTERFACE: DWORD = 0x00000010;
2641 extern "system" {
SetupDiGetClassDevsA( ClassGuid: *const GUID, Enumerator: PCSTR, hwndParent: HWND, Flags: DWORD, ) -> HDEVINFO2642     pub fn SetupDiGetClassDevsA(
2643         ClassGuid: *const GUID,
2644         Enumerator: PCSTR,
2645         hwndParent: HWND,
2646         Flags: DWORD,
2647     ) -> HDEVINFO;
SetupDiGetClassDevsW( ClassGuid: *const GUID, Enumerator: PCWSTR, hwndParent: HWND, Flags: DWORD, ) -> HDEVINFO2648     pub fn SetupDiGetClassDevsW(
2649         ClassGuid: *const GUID,
2650         Enumerator: PCWSTR,
2651         hwndParent: HWND,
2652         Flags: DWORD,
2653     ) -> HDEVINFO;
SetupDiGetClassDevsExA( ClassGuid: *const GUID, Enumerator: PCSTR, hwndParent: HWND, Flags: DWORD, DeviceInfoSet: HDEVINFO, MachineName: PCSTR, Reserved: PVOID, ) -> HDEVINFO2654     pub fn SetupDiGetClassDevsExA(
2655         ClassGuid: *const GUID,
2656         Enumerator: PCSTR,
2657         hwndParent: HWND,
2658         Flags: DWORD,
2659         DeviceInfoSet: HDEVINFO,
2660         MachineName: PCSTR,
2661         Reserved: PVOID,
2662     ) -> HDEVINFO;
SetupDiGetClassDevsExW( ClassGuid: *const GUID, Enumerator: PCWSTR, hwndParent: HWND, Flags: DWORD, DeviceInfoSet: HDEVINFO, MachineName: PCWSTR, Reserved: PVOID, ) -> HDEVINFO2663     pub fn SetupDiGetClassDevsExW(
2664         ClassGuid: *const GUID,
2665         Enumerator: PCWSTR,
2666         hwndParent: HWND,
2667         Flags: DWORD,
2668         DeviceInfoSet: HDEVINFO,
2669         MachineName: PCWSTR,
2670         Reserved: PVOID,
2671     ) -> HDEVINFO;
SetupDiGetINFClassA( InfName: PCSTR, ClassGuid: LPGUID, ClassName: PSTR, ClassNameSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2672     pub fn SetupDiGetINFClassA(
2673         InfName: PCSTR,
2674         ClassGuid: LPGUID,
2675         ClassName: PSTR,
2676         ClassNameSize: DWORD,
2677         RequiredSize: PDWORD,
2678     ) -> BOOL;
SetupDiGetINFClassW( InfName: PCWSTR, ClassGuid: LPGUID, ClassName: PWSTR, ClassNameSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2679     pub fn SetupDiGetINFClassW(
2680         InfName: PCWSTR,
2681         ClassGuid: LPGUID,
2682         ClassName: PWSTR,
2683         ClassNameSize: DWORD,
2684         RequiredSize: PDWORD,
2685     ) -> BOOL;
2686 }
2687 pub const DIBCI_NOINSTALLCLASS: DWORD = 0x00000001;
2688 pub const DIBCI_NODISPLAYCLASS: DWORD = 0x00000002;
2689 extern "system" {
SetupDiBuildClassInfoList( Flags: DWORD, ClassGuidList: LPGUID, ClassGuidListSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2690     pub fn SetupDiBuildClassInfoList(
2691         Flags: DWORD,
2692         ClassGuidList: LPGUID,
2693         ClassGuidListSize: DWORD,
2694         RequiredSize: PDWORD,
2695     ) -> BOOL;
SetupDiBuildClassInfoListExA( Flags: DWORD, ClassGuidList: LPGUID, ClassGuidListSize: DWORD, RequiredSize: PDWORD, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL2696     pub fn SetupDiBuildClassInfoListExA(
2697         Flags: DWORD,
2698         ClassGuidList: LPGUID,
2699         ClassGuidListSize: DWORD,
2700         RequiredSize: PDWORD,
2701         MachineName: PCSTR,
2702         Reserved: PVOID,
2703     ) -> BOOL;
SetupDiBuildClassInfoListExW( Flags: DWORD, ClassGuidList: LPGUID, ClassGuidListSize: DWORD, RequiredSize: PDWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL2704     pub fn SetupDiBuildClassInfoListExW(
2705         Flags: DWORD,
2706         ClassGuidList: LPGUID,
2707         ClassGuidListSize: DWORD,
2708         RequiredSize: PDWORD,
2709         MachineName: PCWSTR,
2710         Reserved: PVOID,
2711     ) -> BOOL;
SetupDiGetClassDescriptionA( ClassGuid: *const GUID, ClassDescription: PSTR, ClassDescriptionSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2712     pub fn SetupDiGetClassDescriptionA(
2713         ClassGuid: *const GUID,
2714         ClassDescription: PSTR,
2715         ClassDescriptionSize: DWORD,
2716         RequiredSize: PDWORD,
2717     ) -> BOOL;
SetupDiGetClassDescriptionW( ClassGuid: *const GUID, ClassDescription: PWSTR, ClassDescriptionSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2718     pub fn SetupDiGetClassDescriptionW(
2719         ClassGuid: *const GUID,
2720         ClassDescription: PWSTR,
2721         ClassDescriptionSize: DWORD,
2722         RequiredSize: PDWORD,
2723     ) -> BOOL;
SetupDiGetClassDescriptionExA( ClassGuid: *const GUID, ClassDescription: PSTR, ClassDescriptionSize: DWORD, RequiredSize: PDWORD, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL2724     pub fn SetupDiGetClassDescriptionExA(
2725         ClassGuid: *const GUID,
2726         ClassDescription: PSTR,
2727         ClassDescriptionSize: DWORD,
2728         RequiredSize: PDWORD,
2729         MachineName: PCSTR,
2730         Reserved: PVOID,
2731     ) -> BOOL;
SetupDiGetClassDescriptionExW( ClassGuid: *const GUID, ClassDescription: PWSTR, ClassDescriptionSize: DWORD, RequiredSize: PDWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL2732     pub fn SetupDiGetClassDescriptionExW(
2733         ClassGuid: *const GUID,
2734         ClassDescription: PWSTR,
2735         ClassDescriptionSize: DWORD,
2736         RequiredSize: PDWORD,
2737         MachineName: PCWSTR,
2738         Reserved: PVOID,
2739     ) -> BOOL;
SetupDiCallClassInstaller( InstallFunction: DI_FUNCTION, DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2740     pub fn SetupDiCallClassInstaller(
2741         InstallFunction: DI_FUNCTION,
2742         DeviceInfoSet: HDEVINFO,
2743         DeviceInfoData: PSP_DEVINFO_DATA,
2744     ) -> BOOL;
SetupDiSelectDevice( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2745     pub fn SetupDiSelectDevice(
2746         DeviceInfoSet: HDEVINFO,
2747         DeviceInfoData: PSP_DEVINFO_DATA,
2748     ) -> BOOL;
SetupDiSelectBestCompatDrv( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2749     pub fn SetupDiSelectBestCompatDrv(
2750         DeviceInfoSet: HDEVINFO,
2751         DeviceInfoData: PSP_DEVINFO_DATA,
2752     ) -> BOOL;
SetupDiInstallDevice( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2753     pub fn SetupDiInstallDevice(
2754         DeviceInfoSet: HDEVINFO,
2755         DeviceInfoData: PSP_DEVINFO_DATA,
2756     ) -> BOOL;
SetupDiInstallDriverFiles( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2757     pub fn SetupDiInstallDriverFiles(
2758         DeviceInfoSet: HDEVINFO,
2759         DeviceInfoData: PSP_DEVINFO_DATA,
2760     ) -> BOOL;
SetupDiRegisterCoDeviceInstallers( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2761     pub fn SetupDiRegisterCoDeviceInstallers(
2762         DeviceInfoSet: HDEVINFO,
2763         DeviceInfoData: PSP_DEVINFO_DATA,
2764     ) -> BOOL;
SetupDiRemoveDevice( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2765     pub fn SetupDiRemoveDevice(
2766         DeviceInfoSet: HDEVINFO,
2767         DeviceInfoData: PSP_DEVINFO_DATA,
2768     ) -> BOOL;
SetupDiUnremoveDevice( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2769     pub fn SetupDiUnremoveDevice(
2770         DeviceInfoSet: HDEVINFO,
2771         DeviceInfoData: PSP_DEVINFO_DATA,
2772     ) -> BOOL;
SetupDiRestartDevices( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2773     pub fn SetupDiRestartDevices(
2774         DeviceInfoSet: HDEVINFO,
2775         DeviceInfoData: PSP_DEVINFO_DATA,
2776     ) -> BOOL;
SetupDiChangeState( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2777     pub fn SetupDiChangeState(
2778         DeviceInfoSet: HDEVINFO,
2779         DeviceInfoData: PSP_DEVINFO_DATA,
2780     ) -> BOOL;
SetupDiInstallClassA( hwndParent: HWND, InfFileName: PCSTR, Flags: DWORD, FileQueue: HSPFILEQ, ) -> BOOL2781     pub fn SetupDiInstallClassA(
2782         hwndParent: HWND,
2783         InfFileName: PCSTR,
2784         Flags: DWORD,
2785         FileQueue: HSPFILEQ,
2786     ) -> BOOL;
SetupDiInstallClassW( hwndParent: HWND, InfFileName: PCWSTR, Flags: DWORD, FileQueue: HSPFILEQ, ) -> BOOL2787     pub fn SetupDiInstallClassW(
2788         hwndParent: HWND,
2789         InfFileName: PCWSTR,
2790         Flags: DWORD,
2791         FileQueue: HSPFILEQ,
2792     ) -> BOOL;
SetupDiInstallClassExA( hwndParent: HWND, InfFileName: PCSTR, Flags: DWORD, FileQueue: HSPFILEQ, InterfaceClassGuid: *const GUID, Reserved1: PVOID, Reserved2: PVOID, ) -> BOOL2793     pub fn SetupDiInstallClassExA(
2794         hwndParent: HWND,
2795         InfFileName: PCSTR,
2796         Flags: DWORD,
2797         FileQueue: HSPFILEQ,
2798         InterfaceClassGuid: *const GUID,
2799         Reserved1: PVOID,
2800         Reserved2: PVOID,
2801     ) -> BOOL;
SetupDiInstallClassExW( hwndParent: HWND, InfFileName: PCWSTR, Flags: DWORD, FileQueue: HSPFILEQ, InterfaceClassGuid: *const GUID, Reserved1: PVOID, Reserved2: PVOID, ) -> BOOL2802     pub fn SetupDiInstallClassExW(
2803         hwndParent: HWND,
2804         InfFileName: PCWSTR,
2805         Flags: DWORD,
2806         FileQueue: HSPFILEQ,
2807         InterfaceClassGuid: *const GUID,
2808         Reserved1: PVOID,
2809         Reserved2: PVOID,
2810     ) -> BOOL;
SetupDiOpenClassRegKey( ClassGuid: *const GUID, samDesired: REGSAM, ) -> HKEY2811     pub fn SetupDiOpenClassRegKey(
2812         ClassGuid: *const GUID,
2813         samDesired: REGSAM,
2814     ) -> HKEY;
2815 }
2816 pub const DIOCR_INSTALLER: DWORD = 0x00000001;
2817 pub const DIOCR_INTERFACE: DWORD = 0x00000002;
2818 extern "system" {
SetupDiOpenClassRegKeyExA( ClassGuid: *const GUID, samDesired: REGSAM, Flags: DWORD, MachineName: PCSTR, Reserved: PVOID, ) -> HKEY2819     pub fn SetupDiOpenClassRegKeyExA(
2820         ClassGuid: *const GUID,
2821         samDesired: REGSAM,
2822         Flags: DWORD,
2823         MachineName: PCSTR,
2824         Reserved: PVOID,
2825     ) -> HKEY;
SetupDiOpenClassRegKeyExW( ClassGuid: *const GUID, samDesired: REGSAM, Flags: DWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> HKEY2826     pub fn SetupDiOpenClassRegKeyExW(
2827         ClassGuid: *const GUID,
2828         samDesired: REGSAM,
2829         Flags: DWORD,
2830         MachineName: PCWSTR,
2831         Reserved: PVOID,
2832     ) -> HKEY;
SetupDiCreateDeviceInterfaceRegKeyA( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, Reserved: DWORD, samDesired: REGSAM, InfHandle: HINF, InfSectionName: PCSTR, ) -> HKEY2833     pub fn SetupDiCreateDeviceInterfaceRegKeyA(
2834         DeviceInfoSet: HDEVINFO,
2835         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2836         Reserved: DWORD,
2837         samDesired: REGSAM,
2838         InfHandle: HINF,
2839         InfSectionName: PCSTR,
2840     ) -> HKEY;
SetupDiCreateDeviceInterfaceRegKeyW( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, Reserved: DWORD, samDesired: REGSAM, InfHandle: HINF, InfSectionName: PCWSTR, ) -> HKEY2841     pub fn SetupDiCreateDeviceInterfaceRegKeyW(
2842         DeviceInfoSet: HDEVINFO,
2843         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2844         Reserved: DWORD,
2845         samDesired: REGSAM,
2846         InfHandle: HINF,
2847         InfSectionName: PCWSTR,
2848     ) -> HKEY;
SetupDiOpenDeviceInterfaceRegKey( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, Reserved: DWORD, samDesired: REGSAM, ) -> HKEY2849     pub fn SetupDiOpenDeviceInterfaceRegKey(
2850         DeviceInfoSet: HDEVINFO,
2851         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2852         Reserved: DWORD,
2853         samDesired: REGSAM,
2854     ) -> HKEY;
SetupDiDeleteDeviceInterfaceRegKey( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, Reserved: DWORD, ) -> BOOL2855     pub fn SetupDiDeleteDeviceInterfaceRegKey(
2856         DeviceInfoSet: HDEVINFO,
2857         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2858         Reserved: DWORD,
2859     ) -> BOOL;
2860 }
2861 pub const DIREG_DEV: DWORD = 0x00000001;
2862 pub const DIREG_DRV: DWORD = 0x00000002;
2863 pub const DIREG_BOTH: DWORD = 0x00000004;
2864 extern "system" {
SetupDiCreateDevRegKeyA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Scope: DWORD, HwProfile: DWORD, KeyType: DWORD, InfHandle: HINF, InfSectionName: PCSTR, ) -> HKEY2865     pub fn SetupDiCreateDevRegKeyA(
2866         DeviceInfoSet: HDEVINFO,
2867         DeviceInfoData: PSP_DEVINFO_DATA,
2868         Scope: DWORD,
2869         HwProfile: DWORD,
2870         KeyType: DWORD,
2871         InfHandle: HINF,
2872         InfSectionName: PCSTR,
2873     ) -> HKEY;
SetupDiCreateDevRegKeyW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Scope: DWORD, HwProfile: DWORD, KeyType: DWORD, InfHandle: HINF, InfSectionName: PCWSTR, ) -> HKEY2874     pub fn SetupDiCreateDevRegKeyW(
2875         DeviceInfoSet: HDEVINFO,
2876         DeviceInfoData: PSP_DEVINFO_DATA,
2877         Scope: DWORD,
2878         HwProfile: DWORD,
2879         KeyType: DWORD,
2880         InfHandle: HINF,
2881         InfSectionName: PCWSTR,
2882     ) -> HKEY;
SetupDiOpenDevRegKey( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Scope: DWORD, HwProfile: DWORD, KeyType: DWORD, samDesired: REGSAM, ) -> HKEY2883     pub fn SetupDiOpenDevRegKey(
2884         DeviceInfoSet: HDEVINFO,
2885         DeviceInfoData: PSP_DEVINFO_DATA,
2886         Scope: DWORD,
2887         HwProfile: DWORD,
2888         KeyType: DWORD,
2889         samDesired: REGSAM,
2890     ) -> HKEY;
SetupDiDeleteDevRegKey( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Scope: DWORD, HwProfile: DWORD, KeyType: DWORD, ) -> BOOL2891     pub fn SetupDiDeleteDevRegKey(
2892         DeviceInfoSet: HDEVINFO,
2893         DeviceInfoData: PSP_DEVINFO_DATA,
2894         Scope: DWORD,
2895         HwProfile: DWORD,
2896         KeyType: DWORD,
2897     ) -> BOOL;
SetupDiGetHwProfileList( HwProfileList: PDWORD, HwProfileListSize: DWORD, RequiredSize: PDWORD, CurrentlyActiveIndex: PDWORD, ) -> BOOL2898     pub fn SetupDiGetHwProfileList(
2899         HwProfileList: PDWORD,
2900         HwProfileListSize: DWORD,
2901         RequiredSize: PDWORD,
2902         CurrentlyActiveIndex: PDWORD,
2903     ) -> BOOL;
SetupDiGetHwProfileListExA( HwProfileList: PDWORD, HwProfileListSize: DWORD, RequiredSize: PDWORD, CurrentlyActiveIndex: PDWORD, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL2904     pub fn SetupDiGetHwProfileListExA(
2905         HwProfileList: PDWORD,
2906         HwProfileListSize: DWORD,
2907         RequiredSize: PDWORD,
2908         CurrentlyActiveIndex: PDWORD,
2909         MachineName: PCSTR,
2910         Reserved: PVOID,
2911     ) -> BOOL;
SetupDiGetHwProfileListExW( HwProfileList: PDWORD, HwProfileListSize: DWORD, RequiredSize: PDWORD, CurrentlyActiveIndex: PDWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL2912     pub fn SetupDiGetHwProfileListExW(
2913         HwProfileList: PDWORD,
2914         HwProfileListSize: DWORD,
2915         RequiredSize: PDWORD,
2916         CurrentlyActiveIndex: PDWORD,
2917         MachineName: PCWSTR,
2918         Reserved: PVOID,
2919     ) -> BOOL;
SetupDiGetDevicePropertyKeys( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, PropertyKeyArray: *mut DEVPROPKEY, PropertyKeyCount: DWORD, RequiredPropertyKeyCount: PDWORD, Flags: DWORD, ) -> BOOL2920     pub fn SetupDiGetDevicePropertyKeys(
2921         DeviceInfoSet: HDEVINFO,
2922         DeviceInfoData: PSP_DEVINFO_DATA,
2923         PropertyKeyArray: *mut DEVPROPKEY,
2924         PropertyKeyCount: DWORD,
2925         RequiredPropertyKeyCount: PDWORD,
2926         Flags: DWORD,
2927     ) -> BOOL;
SetupDiGetDevicePropertyW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, PropertyKey: *const DEVPROPKEY, PropertyType: *mut DEVPROPTYPE, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, Flags: DWORD, ) -> BOOL2928     pub fn SetupDiGetDevicePropertyW(
2929         DeviceInfoSet: HDEVINFO,
2930         DeviceInfoData: PSP_DEVINFO_DATA,
2931         PropertyKey: *const DEVPROPKEY,
2932         PropertyType: *mut DEVPROPTYPE,
2933         PropertyBuffer: PBYTE,
2934         PropertyBufferSize: DWORD,
2935         RequiredSize: PDWORD,
2936         Flags: DWORD,
2937     ) -> BOOL;
SetupDiSetDevicePropertyW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, PropertyKey: *const DEVPROPKEY, PropertyType: DEVPROPTYPE, PropertyBuffer: *const BYTE, PropertyBufferSize: DWORD, Flags: DWORD, ) -> BOOL2938     pub fn SetupDiSetDevicePropertyW(
2939         DeviceInfoSet: HDEVINFO,
2940         DeviceInfoData: PSP_DEVINFO_DATA,
2941         PropertyKey: *const DEVPROPKEY,
2942         PropertyType: DEVPROPTYPE,
2943         PropertyBuffer: *const BYTE,
2944         PropertyBufferSize: DWORD,
2945         Flags: DWORD,
2946     ) -> BOOL;
SetupDiGetDeviceInterfacePropertyKeys( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, PropertyKeyArray: *mut DEVPROPKEY, PropertyKeyCount: DWORD, RequiredPropertyKeyCount: PDWORD, Flags: DWORD, ) -> BOOL2947     pub fn SetupDiGetDeviceInterfacePropertyKeys(
2948         DeviceInfoSet: HDEVINFO,
2949         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2950         PropertyKeyArray: *mut DEVPROPKEY,
2951         PropertyKeyCount: DWORD,
2952         RequiredPropertyKeyCount: PDWORD,
2953         Flags: DWORD,
2954     ) -> BOOL;
SetupDiGetDeviceInterfacePropertyW( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, PropertyKey: *const DEVPROPKEY, PropertyType: *mut DEVPROPTYPE, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, Flags: DWORD, ) -> BOOL2955     pub fn SetupDiGetDeviceInterfacePropertyW(
2956         DeviceInfoSet: HDEVINFO,
2957         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2958         PropertyKey: *const DEVPROPKEY,
2959         PropertyType: *mut DEVPROPTYPE,
2960         PropertyBuffer: PBYTE,
2961         PropertyBufferSize: DWORD,
2962         RequiredSize: PDWORD,
2963         Flags: DWORD,
2964     ) -> BOOL;
SetupDiSetDeviceInterfacePropertyW( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, PropertyKey: *const DEVPROPKEY, PropertyType: DEVPROPTYPE, PropertyBuffer: *const BYTE, PropertyBufferSize: DWORD, Flags: DWORD, ) -> BOOL2965     pub fn SetupDiSetDeviceInterfacePropertyW(
2966         DeviceInfoSet: HDEVINFO,
2967         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2968         PropertyKey: *const DEVPROPKEY,
2969         PropertyType: DEVPROPTYPE,
2970         PropertyBuffer: *const BYTE,
2971         PropertyBufferSize: DWORD,
2972         Flags: DWORD,
2973     ) -> BOOL;
2974 }
2975 pub const DICLASSPROP_INSTALLER: DWORD = 0x00000001;
2976 pub const DICLASSPROP_INTERFACE: DWORD = 0x00000002;
2977 extern "system" {
SetupDiGetClassPropertyKeys( ClassGuid: *const GUID, PropertyKeyArray: *mut DEVPROPKEY, PropertyKeyCount: DWORD, RequiredPropertyKeyCount: PDWORD, Flags: DWORD, ) -> BOOL2978     pub fn SetupDiGetClassPropertyKeys(
2979         ClassGuid: *const GUID,
2980         PropertyKeyArray: *mut DEVPROPKEY,
2981         PropertyKeyCount: DWORD,
2982         RequiredPropertyKeyCount: PDWORD,
2983         Flags: DWORD,
2984     ) -> BOOL;
SetupDiGetClassPropertyKeysExW( ClassGuid: *const GUID, PropertyKeyArray: *mut DEVPROPKEY, PropertyKeyCount: DWORD, RequiredPropertyKeyCount: PDWORD, Flags: DWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL2985     pub fn SetupDiGetClassPropertyKeysExW(
2986         ClassGuid: *const GUID,
2987         PropertyKeyArray: *mut DEVPROPKEY,
2988         PropertyKeyCount: DWORD,
2989         RequiredPropertyKeyCount: PDWORD,
2990         Flags: DWORD,
2991         MachineName: PCWSTR,
2992         Reserved: PVOID,
2993     ) -> BOOL;
SetupDiGetClassPropertyW( ClassGuid: *const GUID, PropertyKey: *const DEVPROPKEY, PropertyType: *mut DEVPROPTYPE, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, Flags: DWORD, ) -> BOOL2994     pub fn SetupDiGetClassPropertyW(
2995         ClassGuid: *const GUID,
2996         PropertyKey: *const DEVPROPKEY,
2997         PropertyType: *mut DEVPROPTYPE,
2998         PropertyBuffer: PBYTE,
2999         PropertyBufferSize: DWORD,
3000         RequiredSize: PDWORD,
3001         Flags: DWORD,
3002     ) -> BOOL;
SetupDiGetClassPropertyExW( ClassGuid: *const GUID, PropertyKey: *const DEVPROPKEY, PropertyType: *mut DEVPROPTYPE, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, Flags: DWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL3003     pub fn SetupDiGetClassPropertyExW(
3004         ClassGuid: *const GUID,
3005         PropertyKey: *const DEVPROPKEY,
3006         PropertyType: *mut DEVPROPTYPE,
3007         PropertyBuffer: PBYTE,
3008         PropertyBufferSize: DWORD,
3009         RequiredSize: PDWORD,
3010         Flags: DWORD,
3011         MachineName: PCWSTR,
3012         Reserved: PVOID,
3013     ) -> BOOL;
SetupDiSetClassPropertyW( ClassGuid: *const GUID, PropertyKey: *const DEVPROPKEY, PropertyType: DEVPROPTYPE, PropertyBuffer: *const BYTE, PropertyBufferSize: DWORD, Flags: DWORD, ) -> BOOL3014     pub fn SetupDiSetClassPropertyW(
3015         ClassGuid: *const GUID,
3016         PropertyKey: *const DEVPROPKEY,
3017         PropertyType: DEVPROPTYPE,
3018         PropertyBuffer: *const BYTE,
3019         PropertyBufferSize: DWORD,
3020         Flags: DWORD,
3021     ) -> BOOL;
SetupDiSetClassPropertyExW( ClassGuid: *const GUID, PropertyKey: *const DEVPROPKEY, PropertyType: DEVPROPTYPE, PropertyBuffer: *const BYTE, PropertyBufferSize: DWORD, Flags: DWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL3022     pub fn SetupDiSetClassPropertyExW(
3023         ClassGuid: *const GUID,
3024         PropertyKey: *const DEVPROPKEY,
3025         PropertyType: DEVPROPTYPE,
3026         PropertyBuffer: *const BYTE,
3027         PropertyBufferSize: DWORD,
3028         Flags: DWORD,
3029         MachineName: PCWSTR,
3030         Reserved: PVOID,
3031     ) -> BOOL;
3032 }
3033 pub const SPDRP_DEVICEDESC: DWORD = 0x00000000;
3034 pub const SPDRP_HARDWAREID: DWORD = 0x00000001;
3035 pub const SPDRP_COMPATIBLEIDS: DWORD = 0x00000002;
3036 pub const SPDRP_UNUSED0: DWORD = 0x00000003;
3037 pub const SPDRP_SERVICE: DWORD = 0x00000004;
3038 pub const SPDRP_UNUSED1: DWORD = 0x00000005;
3039 pub const SPDRP_UNUSED2: DWORD = 0x00000006;
3040 pub const SPDRP_CLASS: DWORD = 0x00000007;
3041 pub const SPDRP_CLASSGUID: DWORD = 0x00000008;
3042 pub const SPDRP_DRIVER: DWORD = 0x00000009;
3043 pub const SPDRP_CONFIGFLAGS: DWORD = 0x0000000A;
3044 pub const SPDRP_MFG: DWORD = 0x0000000B;
3045 pub const SPDRP_FRIENDLYNAME: DWORD = 0x0000000C;
3046 pub const SPDRP_LOCATION_INFORMATION: DWORD = 0x0000000D;
3047 pub const SPDRP_PHYSICAL_DEVICE_OBJECT_NAME: DWORD = 0x0000000E;
3048 pub const SPDRP_CAPABILITIES: DWORD = 0x0000000F;
3049 pub const SPDRP_UI_NUMBER: DWORD = 0x00000010;
3050 pub const SPDRP_UPPERFILTERS: DWORD = 0x00000011;
3051 pub const SPDRP_LOWERFILTERS: DWORD = 0x00000012;
3052 pub const SPDRP_BUSTYPEGUID: DWORD = 0x00000013;
3053 pub const SPDRP_LEGACYBUSTYPE: DWORD = 0x00000014;
3054 pub const SPDRP_BUSNUMBER: DWORD = 0x00000015;
3055 pub const SPDRP_ENUMERATOR_NAME: DWORD = 0x00000016;
3056 pub const SPDRP_SECURITY: DWORD = 0x00000017;
3057 pub const SPDRP_SECURITY_SDS: DWORD = 0x00000018;
3058 pub const SPDRP_DEVTYPE: DWORD = 0x00000019;
3059 pub const SPDRP_EXCLUSIVE: DWORD = 0x0000001A;
3060 pub const SPDRP_CHARACTERISTICS: DWORD = 0x0000001B;
3061 pub const SPDRP_ADDRESS: DWORD = 0x0000001C;
3062 pub const SPDRP_UI_NUMBER_DESC_FORMAT: DWORD = 0x0000001D;
3063 pub const SPDRP_DEVICE_POWER_DATA: DWORD = 0x0000001E;
3064 pub const SPDRP_REMOVAL_POLICY: DWORD = 0x0000001F;
3065 pub const SPDRP_REMOVAL_POLICY_HW_DEFAULT: DWORD = 0x00000020;
3066 pub const SPDRP_REMOVAL_POLICY_OVERRIDE: DWORD = 0x00000021;
3067 pub const SPDRP_INSTALL_STATE: DWORD = 0x00000022;
3068 pub const SPDRP_LOCATION_PATHS: DWORD = 0x00000023;
3069 pub const SPDRP_BASE_CONTAINERID: DWORD = 0x00000024;
3070 pub const SPDRP_MAXIMUM_PROPERTY: DWORD = 0x00000025;
3071 pub const SPCRP_UPPERFILTERS: DWORD = 0x00000011;
3072 pub const SPCRP_LOWERFILTERS: DWORD = 0x00000012;
3073 pub const SPCRP_SECURITY: DWORD = 0x00000017;
3074 pub const SPCRP_SECURITY_SDS: DWORD = 0x00000018;
3075 pub const SPCRP_DEVTYPE: DWORD = 0x00000019;
3076 pub const SPCRP_EXCLUSIVE: DWORD = 0x0000001A;
3077 pub const SPCRP_CHARACTERISTICS: DWORD = 0x0000001B;
3078 pub const SPCRP_MAXIMUM_PROPERTY: DWORD = 0x0000001C;
3079 extern "system" {
SetupDiGetDeviceRegistryPropertyA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Property: DWORD, PropertyRegDataType: PDWORD, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3080     pub fn SetupDiGetDeviceRegistryPropertyA(
3081         DeviceInfoSet: HDEVINFO,
3082         DeviceInfoData: PSP_DEVINFO_DATA,
3083         Property: DWORD,
3084         PropertyRegDataType: PDWORD,
3085         PropertyBuffer: PBYTE,
3086         PropertyBufferSize: DWORD,
3087         RequiredSize: PDWORD,
3088     ) -> BOOL;
SetupDiGetDeviceRegistryPropertyW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Property: DWORD, PropertyRegDataType: PDWORD, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3089     pub fn SetupDiGetDeviceRegistryPropertyW(
3090         DeviceInfoSet: HDEVINFO,
3091         DeviceInfoData: PSP_DEVINFO_DATA,
3092         Property: DWORD,
3093         PropertyRegDataType: PDWORD,
3094         PropertyBuffer: PBYTE,
3095         PropertyBufferSize: DWORD,
3096         RequiredSize: PDWORD,
3097     ) -> BOOL;
SetupDiGetClassRegistryPropertyA( ClassGuid: *const GUID, Property: DWORD, PropertyRegDataType: PDWORD, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL3098     pub fn SetupDiGetClassRegistryPropertyA(
3099         ClassGuid: *const GUID,
3100         Property: DWORD,
3101         PropertyRegDataType: PDWORD,
3102         PropertyBuffer: PBYTE,
3103         PropertyBufferSize: DWORD,
3104         RequiredSize: PDWORD,
3105         MachineName: PCSTR,
3106         Reserved: PVOID,
3107     ) -> BOOL;
SetupDiGetClassRegistryPropertyW( ClassGuid: *const GUID, Property: DWORD, PropertyRegDataType: PDWORD, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL3108     pub fn SetupDiGetClassRegistryPropertyW(
3109         ClassGuid: *const GUID,
3110         Property: DWORD,
3111         PropertyRegDataType: PDWORD,
3112         PropertyBuffer: PBYTE,
3113         PropertyBufferSize: DWORD,
3114         RequiredSize: PDWORD,
3115         MachineName: PCWSTR,
3116         Reserved: PVOID,
3117     ) -> BOOL;
SetupDiSetDeviceRegistryPropertyA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Property: DWORD, PropertyBuffer: *const BYTE, PropertyBufferSize: DWORD, ) -> BOOL3118     pub fn SetupDiSetDeviceRegistryPropertyA(
3119         DeviceInfoSet: HDEVINFO,
3120         DeviceInfoData: PSP_DEVINFO_DATA,
3121         Property: DWORD,
3122         PropertyBuffer: *const BYTE,
3123         PropertyBufferSize: DWORD,
3124     ) -> BOOL;
SetupDiSetDeviceRegistryPropertyW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Property: DWORD, PropertyBuffer: *const BYTE, PropertyBufferSize: DWORD, ) -> BOOL3125     pub fn SetupDiSetDeviceRegistryPropertyW(
3126         DeviceInfoSet: HDEVINFO,
3127         DeviceInfoData: PSP_DEVINFO_DATA,
3128         Property: DWORD,
3129         PropertyBuffer: *const BYTE,
3130         PropertyBufferSize: DWORD,
3131     ) -> BOOL;
SetupDiSetClassRegistryPropertyA( ClassGuid: *const GUID, Property: DWORD, PropertyBuffer: *const BYTE, PropertyBufferSize: DWORD, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL3132     pub fn SetupDiSetClassRegistryPropertyA(
3133         ClassGuid: *const GUID,
3134         Property: DWORD,
3135         PropertyBuffer: *const BYTE,
3136         PropertyBufferSize: DWORD,
3137         MachineName: PCSTR,
3138         Reserved: PVOID,
3139     ) -> BOOL;
SetupDiSetClassRegistryPropertyW( ClassGuid: *const GUID, Property: DWORD, PropertyBuffer: *const BYTE, PropertyBufferSize: DWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL3140     pub fn SetupDiSetClassRegistryPropertyW(
3141         ClassGuid: *const GUID,
3142         Property: DWORD,
3143         PropertyBuffer: *const BYTE,
3144         PropertyBufferSize: DWORD,
3145         MachineName: PCWSTR,
3146         Reserved: PVOID,
3147     ) -> BOOL;
SetupDiGetDeviceInstallParamsA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DeviceInstallParams: PSP_DEVINSTALL_PARAMS_A, ) -> BOOL3148     pub fn SetupDiGetDeviceInstallParamsA(
3149         DeviceInfoSet: HDEVINFO,
3150         DeviceInfoData: PSP_DEVINFO_DATA,
3151         DeviceInstallParams: PSP_DEVINSTALL_PARAMS_A,
3152     ) -> BOOL;
SetupDiGetDeviceInstallParamsW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DeviceInstallParams: PSP_DEVINSTALL_PARAMS_W, ) -> BOOL3153     pub fn SetupDiGetDeviceInstallParamsW(
3154         DeviceInfoSet: HDEVINFO,
3155         DeviceInfoData: PSP_DEVINFO_DATA,
3156         DeviceInstallParams: PSP_DEVINSTALL_PARAMS_W,
3157     ) -> BOOL;
SetupDiGetClassInstallParamsA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ClassInstallParams: PSP_CLASSINSTALL_HEADER, ClassInstallParamsSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3158     pub fn SetupDiGetClassInstallParamsA(
3159         DeviceInfoSet: HDEVINFO,
3160         DeviceInfoData: PSP_DEVINFO_DATA,
3161         ClassInstallParams: PSP_CLASSINSTALL_HEADER,
3162         ClassInstallParamsSize: DWORD,
3163         RequiredSize: PDWORD,
3164     ) -> BOOL;
SetupDiGetClassInstallParamsW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ClassInstallParams: PSP_CLASSINSTALL_HEADER, ClassInstallParamsSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3165     pub fn SetupDiGetClassInstallParamsW(
3166         DeviceInfoSet: HDEVINFO,
3167         DeviceInfoData: PSP_DEVINFO_DATA,
3168         ClassInstallParams: PSP_CLASSINSTALL_HEADER,
3169         ClassInstallParamsSize: DWORD,
3170         RequiredSize: PDWORD,
3171     ) -> BOOL;
SetupDiSetDeviceInstallParamsA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DeviceInstallParams: PSP_DEVINSTALL_PARAMS_A, ) -> BOOL3172     pub fn SetupDiSetDeviceInstallParamsA(
3173         DeviceInfoSet: HDEVINFO,
3174         DeviceInfoData: PSP_DEVINFO_DATA,
3175         DeviceInstallParams: PSP_DEVINSTALL_PARAMS_A,
3176     ) -> BOOL;
SetupDiSetDeviceInstallParamsW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DeviceInstallParams: PSP_DEVINSTALL_PARAMS_W, ) -> BOOL3177     pub fn SetupDiSetDeviceInstallParamsW(
3178         DeviceInfoSet: HDEVINFO,
3179         DeviceInfoData: PSP_DEVINFO_DATA,
3180         DeviceInstallParams: PSP_DEVINSTALL_PARAMS_W,
3181     ) -> BOOL;
SetupDiSetClassInstallParamsA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ClassInstallParams: PSP_CLASSINSTALL_HEADER, ClassInstallParamsSize: DWORD, ) -> BOOL3182     pub fn SetupDiSetClassInstallParamsA(
3183         DeviceInfoSet: HDEVINFO,
3184         DeviceInfoData: PSP_DEVINFO_DATA,
3185         ClassInstallParams: PSP_CLASSINSTALL_HEADER,
3186         ClassInstallParamsSize: DWORD,
3187     ) -> BOOL;
SetupDiSetClassInstallParamsW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ClassInstallParams: PSP_CLASSINSTALL_HEADER, ClassInstallParamsSize: DWORD, ) -> BOOL3188     pub fn SetupDiSetClassInstallParamsW(
3189         DeviceInfoSet: HDEVINFO,
3190         DeviceInfoData: PSP_DEVINFO_DATA,
3191         ClassInstallParams: PSP_CLASSINSTALL_HEADER,
3192         ClassInstallParamsSize: DWORD,
3193     ) -> BOOL;
SetupDiGetDriverInstallParamsA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_A, DriverInstallParams: PSP_DRVINSTALL_PARAMS, ) -> BOOL3194     pub fn SetupDiGetDriverInstallParamsA(
3195         DeviceInfoSet: HDEVINFO,
3196         DeviceInfoData: PSP_DEVINFO_DATA,
3197         DriverInfoData: PSP_DRVINFO_DATA_A,
3198         DriverInstallParams: PSP_DRVINSTALL_PARAMS,
3199     ) -> BOOL;
SetupDiGetDriverInstallParamsW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_W, DriverInstallParams: PSP_DRVINSTALL_PARAMS, ) -> BOOL3200     pub fn SetupDiGetDriverInstallParamsW(
3201         DeviceInfoSet: HDEVINFO,
3202         DeviceInfoData: PSP_DEVINFO_DATA,
3203         DriverInfoData: PSP_DRVINFO_DATA_W,
3204         DriverInstallParams: PSP_DRVINSTALL_PARAMS,
3205     ) -> BOOL;
SetupDiSetDriverInstallParamsA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_A, DriverInstallParams: PSP_DRVINSTALL_PARAMS, ) -> BOOL3206     pub fn SetupDiSetDriverInstallParamsA(
3207         DeviceInfoSet: HDEVINFO,
3208         DeviceInfoData: PSP_DEVINFO_DATA,
3209         DriverInfoData: PSP_DRVINFO_DATA_A,
3210         DriverInstallParams: PSP_DRVINSTALL_PARAMS,
3211     ) -> BOOL;
SetupDiSetDriverInstallParamsW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_W, DriverInstallParams: PSP_DRVINSTALL_PARAMS, ) -> BOOL3212     pub fn SetupDiSetDriverInstallParamsW(
3213         DeviceInfoSet: HDEVINFO,
3214         DeviceInfoData: PSP_DEVINFO_DATA,
3215         DriverInfoData: PSP_DRVINFO_DATA_W,
3216         DriverInstallParams: PSP_DRVINSTALL_PARAMS,
3217     ) -> BOOL;
SetupDiLoadClassIcon( ClassGuid: *const GUID, LargeIcon: *mut HICON, MiniIconIndex: PINT, ) -> BOOL3218     pub fn SetupDiLoadClassIcon(
3219         ClassGuid: *const GUID,
3220         LargeIcon: *mut HICON,
3221         MiniIconIndex: PINT,
3222     ) -> BOOL;
SetupDiLoadDeviceIcon( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, cxIcon: UINT, cyIcon: UINT, Flags: DWORD, hIcon: *mut HICON, ) -> BOOL3223     pub fn SetupDiLoadDeviceIcon(
3224         DeviceInfoSet: HDEVINFO,
3225         DeviceInfoData: PSP_DEVINFO_DATA,
3226         cxIcon: UINT,
3227         cyIcon: UINT,
3228         Flags: DWORD,
3229         hIcon: *mut HICON,
3230     ) -> BOOL;
3231 }
3232 pub const DMI_MASK: DWORD = 0x00000001;
3233 pub const DMI_BKCOLOR: DWORD = 0x00000002;
3234 pub const DMI_USERECT: DWORD = 0x00000004;
3235 extern "system" {
SetupDiDrawMiniIcon( hdc: HDC, rc: RECT, MiniIconIndex: INT, Flags: DWORD, ) -> INT3236     pub fn SetupDiDrawMiniIcon(
3237         hdc: HDC,
3238         rc: RECT,
3239         MiniIconIndex: INT,
3240         Flags: DWORD,
3241     ) -> INT;
SetupDiGetClassBitmapIndex( ClassGuid: *const GUID, MiniIconIndex: PINT, ) -> BOOL3242     pub fn SetupDiGetClassBitmapIndex(
3243         ClassGuid: *const GUID,
3244         MiniIconIndex: PINT,
3245     ) -> BOOL;
SetupDiGetClassImageList( ClassImageListData: PSP_CLASSIMAGELIST_DATA, ) -> BOOL3246     pub fn SetupDiGetClassImageList(
3247         ClassImageListData: PSP_CLASSIMAGELIST_DATA,
3248     ) -> BOOL;
SetupDiGetClassImageListExA( ClassImageListData: PSP_CLASSIMAGELIST_DATA, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL3249     pub fn SetupDiGetClassImageListExA(
3250         ClassImageListData: PSP_CLASSIMAGELIST_DATA,
3251         MachineName: PCSTR,
3252         Reserved: PVOID,
3253     ) -> BOOL;
SetupDiGetClassImageListExW( ClassImageListData: PSP_CLASSIMAGELIST_DATA, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL3254     pub fn SetupDiGetClassImageListExW(
3255         ClassImageListData: PSP_CLASSIMAGELIST_DATA,
3256         MachineName: PCWSTR,
3257         Reserved: PVOID,
3258     ) -> BOOL;
SetupDiGetClassImageIndex( ClassImageListData: PSP_CLASSIMAGELIST_DATA, ClassGuid: *const GUID, ImageIndex: PINT, ) -> BOOL3259     pub fn SetupDiGetClassImageIndex(
3260         ClassImageListData: PSP_CLASSIMAGELIST_DATA,
3261         ClassGuid: *const GUID,
3262         ImageIndex: PINT,
3263     ) -> BOOL;
SetupDiDestroyClassImageList( ClassImageListData: PSP_CLASSIMAGELIST_DATA, ) -> BOOL3264     pub fn SetupDiDestroyClassImageList(
3265         ClassImageListData: PSP_CLASSIMAGELIST_DATA,
3266     ) -> BOOL;
3267 }
3268 pub const DIGCDP_FLAG_BASIC: DWORD = 0x00000001;
3269 pub const DIGCDP_FLAG_ADVANCED: DWORD = 0x00000002;
3270 pub const DIGCDP_FLAG_REMOTE_BASIC: DWORD = 0x00000003;
3271 pub const DIGCDP_FLAG_REMOTE_ADVANCED: DWORD = 0x00000004;
3272 extern "system" {
SetupDiGetClassDevPropertySheetsA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, PropertySheetHeader: LPPROPSHEETHEADERA, PropertySheetHeaderPageListSize: DWORD, RequiredSize: PDWORD, PropertySheetType: DWORD, ) -> BOOL3273     pub fn SetupDiGetClassDevPropertySheetsA(
3274         DeviceInfoSet: HDEVINFO,
3275         DeviceInfoData: PSP_DEVINFO_DATA,
3276         PropertySheetHeader: LPPROPSHEETHEADERA,
3277         PropertySheetHeaderPageListSize: DWORD,
3278         RequiredSize: PDWORD,
3279         PropertySheetType: DWORD,
3280     ) -> BOOL;
SetupDiGetClassDevPropertySheetsW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, PropertySheetHeader: LPPROPSHEETHEADERW, PropertySheetHeaderPageListSize: DWORD, RequiredSize: PDWORD, PropertySheetType: DWORD, ) -> BOOL3281     pub fn SetupDiGetClassDevPropertySheetsW(
3282         DeviceInfoSet: HDEVINFO,
3283         DeviceInfoData: PSP_DEVINFO_DATA,
3284         PropertySheetHeader: LPPROPSHEETHEADERW,
3285         PropertySheetHeaderPageListSize: DWORD,
3286         RequiredSize: PDWORD,
3287         PropertySheetType: DWORD,
3288     ) -> BOOL;
3289 }
3290 pub const IDI_RESOURCEFIRST: c_int = 159;
3291 pub const IDI_RESOURCE: c_int = 159;
3292 pub const IDI_RESOURCELAST: c_int = 161;
3293 pub const IDI_RESOURCEOVERLAYFIRST: c_int = 161;
3294 pub const IDI_RESOURCEOVERLAYLAST: c_int = 161;
3295 pub const IDI_CONFLICT: c_int = 161;
3296 pub const IDI_CLASSICON_OVERLAYFIRST: c_int = 500;
3297 pub const IDI_CLASSICON_OVERLAYLAST: c_int = 502;
3298 pub const IDI_PROBLEM_OVL: c_int = 500;
3299 pub const IDI_DISABLED_OVL: c_int = 501;
3300 pub const IDI_FORCED_OVL: c_int = 502;
3301 extern "system" {
SetupDiAskForOEMDisk( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL3302     pub fn SetupDiAskForOEMDisk(
3303         DeviceInfoSet: HDEVINFO,
3304         DeviceInfoData: PSP_DEVINFO_DATA,
3305     ) -> BOOL;
SetupDiSelectOEMDrv( hwndParent: HWND, DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL3306     pub fn SetupDiSelectOEMDrv(
3307         hwndParent: HWND,
3308         DeviceInfoSet: HDEVINFO,
3309         DeviceInfoData: PSP_DEVINFO_DATA,
3310     ) -> BOOL;
SetupDiClassNameFromGuidA( ClassGuid: *const GUID, ClassName: PSTR, ClassNameSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3311     pub fn SetupDiClassNameFromGuidA(
3312         ClassGuid: *const GUID,
3313         ClassName: PSTR,
3314         ClassNameSize: DWORD,
3315         RequiredSize: PDWORD,
3316     ) -> BOOL;
SetupDiClassNameFromGuidW( ClassGuid: *const GUID, ClassName: PWSTR, ClassNameSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3317     pub fn SetupDiClassNameFromGuidW(
3318         ClassGuid: *const GUID,
3319         ClassName: PWSTR,
3320         ClassNameSize: DWORD,
3321         RequiredSize: PDWORD,
3322     ) -> BOOL;
SetupDiClassNameFromGuidExA( ClassGuid: *const GUID, ClassName: PSTR, ClassNameSize: DWORD, RequiredSize: PDWORD, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL3323     pub fn SetupDiClassNameFromGuidExA(
3324         ClassGuid: *const GUID,
3325         ClassName: PSTR,
3326         ClassNameSize: DWORD,
3327         RequiredSize: PDWORD,
3328         MachineName: PCSTR,
3329         Reserved: PVOID,
3330     ) -> BOOL;
SetupDiClassNameFromGuidExW( ClassGuid: *const GUID, ClassName: PWSTR, ClassNameSize: DWORD, RequiredSize: PDWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL3331     pub fn SetupDiClassNameFromGuidExW(
3332         ClassGuid: *const GUID,
3333         ClassName: PWSTR,
3334         ClassNameSize: DWORD,
3335         RequiredSize: PDWORD,
3336         MachineName: PCWSTR,
3337         Reserved: PVOID,
3338     ) -> BOOL;
SetupDiClassGuidsFromNameA( ClassName: PCSTR, ClassGuidList: LPGUID, ClassGuidListSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3339     pub fn SetupDiClassGuidsFromNameA(
3340         ClassName: PCSTR,
3341         ClassGuidList: LPGUID,
3342         ClassGuidListSize: DWORD,
3343         RequiredSize: PDWORD,
3344     ) -> BOOL;
SetupDiClassGuidsFromNameW( ClassName: PCWSTR, ClassGuidList: LPGUID, ClassGuidListSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3345     pub fn SetupDiClassGuidsFromNameW(
3346         ClassName: PCWSTR,
3347         ClassGuidList: LPGUID,
3348         ClassGuidListSize: DWORD,
3349         RequiredSize: PDWORD,
3350     ) -> BOOL;
SetupDiClassGuidsFromNameExA( ClassName: PCSTR, ClassGuidList: LPGUID, ClassGuidListSize: DWORD, RequiredSize: PDWORD, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL3351     pub fn SetupDiClassGuidsFromNameExA(
3352         ClassName: PCSTR,
3353         ClassGuidList: LPGUID,
3354         ClassGuidListSize: DWORD,
3355         RequiredSize: PDWORD,
3356         MachineName: PCSTR,
3357         Reserved: PVOID,
3358     ) -> BOOL;
SetupDiClassGuidsFromNameExW( ClassName: PCWSTR, ClassGuidList: LPGUID, ClassGuidListSize: DWORD, RequiredSize: PDWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL3359     pub fn SetupDiClassGuidsFromNameExW(
3360         ClassName: PCWSTR,
3361         ClassGuidList: LPGUID,
3362         ClassGuidListSize: DWORD,
3363         RequiredSize: PDWORD,
3364         MachineName: PCWSTR,
3365         Reserved: PVOID,
3366     ) -> BOOL;
SetupDiGetHwProfileFriendlyNameA( HwProfile: DWORD, FriendlyName: PSTR, FriendlyNameSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3367     pub fn SetupDiGetHwProfileFriendlyNameA(
3368         HwProfile: DWORD,
3369         FriendlyName: PSTR,
3370         FriendlyNameSize: DWORD,
3371         RequiredSize: PDWORD,
3372     ) -> BOOL;
SetupDiGetHwProfileFriendlyNameW( HwProfile: DWORD, FriendlyName: PWSTR, FriendlyNameSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3373     pub fn SetupDiGetHwProfileFriendlyNameW(
3374         HwProfile: DWORD,
3375         FriendlyName: PWSTR,
3376         FriendlyNameSize: DWORD,
3377         RequiredSize: PDWORD,
3378     ) -> BOOL;
SetupDiGetHwProfileFriendlyNameExA( HwProfile: DWORD, FriendlyName: PSTR, FriendlyNameSize: DWORD, RequiredSize: PDWORD, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL3379     pub fn SetupDiGetHwProfileFriendlyNameExA(
3380         HwProfile: DWORD,
3381         FriendlyName: PSTR,
3382         FriendlyNameSize: DWORD,
3383         RequiredSize: PDWORD,
3384         MachineName: PCSTR,
3385         Reserved: PVOID,
3386     ) -> BOOL;
SetupDiGetHwProfileFriendlyNameExW( HwProfile: DWORD, FriendlyName: PWSTR, FriendlyNameSize: DWORD, RequiredSize: PDWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL3387     pub fn SetupDiGetHwProfileFriendlyNameExW(
3388         HwProfile: DWORD,
3389         FriendlyName: PWSTR,
3390         FriendlyNameSize: DWORD,
3391         RequiredSize: PDWORD,
3392         MachineName: PCWSTR,
3393         Reserved: PVOID,
3394     ) -> BOOL;
3395 }
3396 pub const SPWPT_SELECTDEVICE: DWORD = 0x00000001;
3397 pub const SPWP_USE_DEVINFO_DATA: DWORD = 0x00000001;
3398 extern "system" {
SetupDiGetWizardPage( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, InstallWizardData: PSP_INSTALLWIZARD_DATA, PageType: DWORD, Flags: DWORD, ) -> HPROPSHEETPAGE3399     pub fn SetupDiGetWizardPage(
3400         DeviceInfoSet: HDEVINFO,
3401         DeviceInfoData: PSP_DEVINFO_DATA,
3402         InstallWizardData: PSP_INSTALLWIZARD_DATA,
3403         PageType: DWORD,
3404         Flags: DWORD,
3405     ) -> HPROPSHEETPAGE;
SetupDiGetSelectedDevice( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL3406     pub fn SetupDiGetSelectedDevice(
3407         DeviceInfoSet: HDEVINFO,
3408         DeviceInfoData: PSP_DEVINFO_DATA,
3409     ) -> BOOL;
SetupDiSetSelectedDevice( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL3410     pub fn SetupDiSetSelectedDevice(
3411         DeviceInfoSet: HDEVINFO,
3412         DeviceInfoData: PSP_DEVINFO_DATA,
3413     ) -> BOOL;
SetupDiGetActualModelsSectionA( Context: PINFCONTEXT, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, InfSectionWithExt: PSTR, InfSectionWithExtSize: DWORD, RequiredSize: PDWORD, Reserved: PVOID, ) -> BOOL3414     pub fn SetupDiGetActualModelsSectionA(
3415         Context: PINFCONTEXT,
3416         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
3417         InfSectionWithExt: PSTR,
3418         InfSectionWithExtSize: DWORD,
3419         RequiredSize: PDWORD,
3420         Reserved: PVOID,
3421     ) -> BOOL;
SetupDiGetActualModelsSectionW( Context: PINFCONTEXT, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, InfSectionWithExt: PWSTR, InfSectionWithExtSize: DWORD, RequiredSize: PDWORD, Reserved: PVOID, ) -> BOOL3422     pub fn SetupDiGetActualModelsSectionW(
3423         Context: PINFCONTEXT,
3424         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
3425         InfSectionWithExt: PWSTR,
3426         InfSectionWithExtSize: DWORD,
3427         RequiredSize: PDWORD,
3428         Reserved: PVOID,
3429     ) -> BOOL;
SetupDiGetActualSectionToInstallA( InfHandle: HINF, InfSectionName: PCSTR, InfSectionWithExt: PSTR, InfSectionWithExtSize: DWORD, RequiredSize: PDWORD, Extension: *mut PSTR, ) -> BOOL3430     pub fn SetupDiGetActualSectionToInstallA(
3431         InfHandle: HINF,
3432         InfSectionName: PCSTR,
3433         InfSectionWithExt: PSTR,
3434         InfSectionWithExtSize: DWORD,
3435         RequiredSize: PDWORD,
3436         Extension: *mut PSTR,
3437     ) -> BOOL;
SetupDiGetActualSectionToInstallW( InfHandle: HINF, InfSectionName: PCWSTR, InfSectionWithExt: PWSTR, InfSectionWithExtSize: DWORD, RequiredSize: PDWORD, Extension: *mut PWSTR, ) -> BOOL3438     pub fn SetupDiGetActualSectionToInstallW(
3439         InfHandle: HINF,
3440         InfSectionName: PCWSTR,
3441         InfSectionWithExt: PWSTR,
3442         InfSectionWithExtSize: DWORD,
3443         RequiredSize: PDWORD,
3444         Extension: *mut PWSTR,
3445     ) -> BOOL;
SetupDiGetActualSectionToInstallExA( InfHandle: HINF, InfSectionName: PCSTR, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, InfSectionWithExt: PSTR, InfSectionWithExtSize: DWORD, RequiredSize: PDWORD, Extension: *mut PSTR, Reserved: PVOID, ) -> BOOL3446     pub fn SetupDiGetActualSectionToInstallExA(
3447         InfHandle: HINF,
3448         InfSectionName: PCSTR,
3449         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
3450         InfSectionWithExt: PSTR,
3451         InfSectionWithExtSize: DWORD,
3452         RequiredSize: PDWORD,
3453         Extension: *mut PSTR,
3454         Reserved: PVOID,
3455     ) -> BOOL;
SetupDiGetActualSectionToInstallExW( InfHandle: HINF, InfSectionName: PCWSTR, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, InfSectionWithExt: PWSTR, InfSectionWithExtSize: DWORD, RequiredSize: PDWORD, Extension: *mut PWSTR, Reserved: PVOID, ) -> BOOL3456     pub fn SetupDiGetActualSectionToInstallExW(
3457         InfHandle: HINF,
3458         InfSectionName: PCWSTR,
3459         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
3460         InfSectionWithExt: PWSTR,
3461         InfSectionWithExtSize: DWORD,
3462         RequiredSize: PDWORD,
3463         Extension: *mut PWSTR,
3464         Reserved: PVOID,
3465     ) -> BOOL;
SetupEnumInfSectionsA( InfHandle: HINF, Index: UINT, Buffer: PSTR, Size: UINT, SizeNeeded: *mut UINT, ) -> BOOL3466     pub fn SetupEnumInfSectionsA(
3467         InfHandle: HINF,
3468         Index: UINT,
3469         Buffer: PSTR,
3470         Size: UINT,
3471         SizeNeeded: *mut UINT,
3472     ) -> BOOL;
SetupEnumInfSectionsW( InfHandle: HINF, Index: UINT, Buffer: PWSTR, Size: UINT, SizeNeeded: *mut UINT, ) -> BOOL3473     pub fn SetupEnumInfSectionsW(
3474         InfHandle: HINF,
3475         Index: UINT,
3476         Buffer: PWSTR,
3477         Size: UINT,
3478         SizeNeeded: *mut UINT,
3479     ) -> BOOL;
3480 }
3481 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INF_SIGNER_INFO_V1_A {
3482     cbSize: DWORD,
3483     CatalogFile: [CHAR; MAX_PATH],
3484     DigitalSigner: [CHAR; MAX_PATH],
3485     DigitalSignerVersion: [CHAR; MAX_PATH],
3486 }}
3487 pub type PSP_INF_SIGNER_INFO_V1_A = *mut SP_INF_SIGNER_INFO_V1_A;
3488 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INF_SIGNER_INFO_V1_W {
3489     cbSize: DWORD,
3490     CatalogFile: [WCHAR; MAX_PATH],
3491     DigitalSigner: [WCHAR; MAX_PATH],
3492     DigitalSignerVersion: [WCHAR; MAX_PATH],
3493 }}
3494 pub type PSP_INF_SIGNER_INFO_V1_W = *mut SP_INF_SIGNER_INFO_V1_W;
3495 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INF_SIGNER_INFO_V2_A {
3496     cbSize: DWORD,
3497     CatalogFile: [CHAR; MAX_PATH],
3498     DigitalSigner: [CHAR; MAX_PATH],
3499     DigitalSignerVersion: [CHAR; MAX_PATH],
3500     SignerScore: DWORD,
3501 }}
3502 pub type PSP_INF_SIGNER_INFO_V2_A = *mut SP_INF_SIGNER_INFO_V2_A;
3503 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INF_SIGNER_INFO_V2_W {
3504     cbSize: DWORD,
3505     CatalogFile: [WCHAR; MAX_PATH],
3506     DigitalSigner: [WCHAR; MAX_PATH],
3507     DigitalSignerVersion: [WCHAR; MAX_PATH],
3508     SignerScore: DWORD,
3509 }}
3510 pub type PSP_INF_SIGNER_INFO_V2_W = *mut SP_INF_SIGNER_INFO_V2_W;
3511 pub const SIGNERSCORE_UNKNOWN: DWORD = 0xFF000000;
3512 pub const SIGNERSCORE_W9X_SUSPECT: DWORD = 0xC0000000;
3513 pub const SIGNERSCORE_UNSIGNED: DWORD = 0x80000000;
3514 pub const SIGNERSCORE_AUTHENTICODE: DWORD = 0x0F000000;
3515 pub const SIGNERSCORE_WHQL: DWORD = 0x0D000005;
3516 pub const SIGNERSCORE_UNCLASSIFIED: DWORD = 0x0D000004;
3517 pub const SIGNERSCORE_INBOX: DWORD = 0x0D000003;
3518 pub const SIGNERSCORE_LOGO_STANDARD: DWORD = 0x0D000002;
3519 pub const SIGNERSCORE_LOGO_PREMIUM: DWORD = 0x0D000001;
3520 pub const SIGNERSCORE_MASK: DWORD = 0xFF000000;
3521 pub const SIGNERSCORE_SIGNED_MASK: DWORD = 0xF0000000;
3522 pub type SP_INF_SIGNER_INFO_A = SP_INF_SIGNER_INFO_V2_A;
3523 pub type PSP_INF_SIGNER_INFO_A = PSP_INF_SIGNER_INFO_V2_A;
3524 pub type SP_INF_SIGNER_INFO_W = SP_INF_SIGNER_INFO_V2_W;
3525 pub type PSP_INF_SIGNER_INFO_W = PSP_INF_SIGNER_INFO_V2_W;
3526 extern "system" {
SetupVerifyInfFileA( InfName: PCSTR, AltPlatformInfo: PSP_ALTPLATFORM_INFO, InfSignerInfo: PSP_INF_SIGNER_INFO_A, ) -> BOOL3527     pub fn SetupVerifyInfFileA(
3528         InfName: PCSTR,
3529         AltPlatformInfo: PSP_ALTPLATFORM_INFO,
3530         InfSignerInfo: PSP_INF_SIGNER_INFO_A,
3531     ) -> BOOL;
SetupVerifyInfFileW( InfName: PCWSTR, AltPlatformInfo: PSP_ALTPLATFORM_INFO, InfSignerInfo: PSP_INF_SIGNER_INFO_W, ) -> BOOL3532     pub fn SetupVerifyInfFileW(
3533         InfName: PCWSTR,
3534         AltPlatformInfo: PSP_ALTPLATFORM_INFO,
3535         InfSignerInfo: PSP_INF_SIGNER_INFO_W,
3536     ) -> BOOL;
3537 }
3538 pub const DICUSTOMDEVPROP_MERGE_MULTISZ: DWORD = 0x00000001;
3539 extern "system" {
SetupDiGetCustomDevicePropertyA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, CustomPropertyName: PCSTR, Flags: DWORD, PropertyRegDataType: PDWORD, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3540     pub fn SetupDiGetCustomDevicePropertyA(
3541         DeviceInfoSet: HDEVINFO,
3542         DeviceInfoData: PSP_DEVINFO_DATA,
3543         CustomPropertyName: PCSTR,
3544         Flags: DWORD,
3545         PropertyRegDataType: PDWORD,
3546         PropertyBuffer: PBYTE,
3547         PropertyBufferSize: DWORD,
3548         RequiredSize: PDWORD,
3549     ) -> BOOL;
SetupDiGetCustomDevicePropertyW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, CustomPropertyName: PCWSTR, Flags: DWORD, PropertyRegDataType: PDWORD, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3550     pub fn SetupDiGetCustomDevicePropertyW(
3551         DeviceInfoSet: HDEVINFO,
3552         DeviceInfoData: PSP_DEVINFO_DATA,
3553         CustomPropertyName: PCWSTR,
3554         Flags: DWORD,
3555         PropertyRegDataType: PDWORD,
3556         PropertyBuffer: PBYTE,
3557         PropertyBufferSize: DWORD,
3558         RequiredSize: PDWORD,
3559     ) -> BOOL;
3560 }
3561 pub const SCWMI_CLOBBER_SECURITY: DWORD = 0x00000001;
3562 extern "system" {
SetupConfigureWmiFromInfSectionA( InfHandle: HINF, SectionName: PCSTR, Flags: DWORD, ) -> BOOL3563     pub fn SetupConfigureWmiFromInfSectionA(
3564         InfHandle: HINF,
3565         SectionName: PCSTR,
3566         Flags: DWORD,
3567     ) -> BOOL;
SetupConfigureWmiFromInfSectionW( InfHandle: HINF, SectionName: PCWSTR, Flags: DWORD, ) -> BOOL3568     pub fn SetupConfigureWmiFromInfSectionW(
3569         InfHandle: HINF,
3570         SectionName: PCWSTR,
3571         Flags: DWORD,
3572     ) -> BOOL;
3573 }
3574