1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! Public header file for Windows NT Setup and Device Installer services Dll.
7 use ctypes::c_int;
8 use shared::basetsd::{DWORD_PTR, UINT_PTR, ULONG_PTR};
9 use shared::devpropdef::{DEVPROPKEY, DEVPROPTYPE};
10 use shared::guiddef::{GUID, LPGUID};
11 use shared::minwindef::{
12     BOOL, BYTE, DWORD, FILETIME, HINSTANCE, HKEY, INT, LPARAM, LPCVOID, LPDWORD, MAX_PATH, PBOOL,
13     PBYTE, PDWORD, PINT, PUINT, UINT, USHORT, WORD,
14 };
15 use shared::windef::{HDC, HICON, HWND, RECT};
16 use um::commctrl::HIMAGELIST;
17 use um::prsht::{HPROPSHEETPAGE, LPPROPSHEETHEADERA, LPPROPSHEETHEADERW};
18 use um::spapidef::SP_LOG_TOKEN;
19 use um::winnt::{
20     ANYSIZE_ARRAY, APPLICATION_ERROR_MASK, CHAR, DWORDLONG, ERROR_SEVERITY_ERROR, HANDLE, LONG,
21     LONGLONG, LPCSTR, LPCWSTR, PCSTR, PCWSTR, PSTR, PVOID, PWSTR, WCHAR,
22 };
23 use um::winreg::REGSAM;
24 pub const LINE_LEN: usize = 256;
25 pub const MAX_INF_STRING_LENGTH: usize = 4096;
26 pub const MAX_INF_SECTION_NAME_LENGTH: usize = 255;
27 pub const MAX_TITLE_LEN: usize = 60;
28 pub const MAX_INSTRUCTION_LEN: usize = 256;
29 pub const MAX_LABEL_LEN: usize = 30;
30 pub const MAX_SERVICE_NAME_LEN: usize = 256;
31 pub const MAX_SUBTITLE_LEN: usize = 256;
32 pub const SP_MAX_MACHINENAME_LENGTH: usize = MAX_PATH + 3;
33 pub type HINF = PVOID;
34 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct INFCONTEXT {
35     Inf: PVOID,
36     CurrentInf: PVOID,
37     Section: UINT,
38     Line: UINT,
39 }}
40 pub type PINFCONTEXT = *mut INFCONTEXT;
41 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INF_INFORMATION {
42     InfStyle: DWORD,
43     InfCount: DWORD,
44     VersionData: [BYTE; ANYSIZE_ARRAY],
45 }}
46 pub type PSP_INF_INFORMATION = *mut SP_INF_INFORMATION;
47 UNION!{#[cfg_attr(target_arch = "x86", repr(packed))] union SP_ALTPLATFORM_INFO_V3_u {
48     [u16; 1],
49     Reserved Reserved_mut: WORD,
50     Flags Flags_mut: WORD,
51 }}
52 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ALTPLATFORM_INFO_V3 {
53     cbSize: DWORD,
54     Platform: DWORD,
55     MajorVersion: DWORD,
56     MinorVersion: DWORD,
57     ProcessorArchitecture: WORD,
58     u: SP_ALTPLATFORM_INFO_V3_u,
59     FirstValidatedMajorVersion: DWORD,
60     FirstValidatedMinorVersion: DWORD,
61     ProductType: BYTE,
62     SuiteMask: WORD,
63     BuildNumber: DWORD,
64 }}
65 pub type PSP_ALTPLATFORM_INFO_V3 = *mut SP_ALTPLATFORM_INFO_V3;
66 UNION!{#[cfg_attr(target_arch = "x86", repr(packed))] union SP_ALTPLATFORM_INFO_V2_u {
67     [u16; 1],
68     Reserved Reserved_mut: WORD,
69     Flags Flags_mut: WORD,
70 }}
71 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ALTPLATFORM_INFO_V2 {
72     cbSize: DWORD,
73     Platform: DWORD,
74     MajorVersion: DWORD,
75     MinorVersion: DWORD,
76     ProcessorArchitecture: WORD,
77     u: SP_ALTPLATFORM_INFO_V2_u,
78     FirstValidatedMajorVersion: DWORD,
79     FirstValidatedMinorVersion: DWORD,
80 }}
81 pub type PSP_ALTPLATFORM_INFO_V2 = *mut SP_ALTPLATFORM_INFO_V2;
82 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ALTPLATFORM_INFO_V1 {
83     cbSize: DWORD,
84     Platform: DWORD,
85     MajorVersion: DWORD,
86     MinorVersion: DWORD,
87     ProcessorArchitecture: WORD,
88     Reserved: WORD,
89 }}
90 pub type PSP_ALTPLATFORM_INFO_V1 = *mut SP_ALTPLATFORM_INFO_V1;
91 pub type SP_ALTPLATFORM_INFO = SP_ALTPLATFORM_INFO_V2;
92 pub type PSP_ALTPLATFORM_INFO = PSP_ALTPLATFORM_INFO_V2;
93 pub const SP_ALTPLATFORM_FLAGS_VERSION_RANGE: WORD = 0x0001;
94 pub const SP_ALTPLATFORM_FLAGS_SUITE_MASK: WORD = 0x0002;
95 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ORIGINAL_FILE_INFO_A {
96     cbSize: DWORD,
97     OriginalInfName: [CHAR; MAX_PATH],
98     OriginalCatalogName: [CHAR; MAX_PATH],
99 }}
100 pub type PSP_ORIGINAL_FILE_INFO_A = *mut SP_ORIGINAL_FILE_INFO_A;
101 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ORIGINAL_FILE_INFO_W {
102     cbSize: DWORD,
103     OriginalInfName: [WCHAR; MAX_PATH],
104     OriginalCatalogName: [WCHAR; MAX_PATH],
105 }}
106 pub type PSP_ORIGINAL_FILE_INFO_W = *mut SP_ORIGINAL_FILE_INFO_W;
107 pub const INF_STYLE_NONE: DWORD = 0x00000000;
108 pub const INF_STYLE_OLDNT: DWORD = 0x00000001;
109 pub const INF_STYLE_WIN4: DWORD = 0x00000002;
110 pub const INF_STYLE_CACHE_ENABLE: DWORD = 0x00000010;
111 pub const INF_STYLE_CACHE_DISABLE: DWORD = 0x00000020;
112 pub const INF_STYLE_CACHE_IGNORE: DWORD = 0x00000040;
113 pub const DIRID_ABSOLUTE: DWORD = -1i32 as u32;
114 pub const DIRID_ABSOLUTE_16BIT: DWORD = 0xffff;
115 pub const DIRID_NULL: DWORD = 0;
116 pub const DIRID_SRCPATH: DWORD = 1;
117 pub const DIRID_WINDOWS: DWORD = 10;
118 pub const DIRID_SYSTEM: DWORD = 11;
119 pub const DIRID_DRIVERS: DWORD = 12;
120 pub const DIRID_IOSUBSYS: DWORD = DIRID_DRIVERS;
121 pub const DIRID_DRIVER_STORE: DWORD = 13;
122 pub const DIRID_INF: DWORD = 17;
123 pub const DIRID_HELP: DWORD = 18;
124 pub const DIRID_FONTS: DWORD = 20;
125 pub const DIRID_VIEWERS: DWORD = 21;
126 pub const DIRID_COLOR: DWORD = 23;
127 pub const DIRID_APPS: DWORD = 24;
128 pub const DIRID_SHARED: DWORD = 25;
129 pub const DIRID_BOOT: DWORD = 30;
130 pub const DIRID_SYSTEM16: DWORD = 50;
131 pub const DIRID_SPOOL: DWORD = 51;
132 pub const DIRID_SPOOLDRIVERS: DWORD = 52;
133 pub const DIRID_USERPROFILE: DWORD = 53;
134 pub const DIRID_LOADER: DWORD = 54;
135 pub const DIRID_PRINTPROCESSOR: DWORD = 55;
136 pub const DIRID_DEFAULT: DWORD = DIRID_SYSTEM;
137 pub const DIRID_COMMON_STARTMENU: DWORD = 16406;
138 pub const DIRID_COMMON_PROGRAMS: DWORD = 16407;
139 pub const DIRID_COMMON_STARTUP: DWORD = 16408;
140 pub const DIRID_COMMON_DESKTOPDIRECTORY: DWORD = 16409;
141 pub const DIRID_COMMON_FAVORITES: DWORD = 16415;
142 pub const DIRID_COMMON_APPDATA: DWORD = 16419;
143 pub const DIRID_PROGRAM_FILES: DWORD = 16422;
144 pub const DIRID_SYSTEM_X86: DWORD = 16425;
145 pub const DIRID_PROGRAM_FILES_X86: DWORD = 16426;
146 pub const DIRID_PROGRAM_FILES_COMMON: DWORD = 16427;
147 pub const DIRID_PROGRAM_FILES_COMMONX86: DWORD = 16428;
148 pub const DIRID_COMMON_TEMPLATES: DWORD = 16429;
149 pub const DIRID_COMMON_DOCUMENTS: DWORD = 16430;
150 pub const DIRID_USER: DWORD = 0x8000;
151 FN!{stdcall PSP_FILE_CALLBACK_A(
152     Context: PVOID,
153     Notification: UINT,
154     Param1: UINT_PTR,
155     Param2: UINT_PTR,
156 ) -> UINT}
157 FN!{stdcall PSP_FILE_CALLBACK_W(
158     Context: PVOID,
159     Notification: UINT,
160     Param1: UINT_PTR,
161     Param2: UINT_PTR,
162 ) -> UINT}
163 pub const SPFILENOTIFY_STARTQUEUE: UINT = 0x00000001;
164 pub const SPFILENOTIFY_ENDQUEUE: UINT = 0x00000002;
165 pub const SPFILENOTIFY_STARTSUBQUEUE: UINT = 0x00000003;
166 pub const SPFILENOTIFY_ENDSUBQUEUE: UINT = 0x00000004;
167 pub const SPFILENOTIFY_STARTDELETE: UINT = 0x00000005;
168 pub const SPFILENOTIFY_ENDDELETE: UINT = 0x00000006;
169 pub const SPFILENOTIFY_DELETEERROR: UINT = 0x00000007;
170 pub const SPFILENOTIFY_STARTRENAME: UINT = 0x00000008;
171 pub const SPFILENOTIFY_ENDRENAME: UINT = 0x00000009;
172 pub const SPFILENOTIFY_RENAMEERROR: UINT = 0x0000000a;
173 pub const SPFILENOTIFY_STARTCOPY: UINT = 0x0000000b;
174 pub const SPFILENOTIFY_ENDCOPY: UINT = 0x0000000c;
175 pub const SPFILENOTIFY_COPYERROR: UINT = 0x0000000d;
176 pub const SPFILENOTIFY_NEEDMEDIA: UINT = 0x0000000e;
177 pub const SPFILENOTIFY_QUEUESCAN: UINT = 0x0000000f;
178 pub const SPFILENOTIFY_CABINETINFO: UINT = 0x00000010;
179 pub const SPFILENOTIFY_FILEINCABINET: UINT = 0x00000011;
180 pub const SPFILENOTIFY_NEEDNEWCABINET: UINT = 0x00000012;
181 pub const SPFILENOTIFY_FILEEXTRACTED: UINT = 0x00000013;
182 pub const SPFILENOTIFY_FILEOPDELAYED: UINT = 0x00000014;
183 pub const SPFILENOTIFY_STARTBACKUP: UINT = 0x00000015;
184 pub const SPFILENOTIFY_BACKUPERROR: UINT = 0x00000016;
185 pub const SPFILENOTIFY_ENDBACKUP: UINT = 0x00000017;
186 pub const SPFILENOTIFY_QUEUESCAN_EX: UINT = 0x00000018;
187 pub const SPFILENOTIFY_STARTREGISTRATION: UINT = 0x00000019;
188 pub const SPFILENOTIFY_ENDREGISTRATION: UINT = 0x00000020;
189 pub const SPFILENOTIFY_QUEUESCAN_SIGNERINFO: UINT = 0x00000040;
190 pub const SPFILENOTIFY_LANGMISMATCH: UINT = 0x00010000;
191 pub const SPFILENOTIFY_TARGETEXISTS: UINT = 0x00020000;
192 pub const SPFILENOTIFY_TARGETNEWER: UINT = 0x00040000;
193 pub const FILEOP_COPY: UINT = 0;
194 pub const FILEOP_RENAME: UINT = 1;
195 pub const FILEOP_DELETE: UINT = 2;
196 pub const FILEOP_BACKUP: UINT = 3;
197 pub const FILEOP_ABORT: UINT = 0;
198 pub const FILEOP_DOIT: UINT = 1;
199 pub const FILEOP_SKIP: UINT = 2;
200 pub const FILEOP_RETRY: UINT = FILEOP_DOIT;
201 pub const FILEOP_NEWPATH: UINT = 4;
202 pub const COPYFLG_WARN_IF_SKIP: UINT = 0x00000001;
203 pub const COPYFLG_NOSKIP: UINT = 0x00000002;
204 pub const COPYFLG_NOVERSIONCHECK: UINT = 0x00000004;
205 pub const COPYFLG_FORCE_FILE_IN_USE: UINT = 0x00000008;
206 pub const COPYFLG_NO_OVERWRITE: UINT = 0x00000010;
207 pub const COPYFLG_NO_VERSION_DIALOG: UINT = 0x00000020;
208 pub const COPYFLG_OVERWRITE_OLDER_ONLY: UINT = 0x00000040;
209 pub const COPYFLG_PROTECTED_WINDOWS_DRIVER_FILE: UINT = 0x00000100;
210 pub const COPYFLG_REPLACEONLY: UINT = 0x00000400;
211 pub const COPYFLG_NODECOMP: UINT = 0x00000800;
212 pub const COPYFLG_REPLACE_BOOT_FILE: UINT = 0x00001000;
213 pub const COPYFLG_NOPRUNE: UINT = 0x00002000;
214 pub const COPYFLG_IN_USE_TRY_RENAME: UINT = 0x00004000;
215 pub const DELFLG_IN_USE: UINT = 0x00000001;
216 pub const DELFLG_IN_USE1: UINT = 0x00010000;
217 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILEPATHS_A {
218     Target: PCSTR,
219     Source: PCSTR,
220     Win32Error: UINT,
221     Flags: DWORD,
222 }}
223 pub type PFILEPATHS_A = *mut FILEPATHS_A;
224 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILEPATHS_W {
225     Target: PCWSTR,
226     Source: PCWSTR,
227     Win32Error: UINT,
228     Flags: DWORD,
229 }}
230 pub type PFILEPATHS_W = *mut FILEPATHS_W;
231 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILEPATHS_SIGNERINFO_A {
232     Target: PCSTR,
233     Source: PCSTR,
234     Win32Error: UINT,
235     Flags: DWORD,
236     DigitalSigner: PCSTR,
237     Version: PCSTR,
238     CatalogFile: PCSTR,
239 }}
240 pub type PFILEPATHS_SIGNERINFO_A = *mut FILEPATHS_SIGNERINFO_A;
241 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILEPATHS_SIGNERINFO_W {
242     Target: PCWSTR,
243     Source: PCWSTR,
244     Win32Error: UINT,
245     Flags: DWORD,
246     DigitalSigner: PCWSTR,
247     Version: PCWSTR,
248     CatalogFile: PCWSTR,
249 }}
250 pub type PFILEPATHS_SIGNERINFO_W = *mut FILEPATHS_SIGNERINFO_W;
251 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SOURCE_MEDIA_A {
252     Reserved: PCSTR,
253     Tagfile: PCSTR,
254     Description: PCSTR,
255     SourcePath: PCSTR,
256     SourceFile: PCSTR,
257     Flags: DWORD,
258 }}
259 pub type PSOURCE_MEDIA_A = *mut SOURCE_MEDIA_A;
260 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SOURCE_MEDIA_W {
261     Reserved: PCWSTR,
262     Tagfile: PCWSTR,
263     Description: PCWSTR,
264     SourcePath: PCWSTR,
265     SourceFile: PCWSTR,
266     Flags: DWORD,
267 }}
268 pub type PSOURCE_MEDIA_W = *mut SOURCE_MEDIA_W;
269 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct CABINET_INFO_A {
270     CabinetPath: PCSTR,
271     CabinetFile: PCSTR,
272     DiskName: PCSTR,
273     SetId: USHORT,
274     CabinetNumber: USHORT,
275 }}
276 pub type PCABINET_INFO_A = *mut CABINET_INFO_A;
277 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct CABINET_INFO_W {
278     CabinetPath: PCWSTR,
279     CabinetFile: PCWSTR,
280     DiskName: PCWSTR,
281     SetId: USHORT,
282     CabinetNumber: USHORT,
283 }}
284 pub type PCABINET_INFO_W = *mut CABINET_INFO_W;
285 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILE_IN_CABINET_INFO_A {
286     NameInCabinet: PCSTR,
287     FileSize: DWORD,
288     Win32Error: DWORD,
289     DosDate: WORD,
290     DosTime: WORD,
291     DosAttribs: WORD,
292     FullTargetName: [CHAR; MAX_PATH],
293 }}
294 pub type PFILE_IN_CABINET_INFO_A = *mut FILE_IN_CABINET_INFO_A;
295 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILE_IN_CABINET_INFO_W {
296     NameInCabinet: PCWSTR,
297     FileSize: DWORD,
298     Win32Error: DWORD,
299     DosDate: WORD,
300     DosTime: WORD,
301     DosAttribs: WORD,
302     FullTargetName: [WCHAR; MAX_PATH],
303 }}
304 pub type PFILE_IN_CABINET_INFO_W = *mut FILE_IN_CABINET_INFO_W;
305 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_REGISTER_CONTROL_STATUSA {
306     cbSize: DWORD,
307     FileName: PCSTR,
308     Win32Error: DWORD,
309     FailureCode: DWORD,
310 }}
311 pub type PSP_REGISTER_CONTROL_STATUSA = *mut SP_REGISTER_CONTROL_STATUSA;
312 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_REGISTER_CONTROL_STATUSW {
313     cbSize: DWORD,
314     FileName: PCWSTR,
315     Win32Error: DWORD,
316     FailureCode: DWORD,
317 }}
318 pub type PSP_REGISTER_CONTROL_STATUSW = *mut SP_REGISTER_CONTROL_STATUSW;
319 pub const SPREG_SUCCESS: DWORD = 0x00000000;
320 pub const SPREG_LOADLIBRARY: DWORD = 0x00000001;
321 pub const SPREG_GETPROCADDR: DWORD = 0x00000002;
322 pub const SPREG_REGSVR: DWORD = 0x00000003;
323 pub const SPREG_DLLINSTALL: DWORD = 0x00000004;
324 pub const SPREG_TIMEOUT: DWORD = 0x00000005;
325 pub const SPREG_UNKNOWN: DWORD = 0xFFFFFFFF;
326 pub type HSPFILEQ = PVOID;
327 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_FILE_COPY_PARAMS_A {
328     cbSize: DWORD,
329     QueueHandle: HSPFILEQ,
330     SourceRootPath: PCSTR,
331     SourcePath: PCSTR,
332     SourceFilename: PCSTR,
333     SourceDescription: PCSTR,
334     SourceTagfile: PCSTR,
335     TargetDirectory: PCSTR,
336     TargetFilename: PCSTR,
337     CopyStyle: DWORD,
338     LayoutInf: HINF,
339     SecurityDescriptor: PCSTR,
340 }}
341 pub type PSP_FILE_COPY_PARAMS_A = *mut SP_FILE_COPY_PARAMS_A;
342 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_FILE_COPY_PARAMS_W {
343     cbSize: DWORD,
344     QueueHandle: HSPFILEQ,
345     SourceRootPath: PCWSTR,
346     SourcePath: PCWSTR,
347     SourceFilename: PCWSTR,
348     SourceDescription: PCWSTR,
349     SourceTagfile: PCWSTR,
350     TargetDirectory: PCWSTR,
351     TargetFilename: PCWSTR,
352     CopyStyle: DWORD,
353     LayoutInf: HINF,
354     SecurityDescriptor: PCWSTR,
355 }}
356 pub type PSP_FILE_COPY_PARAMS_W = *mut SP_FILE_COPY_PARAMS_W;
357 pub type HDSKSPC = PVOID;
358 pub type HDEVINFO = PVOID;
359 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVINFO_DATA {
360     cbSize: DWORD,
361     ClassGuid: GUID,
362     DevInst: DWORD,
363     Reserved: ULONG_PTR,
364 }}
365 pub type PSP_DEVINFO_DATA = *mut SP_DEVINFO_DATA;
366 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVICE_INTERFACE_DATA {
367     cbSize: DWORD,
368     InterfaceClassGuid: GUID,
369     Flags: DWORD,
370     Reserved: ULONG_PTR,
371 }}
372 pub type PSP_DEVICE_INTERFACE_DATA = *mut SP_DEVICE_INTERFACE_DATA;
373 pub const SPINT_ACTIVE: DWORD = 0x00000001;
374 pub const SPINT_DEFAULT: DWORD = 0x00000002;
375 pub const SPINT_REMOVED: DWORD = 0x00000004;
376 pub type SP_INTERFACE_DEVICE_DATA = SP_DEVICE_INTERFACE_DATA;
377 pub type PSP_INTERFACE_DEVICE_DATA = PSP_DEVICE_INTERFACE_DATA;
378 pub const SPID_ACTIVE: DWORD = SPINT_ACTIVE;
379 pub const SPID_DEFAULT: DWORD = SPINT_DEFAULT;
380 pub const SPID_REMOVED: DWORD = SPINT_REMOVED;
381 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVICE_INTERFACE_DETAIL_DATA_A {
382     cbSize: DWORD,
383     DevicePath: [CHAR; ANYSIZE_ARRAY],
384 }}
385 pub type PSP_DEVICE_INTERFACE_DETAIL_DATA_A = *mut SP_DEVICE_INTERFACE_DETAIL_DATA_A;
386 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVICE_INTERFACE_DETAIL_DATA_W {
387     cbSize: DWORD,
388     DevicePath: [WCHAR; ANYSIZE_ARRAY],
389 }}
390 pub type PSP_DEVICE_INTERFACE_DETAIL_DATA_W = *mut SP_DEVICE_INTERFACE_DETAIL_DATA_W;
391 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVINFO_LIST_DETAIL_DATA_A {
392     cbSize: DWORD,
393     ClassGuid: GUID,
394     RemoteMachineHandle: HANDLE,
395     RemoteMachineName: [CHAR; SP_MAX_MACHINENAME_LENGTH],
396 }}
397 pub type PSP_DEVINFO_LIST_DETAIL_DATA_A = *mut SP_DEVINFO_LIST_DETAIL_DATA_A;
398 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVINFO_LIST_DETAIL_DATA_W {
399     cbSize: DWORD,
400     ClassGuid: GUID,
401     RemoteMachineHandle: HANDLE,
402     RemoteMachineName: [WCHAR; SP_MAX_MACHINENAME_LENGTH],
403 }}
404 pub type PSP_DEVINFO_LIST_DETAIL_DATA_W = *mut SP_DEVINFO_LIST_DETAIL_DATA_W;
405 pub const DIF_SELECTDEVICE: DI_FUNCTION = 0x00000001;
406 pub const DIF_INSTALLDEVICE: DI_FUNCTION = 0x00000002;
407 pub const DIF_ASSIGNRESOURCES: DI_FUNCTION = 0x00000003;
408 pub const DIF_PROPERTIES: DI_FUNCTION = 0x00000004;
409 pub const DIF_REMOVE: DI_FUNCTION = 0x00000005;
410 pub const DIF_FIRSTTIMESETUP: DI_FUNCTION = 0x00000006;
411 pub const DIF_FOUNDDEVICE: DI_FUNCTION = 0x00000007;
412 pub const DIF_SELECTCLASSDRIVERS: DI_FUNCTION = 0x00000008;
413 pub const DIF_VALIDATECLASSDRIVERS: DI_FUNCTION = 0x00000009;
414 pub const DIF_INSTALLCLASSDRIVERS: DI_FUNCTION = 0x0000000A;
415 pub const DIF_CALCDISKSPACE: DI_FUNCTION = 0x0000000B;
416 pub const DIF_DESTROYPRIVATEDATA: DI_FUNCTION = 0x0000000C;
417 pub const DIF_VALIDATEDRIVER: DI_FUNCTION = 0x0000000D;
418 pub const DIF_DETECT: DI_FUNCTION = 0x0000000F;
419 pub const DIF_INSTALLWIZARD: DI_FUNCTION = 0x00000010;
420 pub const DIF_DESTROYWIZARDDATA: DI_FUNCTION = 0x00000011;
421 pub const DIF_PROPERTYCHANGE: DI_FUNCTION = 0x00000012;
422 pub const DIF_ENABLECLASS: DI_FUNCTION = 0x00000013;
423 pub const DIF_DETECTVERIFY: DI_FUNCTION = 0x00000014;
424 pub const DIF_INSTALLDEVICEFILES: DI_FUNCTION = 0x00000015;
425 pub const DIF_UNREMOVE: DI_FUNCTION = 0x00000016;
426 pub const DIF_SELECTBESTCOMPATDRV: DI_FUNCTION = 0x00000017;
427 pub const DIF_ALLOW_INSTALL: DI_FUNCTION = 0x00000018;
428 pub const DIF_REGISTERDEVICE: DI_FUNCTION = 0x00000019;
429 pub const DIF_NEWDEVICEWIZARD_PRESELECT: DI_FUNCTION = 0x0000001A;
430 pub const DIF_NEWDEVICEWIZARD_SELECT: DI_FUNCTION = 0x0000001B;
431 pub const DIF_NEWDEVICEWIZARD_PREANALYZE: DI_FUNCTION = 0x0000001C;
432 pub const DIF_NEWDEVICEWIZARD_POSTANALYZE: DI_FUNCTION = 0x0000001D;
433 pub const DIF_NEWDEVICEWIZARD_FINISHINSTALL: DI_FUNCTION = 0x0000001E;
434 pub const DIF_UNUSED1: DI_FUNCTION = 0x0000001F;
435 pub const DIF_INSTALLINTERFACES: DI_FUNCTION = 0x00000020;
436 pub const DIF_DETECTCANCEL: DI_FUNCTION = 0x00000021;
437 pub const DIF_REGISTER_COINSTALLERS: DI_FUNCTION = 0x00000022;
438 pub const DIF_ADDPROPERTYPAGE_ADVANCED: DI_FUNCTION = 0x00000023;
439 pub const DIF_ADDPROPERTYPAGE_BASIC: DI_FUNCTION = 0x00000024;
440 pub const DIF_RESERVED1: DI_FUNCTION = 0x00000025;
441 pub const DIF_TROUBLESHOOTER: DI_FUNCTION = 0x00000026;
442 pub const DIF_POWERMESSAGEWAKE: DI_FUNCTION = 0x00000027;
443 pub const DIF_ADDREMOTEPROPERTYPAGE_ADVANCED: DI_FUNCTION = 0x00000028;
444 pub const DIF_UPDATEDRIVER_UI: DI_FUNCTION = 0x00000029;
445 pub const DIF_FINISHINSTALL_ACTION: DI_FUNCTION = 0x0000002A;
446 pub const DIF_RESERVED2: DI_FUNCTION = 0x00000030;
447 pub const DIF_MOVEDEVICE: DI_FUNCTION = 0x0000000E;
448 pub type DI_FUNCTION = UINT;
449 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVINSTALL_PARAMS_A {
450     cbSize: DWORD,
451     Flags: DWORD,
452     FlagsEx: DWORD,
453     hwndParent: HWND,
454     InstallMsgHandler: PSP_FILE_CALLBACK_A,
455     InstallMsgHandlerContext: PVOID,
456     FileQueue: HSPFILEQ,
457     ClassInstallReserved: ULONG_PTR,
458     Reserved: DWORD,
459     DriverPath: [CHAR; MAX_PATH],
460 }}
461 pub type PSP_DEVINSTALL_PARAMS_A = *mut SP_DEVINSTALL_PARAMS_A;
462 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVINSTALL_PARAMS_W {
463     cbSize: DWORD,
464     Flags: DWORD,
465     FlagsEx: DWORD,
466     hwndParent: HWND,
467     InstallMsgHandler: PSP_FILE_CALLBACK_W,
468     InstallMsgHandlerContext: PVOID,
469     FileQueue: HSPFILEQ,
470     ClassInstallReserved: ULONG_PTR,
471     Reserved: DWORD,
472     DriverPath: [WCHAR; MAX_PATH],
473 }}
474 pub type PSP_DEVINSTALL_PARAMS_W = *mut SP_DEVINSTALL_PARAMS_W;
475 pub const DI_SHOWOEM: DWORD = 0x00000001;
476 pub const DI_SHOWCOMPAT: DWORD = 0x00000002;
477 pub const DI_SHOWCLASS: DWORD = 0x00000004;
478 pub const DI_SHOWALL: DWORD = 0x00000007;
479 pub const DI_NOVCP: DWORD = 0x00000008;
480 pub const DI_DIDCOMPAT: DWORD = 0x00000010;
481 pub const DI_DIDCLASS: DWORD = 0x00000020;
482 pub const DI_AUTOASSIGNRES: DWORD = 0x00000040;
483 pub const DI_NEEDRESTART: DWORD = 0x00000080;
484 pub const DI_NEEDREBOOT: DWORD = 0x00000100;
485 pub const DI_NOBROWSE: DWORD = 0x00000200;
486 pub const DI_MULTMFGS: DWORD = 0x00000400;
487 pub const DI_DISABLED: DWORD = 0x00000800;
488 pub const DI_GENERALPAGE_ADDED: DWORD = 0x00001000;
489 pub const DI_RESOURCEPAGE_ADDED: DWORD = 0x00002000;
490 pub const DI_PROPERTIES_CHANGE: DWORD = 0x00004000;
491 pub const DI_INF_IS_SORTED: DWORD = 0x00008000;
492 pub const DI_ENUMSINGLEINF: DWORD = 0x00010000;
493 pub const DI_DONOTCALLCONFIGMG: DWORD = 0x00020000;
494 pub const DI_INSTALLDISABLED: DWORD = 0x00040000;
495 pub const DI_COMPAT_FROM_CLASS: DWORD = 0x00080000;
496 pub const DI_CLASSINSTALLPARAMS: DWORD = 0x00100000;
497 pub const DI_NODI_DEFAULTACTION: DWORD = 0x00200000;
498 pub const DI_QUIETINSTALL: DWORD = 0x00800000;
499 pub const DI_NOFILECOPY: DWORD = 0x01000000;
500 pub const DI_FORCECOPY: DWORD = 0x02000000;
501 pub const DI_DRIVERPAGE_ADDED: DWORD = 0x04000000;
502 pub const DI_USECI_SELECTSTRINGS: DWORD = 0x08000000;
503 pub const DI_OVERRIDE_INFFLAGS: DWORD = 0x10000000;
504 pub const DI_PROPS_NOCHANGEUSAGE: DWORD = 0x20000000;
505 pub const DI_NOSELECTICONS: DWORD = 0x40000000;
506 pub const DI_NOWRITE_IDS: DWORD = 0x80000000;
507 pub const DI_FLAGSEX_RESERVED2: DWORD = 0x00000001;
508 pub const DI_FLAGSEX_RESERVED3: DWORD = 0x00000002;
509 pub const DI_FLAGSEX_CI_FAILED: DWORD = 0x00000004;
510 pub const DI_FLAGSEX_FINISHINSTALL_ACTION: DWORD = 0x00000008;
511 pub const DI_FLAGSEX_DIDINFOLIST: DWORD = 0x00000010;
512 pub const DI_FLAGSEX_DIDCOMPATINFO: DWORD = 0x00000020;
513 pub const DI_FLAGSEX_FILTERCLASSES: DWORD = 0x00000040;
514 pub const DI_FLAGSEX_SETFAILEDINSTALL: DWORD = 0x00000080;
515 pub const DI_FLAGSEX_DEVICECHANGE: DWORD = 0x00000100;
516 pub const DI_FLAGSEX_ALWAYSWRITEIDS: DWORD = 0x00000200;
517 pub const DI_FLAGSEX_PROPCHANGE_PENDING: DWORD = 0x00000400;
518 pub const DI_FLAGSEX_ALLOWEXCLUDEDDRVS: DWORD = 0x00000800;
519 pub const DI_FLAGSEX_NOUIONQUERYREMOVE: DWORD = 0x00001000;
520 pub const DI_FLAGSEX_USECLASSFORCOMPAT: DWORD = 0x00002000;
521 pub const DI_FLAGSEX_RESERVED4: DWORD = 0x00004000;
522 pub const DI_FLAGSEX_NO_DRVREG_MODIFY: DWORD = 0x00008000;
523 pub const DI_FLAGSEX_IN_SYSTEM_SETUP: DWORD = 0x00010000;
524 pub const DI_FLAGSEX_INET_DRIVER: DWORD = 0x00020000;
525 pub const DI_FLAGSEX_APPENDDRIVERLIST: DWORD = 0x00040000;
526 pub const DI_FLAGSEX_PREINSTALLBACKUP: DWORD = 0x00080000;
527 pub const DI_FLAGSEX_BACKUPONREPLACE: DWORD = 0x00100000;
528 pub const DI_FLAGSEX_DRIVERLIST_FROM_URL: DWORD = 0x00200000;
529 pub const DI_FLAGSEX_RESERVED1: DWORD = 0x00400000;
530 pub const DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS: DWORD = 0x00800000;
531 pub const DI_FLAGSEX_POWERPAGE_ADDED: DWORD = 0x01000000;
532 pub const DI_FLAGSEX_FILTERSIMILARDRIVERS: DWORD = 0x02000000;
533 pub const DI_FLAGSEX_INSTALLEDDRIVER: DWORD = 0x04000000;
534 pub const DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE: DWORD = 0x08000000;
535 pub const DI_FLAGSEX_ALTPLATFORM_DRVSEARCH: DWORD = 0x10000000;
536 pub const DI_FLAGSEX_RESTART_DEVICE_ONLY: DWORD = 0x20000000;
537 pub const DI_FLAGSEX_RECURSIVESEARCH: DWORD = 0x40000000;
538 pub const DI_FLAGSEX_SEARCH_PUBLISHED_INFS: DWORD = 0x80000000;
539 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_CLASSINSTALL_HEADER {
540     cbSize: DWORD,
541     InstallFunction: DI_FUNCTION,
542 }}
543 pub type PSP_CLASSINSTALL_HEADER = *mut SP_CLASSINSTALL_HEADER;
544 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ENABLECLASS_PARAMS {
545     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
546     ClassGuid: GUID,
547     EnableMessage: DWORD,
548 }}
549 pub type PSP_ENABLECLASS_PARAMS = *mut SP_ENABLECLASS_PARAMS;
550 pub const ENABLECLASS_QUERY: DWORD = 0;
551 pub const ENABLECLASS_SUCCESS: DWORD = 1;
552 pub const ENABLECLASS_FAILURE: DWORD = 2;
553 pub const DICS_ENABLE: DWORD = 0x00000001;
554 pub const DICS_DISABLE: DWORD = 0x00000002;
555 pub const DICS_PROPCHANGE: DWORD = 0x00000003;
556 pub const DICS_START: DWORD = 0x00000004;
557 pub const DICS_STOP: DWORD = 0x00000005;
558 pub const DICS_FLAG_GLOBAL: DWORD = 0x00000001;
559 pub const DICS_FLAG_CONFIGSPECIFIC: DWORD = 0x00000002;
560 pub const DICS_FLAG_CONFIGGENERAL: DWORD = 0x00000004;
561 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_PROPCHANGE_PARAMS {
562     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
563     StateChange: DWORD,
564     Scope: DWORD,
565     HwProfile: DWORD,
566 }}
567 pub type PSP_PROPCHANGE_PARAMS = *mut SP_PROPCHANGE_PARAMS;
568 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_REMOVEDEVICE_PARAMS {
569     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
570     Scope: DWORD,
571     HwProfile: DWORD,
572 }}
573 pub type PSP_REMOVEDEVICE_PARAMS = *mut SP_REMOVEDEVICE_PARAMS;
574 pub const DI_REMOVEDEVICE_GLOBAL: DWORD = 0x00000001;
575 pub const DI_REMOVEDEVICE_CONFIGSPECIFIC: DWORD = 0x00000002;
576 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_UNREMOVEDEVICE_PARAMS {
577     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
578     Scope: DWORD,
579     HwProfile: DWORD,
580 }}
581 pub type PSP_UNREMOVEDEVICE_PARAMS = *mut SP_UNREMOVEDEVICE_PARAMS;
582 pub const DI_UNREMOVEDEVICE_CONFIGSPECIFIC: DWORD = 0x00000002;
583 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_SELECTDEVICE_PARAMS_A {
584     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
585     Title: [CHAR; MAX_TITLE_LEN],
586     Instructions: [CHAR; MAX_INSTRUCTION_LEN],
587     ListLabel: [CHAR; MAX_LABEL_LEN],
588     SubTitle: [CHAR; MAX_SUBTITLE_LEN],
589     Reserved: [BYTE; 2],
590 }}
591 pub type PSP_SELECTDEVICE_PARAMS_A = *mut SP_SELECTDEVICE_PARAMS_A;
592 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_SELECTDEVICE_PARAMS_W {
593     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
594     Title: [WCHAR; MAX_TITLE_LEN],
595     Instructions: [WCHAR; MAX_INSTRUCTION_LEN],
596     ListLabel: [WCHAR; MAX_LABEL_LEN],
597     SubTitle: [WCHAR; MAX_SUBTITLE_LEN],
598 }}
599 pub type PSP_SELECTDEVICE_PARAMS_W = *mut SP_SELECTDEVICE_PARAMS_W;
600 FN!{stdcall PDETECT_PROGRESS_NOTIFY(
601     ProgressNotifyParam: PVOID,
602     DetectComplete: DWORD,
603 ) -> BOOL}
604 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DETECTDEVICE_PARAMS {
605     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
606     DetectProgressNotify: PDETECT_PROGRESS_NOTIFY,
607     ProgressNotifyParam: PVOID,
608 }}
609 pub type PSP_DETECTDEVICE_PARAMS = *mut SP_DETECTDEVICE_PARAMS;
610 pub const MAX_INSTALLWIZARD_DYNAPAGES: usize = 20;
611 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INSTALLWIZARD_DATA {
612     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
613     Flags: DWORD,
614     DynamicPages: [HPROPSHEETPAGE; MAX_INSTALLWIZARD_DYNAPAGES],
615     NumDynamicPages: DWORD,
616     DynamicPageFlags: DWORD,
617     PrivateFlags: DWORD,
618     PrivateData: LPARAM,
619     hwndWizardDlg: HWND,
620 }}
621 pub type PSP_INSTALLWIZARD_DATA = *mut SP_INSTALLWIZARD_DATA;
622 pub const NDW_INSTALLFLAG_DIDFACTDEFS: DWORD = 0x00000001;
623 pub const NDW_INSTALLFLAG_HARDWAREALLREADYIN: DWORD = 0x00000002;
624 pub const NDW_INSTALLFLAG_NEEDRESTART: DWORD = DI_NEEDRESTART;
625 pub const NDW_INSTALLFLAG_NEEDREBOOT: DWORD = DI_NEEDREBOOT;
626 pub const NDW_INSTALLFLAG_NEEDSHUTDOWN: DWORD = 0x00000200;
627 pub const NDW_INSTALLFLAG_EXPRESSINTRO: DWORD = 0x00000400;
628 pub const NDW_INSTALLFLAG_SKIPISDEVINSTALLED: DWORD = 0x00000800;
629 pub const NDW_INSTALLFLAG_NODETECTEDDEVS: DWORD = 0x00001000;
630 pub const NDW_INSTALLFLAG_INSTALLSPECIFIC: DWORD = 0x00002000;
631 pub const NDW_INSTALLFLAG_SKIPCLASSLIST: DWORD = 0x00004000;
632 pub const NDW_INSTALLFLAG_CI_PICKED_OEM: DWORD = 0x00008000;
633 pub const NDW_INSTALLFLAG_PCMCIAMODE: DWORD = 0x00010000;
634 pub const NDW_INSTALLFLAG_PCMCIADEVICE: DWORD = 0x00020000;
635 pub const NDW_INSTALLFLAG_USERCANCEL: DWORD = 0x00040000;
636 pub const NDW_INSTALLFLAG_KNOWNCLASS: DWORD = 0x00080000;
637 pub const DYNAWIZ_FLAG_PAGESADDED: DWORD = 0x00000001;
638 pub const DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT: DWORD = 0x00000008;
639 pub const DYNAWIZ_FLAG_INSTALLDET_NEXT: DWORD = 0x00000002;
640 pub const DYNAWIZ_FLAG_INSTALLDET_PREV: DWORD = 0x00000004;
641 pub const MIN_IDD_DYNAWIZ_RESOURCE_ID: c_int = 10000;
642 pub const MAX_IDD_DYNAWIZ_RESOURCE_ID: c_int = 11000;
643 pub const IDD_DYNAWIZ_FIRSTPAGE: c_int = 10000;
644 pub const IDD_DYNAWIZ_SELECT_PREVPAGE: c_int = 10001;
645 pub const IDD_DYNAWIZ_SELECT_NEXTPAGE: c_int = 10002;
646 pub const IDD_DYNAWIZ_ANALYZE_PREVPAGE: c_int = 10003;
647 pub const IDD_DYNAWIZ_ANALYZE_NEXTPAGE: c_int = 10004;
648 pub const IDD_DYNAWIZ_SELECTDEV_PAGE: c_int = 10009;
649 pub const IDD_DYNAWIZ_ANALYZEDEV_PAGE: c_int = 10010;
650 pub const IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE: c_int = 10011;
651 pub const IDD_DYNAWIZ_SELECTCLASS_PAGE: c_int = 10012;
652 pub const IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE: c_int = 10006;
653 pub const IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE: c_int = 10007;
654 pub const IDD_DYNAWIZ_INSTALLDETECTED_NODEVS: c_int = 10008;
655 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_NEWDEVICEWIZARD_DATA {
656     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
657     Flags: DWORD,
658     DynamicPages: [HPROPSHEETPAGE; MAX_INSTALLWIZARD_DYNAPAGES],
659     NumDynamicPages: DWORD,
660     hwndWizardDlg: HWND,
661 }}
662 pub type PSP_NEWDEVICEWIZARD_DATA = *mut SP_NEWDEVICEWIZARD_DATA;
663 pub type SP_ADDPROPERTYPAGE_DATA = SP_NEWDEVICEWIZARD_DATA;
664 pub type PSP_ADDPROPERTYPAGE_DATA = PSP_NEWDEVICEWIZARD_DATA;
665 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_TROUBLESHOOTER_PARAMS_A {
666     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
667     ChmFile: [CHAR; MAX_PATH],
668     HtmlTroubleShooter: [CHAR; MAX_PATH],
669 }}
670 pub type PSP_TROUBLESHOOTER_PARAMS_A = *mut SP_TROUBLESHOOTER_PARAMS_A;
671 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_TROUBLESHOOTER_PARAMS_W {
672     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
673     ChmFile: [WCHAR; MAX_PATH],
674     HtmlTroubleShooter: [WCHAR; MAX_PATH],
675 }}
676 pub type PSP_TROUBLESHOOTER_PARAMS_W = *mut SP_TROUBLESHOOTER_PARAMS_W;
677 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_POWERMESSAGEWAKE_PARAMS_A {
678     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
679     PowerMessageWake: [CHAR; LINE_LEN * 2],
680 }}
681 pub type PSP_POWERMESSAGEWAKE_PARAMS_A = *mut SP_POWERMESSAGEWAKE_PARAMS_A;
682 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_POWERMESSAGEWAKE_PARAMS_W {
683     ClassInstallHeader: SP_CLASSINSTALL_HEADER,
684     PowerMessageWake: [WCHAR; LINE_LEN * 2],
685 }}
686 pub type PSP_POWERMESSAGEWAKE_PARAMS_W = *mut SP_POWERMESSAGEWAKE_PARAMS_W;
687 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DATA_V2_A {
688     cbSize: DWORD,
689     DriverType: DWORD,
690     Reserved: ULONG_PTR,
691     Description: [CHAR; LINE_LEN],
692     MfgName: [CHAR; LINE_LEN],
693     ProviderName: [CHAR; LINE_LEN],
694     DriverDate: FILETIME,
695     DriverVersion: DWORDLONG,
696 }}
697 pub type PSP_DRVINFO_DATA_V2_A = *mut SP_DRVINFO_DATA_V2_A;
698 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DATA_V2_W {
699     cbSize: DWORD,
700     DriverType: DWORD,
701     Reserved: ULONG_PTR,
702     Description: [WCHAR; LINE_LEN],
703     MfgName: [WCHAR; LINE_LEN],
704     ProviderName: [WCHAR; LINE_LEN],
705     DriverDate: FILETIME,
706     DriverVersion: DWORDLONG,
707 }}
708 pub type PSP_DRVINFO_DATA_V2_W = *mut SP_DRVINFO_DATA_V2_W;
709 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DATA_V1_A {
710     cbSize: DWORD,
711     DriverType: DWORD,
712     Reserved: ULONG_PTR,
713     Description: [CHAR; LINE_LEN],
714     MfgName: [CHAR; LINE_LEN],
715     ProviderName: [CHAR; LINE_LEN],
716 }}
717 pub type PSP_DRVINFO_DATA_V1_A = *mut SP_DRVINFO_DATA_V1_A;
718 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DATA_V1_W {
719     cbSize: DWORD,
720     DriverType: DWORD,
721     Reserved: ULONG_PTR,
722     Description: [WCHAR; LINE_LEN],
723     MfgName: [WCHAR; LINE_LEN],
724     ProviderName: [WCHAR; LINE_LEN],
725 }}
726 pub type PSP_DRVINFO_DATA_V1_W = *mut SP_DRVINFO_DATA_V1_W;
727 pub type SP_DRVINFO_DATA_A = SP_DRVINFO_DATA_V2_A;
728 pub type PSP_DRVINFO_DATA_A = PSP_DRVINFO_DATA_V2_A;
729 pub type SP_DRVINFO_DATA_W = SP_DRVINFO_DATA_V2_W;
730 pub type PSP_DRVINFO_DATA_W = PSP_DRVINFO_DATA_V2_W;
731 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DETAIL_DATA_A {
732     cbSize: DWORD,
733     InfDate: FILETIME,
734     CompatIDsOffset: DWORD,
735     CompatIDsLength: DWORD,
736     Reserved: ULONG_PTR,
737     SectionName: [CHAR; LINE_LEN],
738     InfFileName: [CHAR; MAX_PATH],
739     DrvDescription: [CHAR; LINE_LEN],
740     HardwareID: [CHAR; ANYSIZE_ARRAY],
741 }}
742 pub type PSP_DRVINFO_DETAIL_DATA_A = *mut SP_DRVINFO_DETAIL_DATA_A;
743 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DETAIL_DATA_W {
744     cbSize: DWORD,
745     InfDate: FILETIME,
746     CompatIDsOffset: DWORD,
747     CompatIDsLength: DWORD,
748     Reserved: ULONG_PTR,
749     SectionName: [WCHAR; LINE_LEN],
750     InfFileName: [WCHAR; MAX_PATH],
751     DrvDescription: [WCHAR; LINE_LEN],
752     HardwareID: [WCHAR; ANYSIZE_ARRAY],
753 }}
754 pub type PSP_DRVINFO_DETAIL_DATA_W = *mut SP_DRVINFO_DETAIL_DATA_W;
755 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINSTALL_PARAMS {
756     cbSize: DWORD,
757     Rank: DWORD,
758     Flags: DWORD,
759     PrivateData: DWORD_PTR,
760     Reserved: DWORD,
761 }}
762 pub type PSP_DRVINSTALL_PARAMS = *mut SP_DRVINSTALL_PARAMS;
763 pub const DNF_DUPDESC: DWORD = 0x00000001;
764 pub const DNF_OLDDRIVER: DWORD = 0x00000002;
765 pub const DNF_EXCLUDEFROMLIST: DWORD = 0x00000004;
766 pub const DNF_NODRIVER: DWORD = 0x00000008;
767 pub const DNF_LEGACYINF: DWORD = 0x00000010;
768 pub const DNF_CLASS_DRIVER: DWORD = 0x00000020;
769 pub const DNF_COMPATIBLE_DRIVER: DWORD = 0x00000040;
770 pub const DNF_INET_DRIVER: DWORD = 0x00000080;
771 pub const DNF_UNUSED1: DWORD = 0x00000100;
772 pub const DNF_UNUSED2: DWORD = 0x00000200;
773 pub const DNF_OLD_INET_DRIVER: DWORD = 0x00000400;
774 pub const DNF_BAD_DRIVER: DWORD = 0x00000800;
775 pub const DNF_DUPPROVIDER: DWORD = 0x00001000;
776 pub const DNF_INF_IS_SIGNED: DWORD = 0x00002000;
777 pub const DNF_OEM_F6_INF: DWORD = 0x00004000;
778 pub const DNF_DUPDRIVERVER: DWORD = 0x00008000;
779 pub const DNF_BASIC_DRIVER: DWORD = 0x00010000;
780 pub const DNF_AUTHENTICODE_SIGNED: DWORD = 0x00020000;
781 pub const DNF_INSTALLEDDRIVER: DWORD = 0x00040000;
782 pub const DNF_ALWAYSEXCLUDEFROMLIST: DWORD = 0x00080000;
783 pub const DNF_INBOX_DRIVER: DWORD = 0x00100000;
784 pub const DNF_REQUESTADDITIONALSOFTWARE: DWORD = 0x00200000;
785 pub const DNF_UNUSED_22: DWORD = 0x00400000;
786 pub const DNF_UNUSED_23: DWORD = 0x00800000;
787 pub const DNF_UNUSED_24: DWORD = 0x01000000;
788 pub const DNF_UNUSED_25: DWORD = 0x02000000;
789 pub const DNF_UNUSED_26: DWORD = 0x04000000;
790 pub const DNF_UNUSED_27: DWORD = 0x08000000;
791 pub const DNF_UNUSED_28: DWORD = 0x10000000;
792 pub const DNF_UNUSED_29: DWORD = 0x20000000;
793 pub const DNF_UNUSED_30: DWORD = 0x40000000;
794 pub const DNF_UNUSED_31: DWORD = 0x80000000;
795 pub const DRIVER_HARDWAREID_RANK: DWORD = 0x00000FFF;
796 pub const DRIVER_HARDWAREID_MASK: DWORD = 0x80000FFF;
797 pub const DRIVER_UNTRUSTED_RANK: DWORD = 0x80000000;
798 pub const DRIVER_W9X_SUSPECT_RANK: DWORD = 0xC0000000;
799 FN!{stdcall PSP_DETSIG_CMPPROC(
800     DeviceInfoSet: HDEVINFO,
801     NewDeviceData: PSP_DEVINFO_DATA,
802     ExistingDeviceData: PSP_DEVINFO_DATA,
803     CompareContext: PVOID,
804 ) -> DWORD}
805 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct COINSTALLER_CONTEXT_DATA {
806     PostProcessing: BOOL,
807     InstallResult: DWORD,
808     PrivateData: PVOID,
809 }}
810 pub type PCOINSTALLER_CONTEXT_DATA = *mut COINSTALLER_CONTEXT_DATA;
811 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_CLASSIMAGELIST_DATA {
812     cbSize: DWORD,
813     ImageList: HIMAGELIST,
814     Reserved: ULONG_PTR,
815 }}
816 pub type PSP_CLASSIMAGELIST_DATA = *mut SP_CLASSIMAGELIST_DATA;
817 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_PROPSHEETPAGE_REQUEST {
818     cbSize: DWORD,
819     PageRequested: DWORD,
820     DeviceInfoSet: HDEVINFO,
821     DeviceInfoData: PSP_DEVINFO_DATA,
822 }}
823 pub type PSP_PROPSHEETPAGE_REQUEST = *mut SP_PROPSHEETPAGE_REQUEST;
824 pub const SPPSR_SELECT_DEVICE_RESOURCES: DWORD = 1;
825 pub const SPPSR_ENUM_BASIC_DEVICE_PROPERTIES: DWORD = 2;
826 pub const SPPSR_ENUM_ADV_DEVICE_PROPERTIES: DWORD = 3;
827 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_BACKUP_QUEUE_PARAMS_V2_A {
828     cbSize: DWORD,
829     FullInfPath: [CHAR; MAX_PATH],
830     FilenameOffset: INT,
831     ReinstallInstance: [CHAR; MAX_PATH],
832 }}
833 pub type PSP_BACKUP_QUEUE_PARAMS_V2_A = *mut SP_BACKUP_QUEUE_PARAMS_V2_A;
834 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_BACKUP_QUEUE_PARAMS_V2_W {
835     cbSize: DWORD,
836     FullInfPath: [WCHAR; MAX_PATH],
837     FilenameOffset: INT,
838     ReinstallInstance: [WCHAR; MAX_PATH],
839 }}
840 pub type PSP_BACKUP_QUEUE_PARAMS_V2_W = *mut SP_BACKUP_QUEUE_PARAMS_V2_W;
841 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_BACKUP_QUEUE_PARAMS_V1_A {
842     cbSize: DWORD,
843     FullInfPath: [CHAR; MAX_PATH],
844     FilenameOffset: INT,
845 }}
846 pub type PSP_BACKUP_QUEUE_PARAMS_V1_A = *mut SP_BACKUP_QUEUE_PARAMS_V1_A;
847 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_BACKUP_QUEUE_PARAMS_V1_W {
848     cbSize: DWORD,
849     FullInfPath: [WCHAR; MAX_PATH],
850     FilenameOffset: INT,
851 }}
852 pub type PSP_BACKUP_QUEUE_PARAMS_V1_W = *mut SP_BACKUP_QUEUE_PARAMS_V1_W;
853 pub type SP_BACKUP_QUEUE_PARAMS_A = SP_BACKUP_QUEUE_PARAMS_V2_A;
854 pub type PSP_BACKUP_QUEUE_PARAMS_A = PSP_BACKUP_QUEUE_PARAMS_V2_A;
855 pub type SP_BACKUP_QUEUE_PARAMS_W = SP_BACKUP_QUEUE_PARAMS_V2_W;
856 pub type PSP_BACKUP_QUEUE_PARAMS_W = PSP_BACKUP_QUEUE_PARAMS_V2_W;
857 pub const ERROR_EXPECTED_SECTION_NAME: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0;
858 pub const ERROR_BAD_SECTION_NAME_LINE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 1;
859 pub const ERROR_SECTION_NAME_TOO_LONG: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 2;
860 pub const ERROR_GENERAL_SYNTAX: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 3;
861 pub const ERROR_WRONG_INF_STYLE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x100;
862 pub const ERROR_SECTION_NOT_FOUND: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x101;
863 pub const ERROR_LINE_NOT_FOUND: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x102;
864 pub const ERROR_NO_BACKUP: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x103;
865 pub const ERROR_NO_ASSOCIATED_CLASS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x200;
866 pub const ERROR_CLASS_MISMATCH: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x201;
867 pub const ERROR_DUPLICATE_FOUND: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x202;
868 pub const ERROR_NO_DRIVER_SELECTED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x203;
869 pub const ERROR_KEY_DOES_NOT_EXIST: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x204;
870 pub const ERROR_INVALID_DEVINST_NAME: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
871     | 0x205;
872 pub const ERROR_INVALID_CLASS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x206;
873 pub const ERROR_DEVINST_ALREADY_EXISTS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
874     | 0x207;
875 pub const ERROR_DEVINFO_NOT_REGISTERED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
876     | 0x208;
877 pub const ERROR_INVALID_REG_PROPERTY: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
878     | 0x209;
879 pub const ERROR_NO_INF: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20A;
880 pub const ERROR_NO_SUCH_DEVINST: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20B;
881 pub const ERROR_CANT_LOAD_CLASS_ICON: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
882     | 0x20C;
883 pub const ERROR_INVALID_CLASS_INSTALLER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
884     | 0x20D;
885 pub const ERROR_DI_DO_DEFAULT: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20E;
886 pub const ERROR_DI_NOFILECOPY: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20F;
887 pub const ERROR_INVALID_HWPROFILE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x210;
888 pub const ERROR_NO_DEVICE_SELECTED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x211;
889 pub const ERROR_DEVINFO_LIST_LOCKED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x212;
890 pub const ERROR_DEVINFO_DATA_LOCKED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x213;
891 pub const ERROR_DI_BAD_PATH: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x214;
892 pub const ERROR_NO_CLASSINSTALL_PARAMS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
893     | 0x215;
894 pub const ERROR_FILEQUEUE_LOCKED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x216;
895 pub const ERROR_BAD_SERVICE_INSTALLSECT: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
896     | 0x217;
897 pub const ERROR_NO_CLASS_DRIVER_LIST: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
898     | 0x218;
899 pub const ERROR_NO_ASSOCIATED_SERVICE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
900     | 0x219;
901 pub const ERROR_NO_DEFAULT_DEVICE_INTERFACE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
902     | 0x21A;
903 pub const ERROR_DEVICE_INTERFACE_ACTIVE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
904     | 0x21B;
905 pub const ERROR_DEVICE_INTERFACE_REMOVED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
906     | 0x21C;
907 pub const ERROR_BAD_INTERFACE_INSTALLSECT: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
908     | 0x21D;
909 pub const ERROR_NO_SUCH_INTERFACE_CLASS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
910     | 0x21E;
911 pub const ERROR_INVALID_REFERENCE_STRING: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
912     | 0x21F;
913 pub const ERROR_INVALID_MACHINENAME: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x220;
914 pub const ERROR_REMOTE_COMM_FAILURE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x221;
915 pub const ERROR_MACHINE_UNAVAILABLE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x222;
916 pub const ERROR_NO_CONFIGMGR_SERVICES: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
917     | 0x223;
918 pub const ERROR_INVALID_PROPPAGE_PROVIDER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
919     | 0x224;
920 pub const ERROR_NO_SUCH_DEVICE_INTERFACE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
921     | 0x225;
922 pub const ERROR_DI_POSTPROCESSING_REQUIRED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
923     | 0x226;
924 pub const ERROR_INVALID_COINSTALLER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x227;
925 pub const ERROR_NO_COMPAT_DRIVERS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x228;
926 pub const ERROR_NO_DEVICE_ICON: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x229;
927 pub const ERROR_INVALID_INF_LOGCONFIG: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
928     | 0x22A;
929 pub const ERROR_DI_DONT_INSTALL: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22B;
930 pub const ERROR_INVALID_FILTER_DRIVER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
931     | 0x22C;
932 pub const ERROR_NON_WINDOWS_NT_DRIVER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
933     | 0x22D;
934 pub const ERROR_NON_WINDOWS_DRIVER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22E;
935 pub const ERROR_NO_CATALOG_FOR_OEM_INF: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
936     | 0x22F;
937 pub const ERROR_DEVINSTALL_QUEUE_NONNATIVE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
938     | 0x230;
939 pub const ERROR_NOT_DISABLEABLE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x231;
940 pub const ERROR_CANT_REMOVE_DEVINST: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x232;
941 pub const ERROR_INVALID_TARGET: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x233;
942 pub const ERROR_DRIVER_NONNATIVE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x234;
943 pub const ERROR_IN_WOW64: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x235;
944 pub const ERROR_SET_SYSTEM_RESTORE_POINT: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
945     | 0x236;
946 pub const ERROR_SCE_DISABLED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x238;
947 pub const ERROR_UNKNOWN_EXCEPTION: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x239;
948 pub const ERROR_PNP_REGISTRY_ERROR: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x23A;
949 pub const ERROR_REMOTE_REQUEST_UNSUPPORTED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
950     | 0x23B;
951 pub const ERROR_NOT_AN_INSTALLED_OEM_INF: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
952     | 0x23C;
953 pub const ERROR_INF_IN_USE_BY_DEVICES: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
954     | 0x23D;
955 pub const ERROR_DI_FUNCTION_OBSOLETE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
956     | 0x23E;
957 pub const ERROR_NO_AUTHENTICODE_CATALOG: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
958     | 0x23F;
959 pub const ERROR_AUTHENTICODE_DISALLOWED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
960     | 0x240;
961 pub const ERROR_AUTHENTICODE_TRUSTED_PUBLISHER: DWORD = APPLICATION_ERROR_MASK
962     | ERROR_SEVERITY_ERROR | 0x241;
963 pub const ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED: DWORD = APPLICATION_ERROR_MASK
964     | ERROR_SEVERITY_ERROR | 0x242;
965 pub const ERROR_AUTHENTICODE_PUBLISHER_NOT_TRUSTED: DWORD = APPLICATION_ERROR_MASK
966     | ERROR_SEVERITY_ERROR | 0x243;
967 pub const ERROR_SIGNATURE_OSATTRIBUTE_MISMATCH: DWORD = APPLICATION_ERROR_MASK
968     | ERROR_SEVERITY_ERROR | 0x244;
969 pub const ERROR_ONLY_VALIDATE_VIA_AUTHENTICODE: DWORD = APPLICATION_ERROR_MASK
970     | ERROR_SEVERITY_ERROR | 0x245;
971 pub const ERROR_DEVICE_INSTALLER_NOT_READY: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
972     | 0x246;
973 pub const ERROR_DRIVER_STORE_ADD_FAILED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
974     | 0x247;
975 pub const ERROR_DEVICE_INSTALL_BLOCKED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
976     | 0x248;
977 pub const ERROR_DRIVER_INSTALL_BLOCKED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
978     | 0x249;
979 pub const ERROR_WRONG_INF_TYPE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x24A;
980 pub const ERROR_FILE_HASH_NOT_IN_CATALOG: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
981     | 0x24B;
982 pub const ERROR_DRIVER_STORE_DELETE_FAILED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
983     | 0x24C;
984 pub const ERROR_UNRECOVERABLE_STACK_OVERFLOW: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
985     | 0x300;
986 pub const EXCEPTION_SPAPI_UNRECOVERABLE_STACK_OVERFLOW: DWORD = ERROR_UNRECOVERABLE_STACK_OVERFLOW;
987 pub const ERROR_NO_DEFAULT_INTERFACE_DEVICE: DWORD = ERROR_NO_DEFAULT_DEVICE_INTERFACE;
988 pub const ERROR_INTERFACE_DEVICE_ACTIVE: DWORD = ERROR_DEVICE_INTERFACE_ACTIVE;
989 pub const ERROR_INTERFACE_DEVICE_REMOVED: DWORD = ERROR_DEVICE_INTERFACE_REMOVED;
990 pub const ERROR_NO_SUCH_INTERFACE_DEVICE: DWORD = ERROR_NO_SUCH_DEVICE_INTERFACE;
991 pub const ERROR_NOT_INSTALLED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
992     | 0x1000;
993 extern "system" {
SetupGetInfInformationA( InfSpec: LPCVOID, SearchControl: DWORD, ReturnBuffer: PSP_INF_INFORMATION, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL994     pub fn SetupGetInfInformationA(
995         InfSpec: LPCVOID,
996         SearchControl: DWORD,
997         ReturnBuffer: PSP_INF_INFORMATION,
998         ReturnBufferSize: DWORD,
999         RequiredSize: PDWORD,
1000     ) -> BOOL;
SetupGetInfInformationW( InfSpec: LPCVOID, SearchControl: DWORD, ReturnBuffer: PSP_INF_INFORMATION, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1001     pub fn SetupGetInfInformationW(
1002         InfSpec: LPCVOID,
1003         SearchControl: DWORD,
1004         ReturnBuffer: PSP_INF_INFORMATION,
1005         ReturnBufferSize: DWORD,
1006         RequiredSize: PDWORD,
1007     ) -> BOOL;
1008 }
1009 pub const INFINFO_INF_SPEC_IS_HINF: DWORD = 1;
1010 pub const INFINFO_INF_NAME_IS_ABSOLUTE: DWORD = 2;
1011 pub const INFINFO_DEFAULT_SEARCH: DWORD = 3;
1012 pub const INFINFO_REVERSE_DEFAULT_SEARCH: DWORD = 4;
1013 pub const INFINFO_INF_PATH_LIST_SEARCH: DWORD = 5;
1014 extern "system" {
SetupQueryInfFileInformationA( InfInformation: PSP_INF_INFORMATION, InfIndex: UINT, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1015     pub fn SetupQueryInfFileInformationA(
1016         InfInformation: PSP_INF_INFORMATION,
1017         InfIndex: UINT,
1018         ReturnBuffer: PSTR,
1019         ReturnBufferSize: DWORD,
1020         RequiredSize: PDWORD,
1021     ) -> BOOL;
SetupQueryInfFileInformationW( InfInformation: PSP_INF_INFORMATION, InfIndex: UINT, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1022     pub fn SetupQueryInfFileInformationW(
1023         InfInformation: PSP_INF_INFORMATION,
1024         InfIndex: UINT,
1025         ReturnBuffer: PWSTR,
1026         ReturnBufferSize: DWORD,
1027         RequiredSize: PDWORD,
1028     ) -> BOOL;
SetupQueryInfOriginalFileInformationA( InfInformation: PSP_INF_INFORMATION, InfIndex: UINT, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, OriginalFileInfo: PSP_ORIGINAL_FILE_INFO_A, ) -> BOOL1029     pub fn SetupQueryInfOriginalFileInformationA(
1030         InfInformation: PSP_INF_INFORMATION,
1031         InfIndex: UINT,
1032         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
1033         OriginalFileInfo: PSP_ORIGINAL_FILE_INFO_A,
1034     ) -> BOOL;
SetupQueryInfOriginalFileInformationW( InfInformation: PSP_INF_INFORMATION, InfIndex: UINT, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, OriginalFileInfo: PSP_ORIGINAL_FILE_INFO_W, ) -> BOOL1035     pub fn SetupQueryInfOriginalFileInformationW(
1036         InfInformation: PSP_INF_INFORMATION,
1037         InfIndex: UINT,
1038         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
1039         OriginalFileInfo: PSP_ORIGINAL_FILE_INFO_W,
1040     ) -> BOOL;
SetupQueryInfVersionInformationA( InfInformation: PSP_INF_INFORMATION, InfIndex: UINT, Key: PCSTR, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1041     pub fn SetupQueryInfVersionInformationA(
1042         InfInformation: PSP_INF_INFORMATION,
1043         InfIndex: UINT,
1044         Key: PCSTR,
1045         ReturnBuffer: PSTR,
1046         ReturnBufferSize: DWORD,
1047         RequiredSize: PDWORD,
1048     ) -> BOOL;
SetupQueryInfVersionInformationW( InfInformation: PSP_INF_INFORMATION, InfIndex: UINT, Key: PCWSTR, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1049     pub fn SetupQueryInfVersionInformationW(
1050         InfInformation: PSP_INF_INFORMATION,
1051         InfIndex: UINT,
1052         Key: PCWSTR,
1053         ReturnBuffer: PWSTR,
1054         ReturnBufferSize: DWORD,
1055         RequiredSize: PDWORD,
1056     ) -> BOOL;
SetupGetInfDriverStoreLocationA( FileName: PCSTR, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, LocaleName: PCSTR, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1057     pub fn SetupGetInfDriverStoreLocationA(
1058         FileName: PCSTR,
1059         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
1060         LocaleName: PCSTR,
1061         ReturnBuffer: PSTR,
1062         ReturnBufferSize: DWORD,
1063         RequiredSize: PDWORD,
1064     ) -> BOOL;
SetupGetInfDriverStoreLocationW( FileName: PCWSTR, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, LocaleName: PCWSTR, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1065     pub fn SetupGetInfDriverStoreLocationW(
1066         FileName: PCWSTR,
1067         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
1068         LocaleName: PCWSTR,
1069         ReturnBuffer: PWSTR,
1070         ReturnBufferSize: DWORD,
1071         RequiredSize: PDWORD,
1072     ) -> BOOL;
SetupGetInfPublishedNameA( DriverStoreLocation: PCSTR, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1073     pub fn SetupGetInfPublishedNameA(
1074         DriverStoreLocation: PCSTR,
1075         ReturnBuffer: PSTR,
1076         ReturnBufferSize: DWORD,
1077         RequiredSize: PDWORD,
1078     ) -> BOOL;
SetupGetInfPublishedNameW( DriverStoreLocation: PCWSTR, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1079     pub fn SetupGetInfPublishedNameW(
1080         DriverStoreLocation: PCWSTR,
1081         ReturnBuffer: PWSTR,
1082         ReturnBufferSize: DWORD,
1083         RequiredSize: PDWORD,
1084     ) -> BOOL;
SetupGetInfFileListA( DirectoryPath: PCSTR, InfStyle: DWORD, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1085     pub fn SetupGetInfFileListA(
1086         DirectoryPath: PCSTR,
1087         InfStyle: DWORD,
1088         ReturnBuffer: PSTR,
1089         ReturnBufferSize: DWORD,
1090         RequiredSize: PDWORD,
1091     ) -> BOOL;
SetupGetInfFileListW( DirectoryPath: PCWSTR, InfStyle: DWORD, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1092     pub fn SetupGetInfFileListW(
1093         DirectoryPath: PCWSTR,
1094         InfStyle: DWORD,
1095         ReturnBuffer: PWSTR,
1096         ReturnBufferSize: DWORD,
1097         RequiredSize: PDWORD,
1098     ) -> BOOL;
SetupOpenInfFileW( FileName: PCWSTR, InfClass: PCWSTR, InfStyle: DWORD, ErrorLine: PUINT, ) -> HINF1099     pub fn SetupOpenInfFileW(
1100         FileName: PCWSTR,
1101         InfClass: PCWSTR,
1102         InfStyle: DWORD,
1103         ErrorLine: PUINT,
1104     ) -> HINF;
SetupOpenInfFileA( FileName: PCSTR, InfClass: PCSTR, InfStyle: DWORD, ErrorLine: PUINT, ) -> HINF1105     pub fn SetupOpenInfFileA(
1106         FileName: PCSTR,
1107         InfClass: PCSTR,
1108         InfStyle: DWORD,
1109         ErrorLine: PUINT,
1110     ) -> HINF;
SetupOpenMasterInf() -> HINF1111     pub fn SetupOpenMasterInf() -> HINF;
SetupOpenAppendInfFileW( FileName: PCWSTR, InfHandle: HINF, ErrorLine: PUINT, ) -> BOOL1112     pub fn SetupOpenAppendInfFileW(
1113         FileName: PCWSTR,
1114         InfHandle: HINF,
1115         ErrorLine: PUINT,
1116     ) -> BOOL;
SetupOpenAppendInfFileA( FileName: PCSTR, InfHandle: HINF, ErrorLine: PUINT, ) -> BOOL1117     pub fn SetupOpenAppendInfFileA(
1118         FileName: PCSTR,
1119         InfHandle: HINF,
1120         ErrorLine: PUINT,
1121     ) -> BOOL;
SetupCloseInfFile( InfHandle: HINF, ) -> ()1122     pub fn SetupCloseInfFile(
1123         InfHandle: HINF,
1124     ) -> ();
SetupFindFirstLineA( InfHandle: HINF, Section: PCSTR, Key: PCSTR, Context: PINFCONTEXT, ) -> BOOL1125     pub fn SetupFindFirstLineA(
1126         InfHandle: HINF,
1127         Section: PCSTR,
1128         Key: PCSTR,
1129         Context: PINFCONTEXT,
1130     ) -> BOOL;
SetupFindFirstLineW( InfHandle: HINF, Section: PCWSTR, Key: PCWSTR, Context: PINFCONTEXT, ) -> BOOL1131     pub fn SetupFindFirstLineW(
1132         InfHandle: HINF,
1133         Section: PCWSTR,
1134         Key: PCWSTR,
1135         Context: PINFCONTEXT,
1136     ) -> BOOL;
SetupFindNextLine( ContextIn: PINFCONTEXT, ContextOut: PINFCONTEXT, ) -> BOOL1137     pub fn SetupFindNextLine(
1138         ContextIn: PINFCONTEXT,
1139         ContextOut: PINFCONTEXT,
1140     ) -> BOOL;
SetupFindNextMatchLineA( ContextIn: PINFCONTEXT, Key: PCSTR, ContextOut: PINFCONTEXT, ) -> BOOL1141     pub fn SetupFindNextMatchLineA(
1142         ContextIn: PINFCONTEXT,
1143         Key: PCSTR,
1144         ContextOut: PINFCONTEXT,
1145     ) -> BOOL;
SetupFindNextMatchLineW( ContextIn: PINFCONTEXT, Key: PCWSTR, ContextOut: PINFCONTEXT, ) -> BOOL1146     pub fn SetupFindNextMatchLineW(
1147         ContextIn: PINFCONTEXT,
1148         Key: PCWSTR,
1149         ContextOut: PINFCONTEXT,
1150     ) -> BOOL;
SetupGetLineByIndexA( InfHandle: HINF, Section: PCSTR, Index: DWORD, Context: PINFCONTEXT, ) -> BOOL1151     pub fn SetupGetLineByIndexA(
1152         InfHandle: HINF,
1153         Section: PCSTR,
1154         Index: DWORD,
1155         Context: PINFCONTEXT,
1156     ) -> BOOL;
SetupGetLineByIndexW( InfHandle: HINF, Section: PCWSTR, Index: DWORD, Context: PINFCONTEXT, ) -> BOOL1157     pub fn SetupGetLineByIndexW(
1158         InfHandle: HINF,
1159         Section: PCWSTR,
1160         Index: DWORD,
1161         Context: PINFCONTEXT,
1162     ) -> BOOL;
SetupGetLineCountA( InfHandle: HINF, Section: PCSTR, ) -> LONG1163     pub fn SetupGetLineCountA(
1164         InfHandle: HINF,
1165         Section: PCSTR,
1166     ) -> LONG;
SetupGetLineCountW( InfHandle: HINF, Section: PCWSTR, ) -> LONG1167     pub fn SetupGetLineCountW(
1168         InfHandle: HINF,
1169         Section: PCWSTR,
1170     ) -> LONG;
SetupGetLineTextA( Context: PINFCONTEXT, InfHandle: HINF, Section: PCSTR, Key: PCSTR, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, ReturnBufferSize: PDWORD, ) -> BOOL1171     pub fn SetupGetLineTextA(
1172         Context: PINFCONTEXT,
1173         InfHandle: HINF,
1174         Section: PCSTR,
1175         Key: PCSTR,
1176         ReturnBuffer: PSTR,
1177         ReturnBufferSize: DWORD,
1178         ReturnBufferSize: PDWORD,
1179     ) -> BOOL;
SetupGetLineTextW( Context: PINFCONTEXT, InfHandle: HINF, Section: PCWSTR, Key: PCWSTR, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, ReturnBufferSize: PDWORD, ) -> BOOL1180     pub fn SetupGetLineTextW(
1181         Context: PINFCONTEXT,
1182         InfHandle: HINF,
1183         Section: PCWSTR,
1184         Key: PCWSTR,
1185         ReturnBuffer: PWSTR,
1186         ReturnBufferSize: DWORD,
1187         ReturnBufferSize: PDWORD,
1188     ) -> BOOL;
SetupGetFieldCount( Context: PINFCONTEXT, ) -> DWORD1189     pub fn SetupGetFieldCount(
1190         Context: PINFCONTEXT,
1191     ) -> DWORD;
SetupGetStringFieldA( Context: PINFCONTEXT, FieldIndex: DWORD, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1192     pub fn SetupGetStringFieldA(
1193         Context: PINFCONTEXT,
1194         FieldIndex: DWORD,
1195         ReturnBuffer: PSTR,
1196         ReturnBufferSize: DWORD,
1197         RequiredSize: PDWORD,
1198     ) -> BOOL;
SetupGetStringFieldW( Context: PINFCONTEXT, FieldIndex: DWORD, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1199     pub fn SetupGetStringFieldW(
1200         Context: PINFCONTEXT,
1201         FieldIndex: DWORD,
1202         ReturnBuffer: PWSTR,
1203         ReturnBufferSize: DWORD,
1204         RequiredSize: PDWORD,
1205     ) -> BOOL;
SetupGetIntField( Context: PINFCONTEXT, FieldIndex: DWORD, IntegerValue: PINT, ) -> BOOL1206     pub fn SetupGetIntField(
1207         Context: PINFCONTEXT,
1208         FieldIndex: DWORD,
1209         IntegerValue: PINT,
1210     ) -> BOOL;
SetupGetMultiSzFieldA( Context: PINFCONTEXT, FieldIndex: DWORD, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: LPDWORD, ) -> BOOL1211     pub fn SetupGetMultiSzFieldA(
1212         Context: PINFCONTEXT,
1213         FieldIndex: DWORD,
1214         ReturnBuffer: PSTR,
1215         ReturnBufferSize: DWORD,
1216         RequiredSize: LPDWORD,
1217     ) -> BOOL;
SetupGetMultiSzFieldW( Context: PINFCONTEXT, FieldIndex: DWORD, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: LPDWORD, ) -> BOOL1218     pub fn SetupGetMultiSzFieldW(
1219         Context: PINFCONTEXT,
1220         FieldIndex: DWORD,
1221         ReturnBuffer: PWSTR,
1222         ReturnBufferSize: DWORD,
1223         RequiredSize: LPDWORD,
1224     ) -> BOOL;
SetupGetBinaryField( Context: PINFCONTEXT, FieldIndex: DWORD, ReturnBuffer: PBYTE, ReturnBufferSize: DWORD, RequiredSize: LPDWORD, ) -> BOOL1225     pub fn SetupGetBinaryField(
1226         Context: PINFCONTEXT,
1227         FieldIndex: DWORD,
1228         ReturnBuffer: PBYTE,
1229         ReturnBufferSize: DWORD,
1230         RequiredSize: LPDWORD,
1231     ) -> BOOL;
SetupGetFileCompressionInfoA( SourceFileName: PCSTR, ActualSourceFileName: *mut PSTR, SourceFileSize: PDWORD, TargetFileSize: PDWORD, CompressionType: PUINT, ) -> DWORD1232     pub fn SetupGetFileCompressionInfoA(
1233         SourceFileName: PCSTR,
1234         ActualSourceFileName: *mut PSTR,
1235         SourceFileSize: PDWORD,
1236         TargetFileSize: PDWORD,
1237         CompressionType: PUINT,
1238     ) -> DWORD;
SetupGetFileCompressionInfoW( SourceFileName: PCWSTR, ActualSourceFileName: *mut PWSTR, SourceFileSize: PDWORD, TargetFileSize: PDWORD, CompressionType: PUINT, ) -> DWORD1239     pub fn SetupGetFileCompressionInfoW(
1240         SourceFileName: PCWSTR,
1241         ActualSourceFileName: *mut PWSTR,
1242         SourceFileSize: PDWORD,
1243         TargetFileSize: PDWORD,
1244         CompressionType: PUINT,
1245     ) -> DWORD;
SetupGetFileCompressionInfoExA( SourceFileName: PCSTR, ActualSourceFileNameBuffer: PSTR, ActualSourceFileNameBufferLen: DWORD, RequiredBufferLen: PDWORD, SourceFileSize: PDWORD, TargetFileSize: PDWORD, CompressionType: PUINT, ) -> BOOL1246     pub fn SetupGetFileCompressionInfoExA(
1247         SourceFileName: PCSTR,
1248         ActualSourceFileNameBuffer: PSTR,
1249         ActualSourceFileNameBufferLen: DWORD,
1250         RequiredBufferLen: PDWORD,
1251         SourceFileSize: PDWORD,
1252         TargetFileSize: PDWORD,
1253         CompressionType: PUINT,
1254     ) -> BOOL;
SetupGetFileCompressionInfoExW( SourceFileName: PCWSTR, ActualSourceFileNameBuffer: PWSTR, ActualSourceFileNameBufferLen: DWORD, RequiredBufferLen: PDWORD, SourceFileSize: PDWORD, TargetFileSize: PDWORD, CompressionType: PUINT, ) -> BOOL1255     pub fn SetupGetFileCompressionInfoExW(
1256         SourceFileName: PCWSTR,
1257         ActualSourceFileNameBuffer: PWSTR,
1258         ActualSourceFileNameBufferLen: DWORD,
1259         RequiredBufferLen: PDWORD,
1260         SourceFileSize: PDWORD,
1261         TargetFileSize: PDWORD,
1262         CompressionType: PUINT,
1263     ) -> BOOL;
1264 }
1265 pub const FILE_COMPRESSION_NONE: UINT = 0;
1266 pub const FILE_COMPRESSION_WINLZA: UINT = 1;
1267 pub const FILE_COMPRESSION_MSZIP: UINT = 2;
1268 pub const FILE_COMPRESSION_NTCAB: UINT = 3;
1269 extern "system" {
SetupDecompressOrCopyFileA( SourceFileName: PCSTR, TargetFileName: PCSTR, CompressionType: PUINT, ) -> DWORD1270     pub fn SetupDecompressOrCopyFileA(
1271         SourceFileName: PCSTR,
1272         TargetFileName: PCSTR,
1273         CompressionType: PUINT,
1274     ) -> DWORD;
SetupDecompressOrCopyFileW( SourceFileName: PCWSTR, TargetFileName: PCWSTR, CompressionType: PUINT, ) -> DWORD1275     pub fn SetupDecompressOrCopyFileW(
1276         SourceFileName: PCWSTR,
1277         TargetFileName: PCWSTR,
1278         CompressionType: PUINT,
1279     ) -> DWORD;
SetupGetSourceFileLocationA( InfHandle: HINF, InfContext: PINFCONTEXT, FileName: PCSTR, SourceId: PUINT, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1280     pub fn SetupGetSourceFileLocationA(
1281         InfHandle: HINF,
1282         InfContext: PINFCONTEXT,
1283         FileName: PCSTR,
1284         SourceId: PUINT,
1285         ReturnBuffer: PSTR,
1286         ReturnBufferSize: DWORD,
1287         RequiredSize: PDWORD,
1288     ) -> BOOL;
SetupGetSourceFileLocationW( InfHandle: HINF, InfContext: PINFCONTEXT, FileName: PCWSTR, SourceId: PUINT, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1289     pub fn SetupGetSourceFileLocationW(
1290         InfHandle: HINF,
1291         InfContext: PINFCONTEXT,
1292         FileName: PCWSTR,
1293         SourceId: PUINT,
1294         ReturnBuffer: PWSTR,
1295         ReturnBufferSize: DWORD,
1296         RequiredSize: PDWORD,
1297     ) -> BOOL;
SetupGetSourceFileSizeA( InfHandle: HINF, InfContext: PINFCONTEXT, FileName: PCSTR, Section: PCSTR, FileSize: PDWORD, RoundingFactor: UINT, ) -> BOOL1298     pub fn SetupGetSourceFileSizeA(
1299         InfHandle: HINF,
1300         InfContext: PINFCONTEXT,
1301         FileName: PCSTR,
1302         Section: PCSTR,
1303         FileSize: PDWORD,
1304         RoundingFactor: UINT,
1305     ) -> BOOL;
SetupGetSourceFileSizeW( InfHandle: HINF, InfContext: PINFCONTEXT, FileName: PCWSTR, Section: PCWSTR, FileSize: PDWORD, RoundingFactor: UINT, ) -> BOOL1306     pub fn SetupGetSourceFileSizeW(
1307         InfHandle: HINF,
1308         InfContext: PINFCONTEXT,
1309         FileName: PCWSTR,
1310         Section: PCWSTR,
1311         FileSize: PDWORD,
1312         RoundingFactor: UINT,
1313     ) -> BOOL;
SetupGetTargetPathA( InfHandle: HINF, InfContext: PINFCONTEXT, Section: PCSTR, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1314     pub fn SetupGetTargetPathA(
1315         InfHandle: HINF,
1316         InfContext: PINFCONTEXT,
1317         Section: PCSTR,
1318         ReturnBuffer: PSTR,
1319         ReturnBufferSize: DWORD,
1320         RequiredSize: PDWORD,
1321     ) -> BOOL;
SetupGetTargetPathW( InfHandle: HINF, InfContext: PINFCONTEXT, Section: PCWSTR, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1322     pub fn SetupGetTargetPathW(
1323         InfHandle: HINF,
1324         InfContext: PINFCONTEXT,
1325         Section: PCWSTR,
1326         ReturnBuffer: PWSTR,
1327         ReturnBufferSize: DWORD,
1328         RequiredSize: PDWORD,
1329     ) -> BOOL;
1330 }
1331 pub const SRCLIST_TEMPORARY: DWORD = 0x00000001;
1332 pub const SRCLIST_NOBROWSE: DWORD = 0x00000002;
1333 pub const SRCLIST_SYSTEM: DWORD = 0x00000010;
1334 pub const SRCLIST_USER: DWORD = 0x00000020;
1335 pub const SRCLIST_SYSIFADMIN: DWORD = 0x00000040;
1336 pub const SRCLIST_SUBDIRS: DWORD = 0x00000100;
1337 pub const SRCLIST_APPEND: DWORD = 0x00000200;
1338 pub const SRCLIST_NOSTRIPPLATFORM: DWORD = 0x00000400;
1339 extern "system" {
SetupSetSourceListA( Flags: DWORD, SourceList: *mut PCSTR, SourceCount: UINT, ) -> BOOL1340     pub fn SetupSetSourceListA(
1341         Flags: DWORD,
1342         SourceList: *mut PCSTR,
1343         SourceCount: UINT,
1344     ) -> BOOL;
SetupSetSourceListW( Flags: DWORD, SourceList: *mut PCWSTR, SourceCount: UINT, ) -> BOOL1345     pub fn SetupSetSourceListW(
1346         Flags: DWORD,
1347         SourceList: *mut PCWSTR,
1348         SourceCount: UINT,
1349     ) -> BOOL;
SetupCancelTemporarySourceList() -> BOOL1350     pub fn SetupCancelTemporarySourceList() -> BOOL;
SetupAddToSourceListA( Flags: DWORD, Source: PCSTR, ) -> BOOL1351     pub fn SetupAddToSourceListA(
1352         Flags: DWORD,
1353         Source: PCSTR,
1354     ) -> BOOL;
SetupAddToSourceListW( Flags: DWORD, Source: PCWSTR, ) -> BOOL1355     pub fn SetupAddToSourceListW(
1356         Flags: DWORD,
1357         Source: PCWSTR,
1358     ) -> BOOL;
SetupRemoveFromSourceListA( Flags: DWORD, Source: PCSTR, ) -> BOOL1359     pub fn SetupRemoveFromSourceListA(
1360         Flags: DWORD,
1361         Source: PCSTR,
1362     ) -> BOOL;
SetupRemoveFromSourceListW( Flags: DWORD, Source: PCWSTR, ) -> BOOL1363     pub fn SetupRemoveFromSourceListW(
1364         Flags: DWORD,
1365         Source: PCWSTR,
1366     ) -> BOOL;
SetupQuerySourceListA( Flags: DWORD, List: *mut *mut PCSTR, Count: PUINT, ) -> BOOL1367     pub fn SetupQuerySourceListA(
1368         Flags: DWORD,
1369         List: *mut *mut PCSTR,
1370         Count: PUINT,
1371     ) -> BOOL;
SetupQuerySourceListW( Flags: DWORD, List: *mut *mut PCWSTR, Count: PUINT, ) -> BOOL1372     pub fn SetupQuerySourceListW(
1373         Flags: DWORD,
1374         List: *mut *mut PCWSTR,
1375         Count: PUINT,
1376     ) -> BOOL;
SetupFreeSourceListA( List: *mut *mut PCSTR, Count: UINT, ) -> BOOL1377     pub fn SetupFreeSourceListA(
1378         List: *mut *mut PCSTR,
1379         Count: UINT,
1380     ) -> BOOL;
SetupFreeSourceListW( List: *mut *mut PCWSTR, Count: UINT, ) -> BOOL1381     pub fn SetupFreeSourceListW(
1382         List: *mut *mut PCWSTR,
1383         Count: UINT,
1384     ) -> BOOL;
SetupPromptForDiskA( hwndParent: HWND, DialogTitle: PCSTR, DiskName: PCSTR, PathToSource: PCSTR, FileSought: PCSTR, TagFile: PCSTR, DiskPromptStyle: DWORD, PathBuffer: PSTR, PathBufferSize: DWORD, PathRequiredSize: PDWORD, ) -> UINT1385     pub fn SetupPromptForDiskA(
1386         hwndParent: HWND,
1387         DialogTitle: PCSTR,
1388         DiskName: PCSTR,
1389         PathToSource: PCSTR,
1390         FileSought: PCSTR,
1391         TagFile: PCSTR,
1392         DiskPromptStyle: DWORD,
1393         PathBuffer: PSTR,
1394         PathBufferSize: DWORD,
1395         PathRequiredSize: PDWORD,
1396     ) -> UINT;
SetupPromptForDiskW( hwndParent: HWND, DialogTitle: PCWSTR, DiskName: PCWSTR, PathToSource: PCWSTR, FileSought: PCWSTR, TagFile: PCWSTR, DiskPromptStyle: DWORD, PathBuffer: PWSTR, PathBufferSize: DWORD, PathRequiredSize: PDWORD, ) -> UINT1397     pub fn SetupPromptForDiskW(
1398         hwndParent: HWND,
1399         DialogTitle: PCWSTR,
1400         DiskName: PCWSTR,
1401         PathToSource: PCWSTR,
1402         FileSought: PCWSTR,
1403         TagFile: PCWSTR,
1404         DiskPromptStyle: DWORD,
1405         PathBuffer: PWSTR,
1406         PathBufferSize: DWORD,
1407         PathRequiredSize: PDWORD,
1408     ) -> UINT;
SetupCopyErrorA( hwndParent: HWND, DialogTitle: PCSTR, DiskName: PCSTR, PathToSource: PCSTR, SourceFile: PCSTR, TargetPathFile: PCSTR, Win32ErrorCode: UINT, Style: DWORD, PathBuffer: PSTR, PathBufferSize: DWORD, PathRequiredSize: PDWORD, ) -> UINT1409     pub fn SetupCopyErrorA(
1410         hwndParent: HWND,
1411         DialogTitle: PCSTR,
1412         DiskName: PCSTR,
1413         PathToSource: PCSTR,
1414         SourceFile: PCSTR,
1415         TargetPathFile: PCSTR,
1416         Win32ErrorCode: UINT,
1417         Style: DWORD,
1418         PathBuffer: PSTR,
1419         PathBufferSize: DWORD,
1420         PathRequiredSize: PDWORD,
1421     ) -> UINT;
SetupCopyErrorW( hwndParent: HWND, DialogTitle: PCWSTR, DiskName: PCWSTR, PathToSource: PCWSTR, SourceFile: PCWSTR, TargetPathFile: PCWSTR, Win32ErrorCode: UINT, Style: DWORD, PathBuffer: PWSTR, PathBufferSize: DWORD, PathRequiredSize: PDWORD, ) -> UINT1422     pub fn SetupCopyErrorW(
1423         hwndParent: HWND,
1424         DialogTitle: PCWSTR,
1425         DiskName: PCWSTR,
1426         PathToSource: PCWSTR,
1427         SourceFile: PCWSTR,
1428         TargetPathFile: PCWSTR,
1429         Win32ErrorCode: UINT,
1430         Style: DWORD,
1431         PathBuffer: PWSTR,
1432         PathBufferSize: DWORD,
1433         PathRequiredSize: PDWORD,
1434     ) -> UINT;
SetupRenameErrorA( hwndParent: HWND, DialogTitle: PCSTR, SourceFile: PCSTR, TargetFile: PCSTR, Win32ErrorCode: UINT, Style: DWORD, ) -> UINT1435     pub fn SetupRenameErrorA(
1436         hwndParent: HWND,
1437         DialogTitle: PCSTR,
1438         SourceFile: PCSTR,
1439         TargetFile: PCSTR,
1440         Win32ErrorCode: UINT,
1441         Style: DWORD,
1442     ) -> UINT;
SetupRenameErrorW( hwndParent: HWND, DialogTitle: PCWSTR, SourceFile: PCWSTR, TargetFile: PCWSTR, Win32ErrorCode: UINT, Style: DWORD, ) -> UINT1443     pub fn SetupRenameErrorW(
1444         hwndParent: HWND,
1445         DialogTitle: PCWSTR,
1446         SourceFile: PCWSTR,
1447         TargetFile: PCWSTR,
1448         Win32ErrorCode: UINT,
1449         Style: DWORD,
1450     ) -> UINT;
SetupDeleteErrorA( hwndParent: HWND, DialogTitle: PCSTR, File: PCSTR, Win32ErrorCode: UINT, Style: DWORD, ) -> UINT1451     pub fn SetupDeleteErrorA(
1452         hwndParent: HWND,
1453         DialogTitle: PCSTR,
1454         File: PCSTR,
1455         Win32ErrorCode: UINT,
1456         Style: DWORD,
1457     ) -> UINT;
SetupDeleteErrorW( hwndParent: HWND, DialogTitle: PCWSTR, File: PCWSTR, Win32ErrorCode: UINT, Style: DWORD, ) -> UINT1458     pub fn SetupDeleteErrorW(
1459         hwndParent: HWND,
1460         DialogTitle: PCWSTR,
1461         File: PCWSTR,
1462         Win32ErrorCode: UINT,
1463         Style: DWORD,
1464     ) -> UINT;
SetupBackupErrorA( hwndParent: HWND, DialogTitle: PCSTR, SourceFile: PCSTR, TargetFile: PCSTR, Win32ErrorCode: UINT, Style: DWORD, ) -> UINT1465     pub fn SetupBackupErrorA(
1466         hwndParent: HWND,
1467         DialogTitle: PCSTR,
1468         SourceFile: PCSTR,
1469         TargetFile: PCSTR,
1470         Win32ErrorCode: UINT,
1471         Style: DWORD,
1472     ) -> UINT;
SetupBackupErrorW( hwndParent: HWND, DialogTitle: PCWSTR, SourceFile: PCWSTR, TargetFile: PCWSTR, Win32ErrorCode: UINT, Style: DWORD, ) -> UINT1473     pub fn SetupBackupErrorW(
1474         hwndParent: HWND,
1475         DialogTitle: PCWSTR,
1476         SourceFile: PCWSTR,
1477         TargetFile: PCWSTR,
1478         Win32ErrorCode: UINT,
1479         Style: DWORD,
1480     ) -> UINT;
1481 }
1482 pub const IDF_NOBROWSE: DWORD = 0x00000001;
1483 pub const IDF_NOSKIP: DWORD = 0x00000002;
1484 pub const IDF_NODETAILS: DWORD = 0x00000004;
1485 pub const IDF_NOCOMPRESSED: DWORD = 0x00000008;
1486 pub const IDF_CHECKFIRST: DWORD = 0x00000100;
1487 pub const IDF_NOBEEP: DWORD = 0x00000200;
1488 pub const IDF_NOFOREGROUND: DWORD = 0x00000400;
1489 pub const IDF_WARNIFSKIP: DWORD = 0x00000800;
1490 pub const IDF_NOREMOVABLEMEDIAPROMPT: DWORD = 0x00001000;
1491 pub const IDF_USEDISKNAMEASPROMPT: DWORD = 0x00002000;
1492 pub const IDF_OEMDISK: DWORD = 0x80000000;
1493 pub const DPROMPT_SUCCESS: UINT = 0;
1494 pub const DPROMPT_CANCEL: UINT = 1;
1495 pub const DPROMPT_SKIPFILE: UINT = 2;
1496 pub const DPROMPT_BUFFERTOOSMALL: UINT = 3;
1497 pub const DPROMPT_OUTOFMEMORY: UINT = 4;
1498 extern "system" {
SetupSetDirectoryIdA( InfHandle: HINF, Id: DWORD, Directory: PCSTR, ) -> BOOL1499     pub fn SetupSetDirectoryIdA(
1500         InfHandle: HINF,
1501         Id: DWORD,
1502         Directory: PCSTR,
1503     ) -> BOOL;
SetupSetDirectoryIdW( InfHandle: HINF, Id: DWORD, Directory: PCWSTR, ) -> BOOL1504     pub fn SetupSetDirectoryIdW(
1505         InfHandle: HINF,
1506         Id: DWORD,
1507         Directory: PCWSTR,
1508     ) -> BOOL;
SetupSetDirectoryIdExA( InfHandle: HINF, Id: DWORD, Directory: PCSTR, Flags: DWORD, Reserved1: DWORD, Reserved2: PVOID, ) -> BOOL1509     pub fn SetupSetDirectoryIdExA(
1510         InfHandle: HINF,
1511         Id: DWORD,
1512         Directory: PCSTR,
1513         Flags: DWORD,
1514         Reserved1: DWORD,
1515         Reserved2: PVOID,
1516     ) -> BOOL;
SetupSetDirectoryIdExW( InfHandle: HINF, Id: DWORD, Directory: PCWSTR, Flags: DWORD, Reserved1: DWORD, Reserved2: PVOID, ) -> BOOL1517     pub fn SetupSetDirectoryIdExW(
1518         InfHandle: HINF,
1519         Id: DWORD,
1520         Directory: PCWSTR,
1521         Flags: DWORD,
1522         Reserved1: DWORD,
1523         Reserved2: PVOID,
1524     ) -> BOOL;
1525 }
1526 pub const SETDIRID_NOT_FULL_PATH: DWORD = 0x00000001;
1527 extern "system" {
SetupGetSourceInfoA( InfHandle: HINF, SourceId: UINT, InfoDesired: UINT, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1528     pub fn SetupGetSourceInfoA(
1529         InfHandle: HINF,
1530         SourceId: UINT,
1531         InfoDesired: UINT,
1532         ReturnBuffer: PSTR,
1533         ReturnBufferSize: DWORD,
1534         RequiredSize: PDWORD,
1535     ) -> BOOL;
SetupGetSourceInfoW( InfHandle: HINF, SourceId: UINT, InfoDesired: UINT, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1536     pub fn SetupGetSourceInfoW(
1537         InfHandle: HINF,
1538         SourceId: UINT,
1539         InfoDesired: UINT,
1540         ReturnBuffer: PWSTR,
1541         ReturnBufferSize: DWORD,
1542         RequiredSize: PDWORD,
1543     ) -> BOOL;
1544 }
1545 pub const SRCINFO_PATH: UINT = 1;
1546 pub const SRCINFO_TAGFILE: UINT = 2;
1547 pub const SRCINFO_DESCRIPTION: UINT = 3;
1548 pub const SRCINFO_FLAGS: UINT = 4;
1549 pub const SRCINFO_TAGFILE2: UINT = 4;
1550 pub const SRC_FLAGS_CABFILE: UINT = 0x0010;
1551 extern "system" {
SetupInstallFileA( InfHandle: HINF, InfContext: PINFCONTEXT, SourceFile: PCSTR, SourcePathRoot: PCSTR, DestinationName: PCSTR, CopyStyle: DWORD, CopyMsgHandler: PSP_FILE_CALLBACK_A, Context: PVOID, ) -> BOOL1552     pub fn SetupInstallFileA(
1553         InfHandle: HINF,
1554         InfContext: PINFCONTEXT,
1555         SourceFile: PCSTR,
1556         SourcePathRoot: PCSTR,
1557         DestinationName: PCSTR,
1558         CopyStyle: DWORD,
1559         CopyMsgHandler: PSP_FILE_CALLBACK_A,
1560         Context: PVOID,
1561     ) -> BOOL;
SetupInstallFileW( InfHandle: HINF, InfContext: PINFCONTEXT, SourceFile: PCWSTR, SourcePathRoot: PCWSTR, DestinationName: PCWSTR, CopyStyle: DWORD, CopyMsgHandler: PSP_FILE_CALLBACK_W, Context: PVOID, ) -> BOOL1562     pub fn SetupInstallFileW(
1563         InfHandle: HINF,
1564         InfContext: PINFCONTEXT,
1565         SourceFile: PCWSTR,
1566         SourcePathRoot: PCWSTR,
1567         DestinationName: PCWSTR,
1568         CopyStyle: DWORD,
1569         CopyMsgHandler: PSP_FILE_CALLBACK_W,
1570         Context: PVOID,
1571     ) -> BOOL;
SetupInstallFileExA( InfHandle: HINF, InfContext: PINFCONTEXT, SourceFile: PCSTR, SourcePathRoot: PCSTR, DestinationName: PCSTR, CopyStyle: DWORD, CopyMsgHandler: PSP_FILE_CALLBACK_A, Context: PVOID, FileWasInUse: PBOOL, ) -> BOOL1572     pub fn SetupInstallFileExA(
1573         InfHandle: HINF,
1574         InfContext: PINFCONTEXT,
1575         SourceFile: PCSTR,
1576         SourcePathRoot: PCSTR,
1577         DestinationName: PCSTR,
1578         CopyStyle: DWORD,
1579         CopyMsgHandler: PSP_FILE_CALLBACK_A,
1580         Context: PVOID,
1581         FileWasInUse: PBOOL,
1582     ) -> BOOL;
SetupInstallFileExW( InfHandle: HINF, InfContext: PINFCONTEXT, SourceFile: PCWSTR, SourcePathRoot: PCWSTR, DestinationName: PCWSTR, CopyStyle: DWORD, CopyMsgHandler: PSP_FILE_CALLBACK_W, Context: PVOID, FileWasInUse: PBOOL, ) -> BOOL1583     pub fn SetupInstallFileExW(
1584         InfHandle: HINF,
1585         InfContext: PINFCONTEXT,
1586         SourceFile: PCWSTR,
1587         SourcePathRoot: PCWSTR,
1588         DestinationName: PCWSTR,
1589         CopyStyle: DWORD,
1590         CopyMsgHandler: PSP_FILE_CALLBACK_W,
1591         Context: PVOID,
1592         FileWasInUse: PBOOL,
1593     ) -> BOOL;
1594 }
1595 pub const SP_COPY_DELETESOURCE: DWORD = 0x0000001;
1596 pub const SP_COPY_REPLACEONLY: DWORD = 0x0000002;
1597 pub const SP_COPY_NEWER: DWORD = 0x0000004;
1598 pub const SP_COPY_NEWER_OR_SAME: DWORD = SP_COPY_NEWER;
1599 pub const SP_COPY_NOOVERWRITE: DWORD = 0x0000008;
1600 pub const SP_COPY_NODECOMP: DWORD = 0x0000010;
1601 pub const SP_COPY_LANGUAGEAWARE: DWORD = 0x0000020;
1602 pub const SP_COPY_SOURCE_ABSOLUTE: DWORD = 0x0000040;
1603 pub const SP_COPY_SOURCEPATH_ABSOLUTE: DWORD = 0x0000080;
1604 pub const SP_COPY_IN_USE_NEEDS_REBOOT: DWORD = 0x0000100;
1605 pub const SP_COPY_FORCE_IN_USE: DWORD = 0x0000200;
1606 pub const SP_COPY_NOSKIP: DWORD = 0x0000400;
1607 pub const SP_FLAG_CABINETCONTINUATION: DWORD = 0x0000800;
1608 pub const SP_COPY_FORCE_NOOVERWRITE: DWORD = 0x0001000;
1609 pub const SP_COPY_FORCE_NEWER: DWORD = 0x0002000;
1610 pub const SP_COPY_WARNIFSKIP: DWORD = 0x0004000;
1611 pub const SP_COPY_NOBROWSE: DWORD = 0x0008000;
1612 pub const SP_COPY_NEWER_ONLY: DWORD = 0x0010000;
1613 pub const SP_COPY_RESERVED: DWORD = 0x0020000;
1614 pub const SP_COPY_OEMINF_CATALOG_ONLY: DWORD = 0x0040000;
1615 pub const SP_COPY_REPLACE_BOOT_FILE: DWORD = 0x0080000;
1616 pub const SP_COPY_NOPRUNE: DWORD = 0x0100000;
1617 pub const SP_COPY_OEM_F6_INF: DWORD = 0x0200000;
1618 pub const SP_COPY_ALREADYDECOMP: DWORD = 0x0400000;
1619 pub const SP_COPY_WINDOWS_SIGNED: DWORD = 0x1000000;
1620 pub const SP_COPY_PNPLOCKED: DWORD = 0x2000000;
1621 pub const SP_COPY_IN_USE_TRY_RENAME: DWORD = 0x4000000;
1622 pub const SP_COPY_INBOX_INF: DWORD = 0x8000000;
1623 pub const SP_COPY_HARDLINK: DWORD = 0x10000000;
1624 pub const SP_BACKUP_BACKUPPASS: DWORD = 0x00000001;
1625 pub const SP_BACKUP_DEMANDPASS: DWORD = 0x00000002;
1626 pub const SP_BACKUP_SPECIAL: DWORD = 0x00000004;
1627 pub const SP_BACKUP_BOOTFILE: DWORD = 0x00000008;
1628 extern "system" {
SetupOpenFileQueue() -> HSPFILEQ1629     pub fn SetupOpenFileQueue() -> HSPFILEQ;
SetupCloseFileQueue( QueueHandle: HSPFILEQ, ) -> BOOL1630     pub fn SetupCloseFileQueue(
1631         QueueHandle: HSPFILEQ,
1632     ) -> BOOL;
SetupSetFileQueueAlternatePlatformA( QueueHandle: HSPFILEQ, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, AlternateDefaultCatalogFile: PCSTR, ) -> BOOL1633     pub fn SetupSetFileQueueAlternatePlatformA(
1634         QueueHandle: HSPFILEQ,
1635         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
1636         AlternateDefaultCatalogFile: PCSTR,
1637     ) -> BOOL;
SetupSetFileQueueAlternatePlatformW( QueueHandle: HSPFILEQ, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, AlternateDefaultCatalogFile: PCWSTR, ) -> BOOL1638     pub fn SetupSetFileQueueAlternatePlatformW(
1639         QueueHandle: HSPFILEQ,
1640         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
1641         AlternateDefaultCatalogFile: PCWSTR,
1642     ) -> BOOL;
SetupSetPlatformPathOverrideA( Override: PCSTR, ) -> BOOL1643     pub fn SetupSetPlatformPathOverrideA(
1644         Override: PCSTR,
1645     ) -> BOOL;
SetupSetPlatformPathOverrideW( Override: PCWSTR, ) -> BOOL1646     pub fn SetupSetPlatformPathOverrideW(
1647         Override: PCWSTR,
1648     ) -> BOOL;
SetupQueueCopyA( QueueHandle: HSPFILEQ, SourceRootPath: PCSTR, SourcePath: PCSTR, SourceFilename: PCSTR, SourceDescription: PCSTR, SourceTagfile: PCSTR, TargetDirectory: PCSTR, TargetFilename: PCSTR, CopyStyle: DWORD, ) -> BOOL1649     pub fn SetupQueueCopyA(
1650         QueueHandle: HSPFILEQ,
1651         SourceRootPath: PCSTR,
1652         SourcePath: PCSTR,
1653         SourceFilename: PCSTR,
1654         SourceDescription: PCSTR,
1655         SourceTagfile: PCSTR,
1656         TargetDirectory: PCSTR,
1657         TargetFilename: PCSTR,
1658         CopyStyle: DWORD,
1659     ) -> BOOL;
SetupQueueCopyW( QueueHandle: HSPFILEQ, SourceRootPath: PCWSTR, SourcePath: PCWSTR, SourceFilename: PCWSTR, SourceDescription: PCWSTR, SourceTagfile: PCWSTR, TargetDirectory: PCWSTR, TargetFilename: PCWSTR, CopyStyle: DWORD, ) -> BOOL1660     pub fn SetupQueueCopyW(
1661         QueueHandle: HSPFILEQ,
1662         SourceRootPath: PCWSTR,
1663         SourcePath: PCWSTR,
1664         SourceFilename: PCWSTR,
1665         SourceDescription: PCWSTR,
1666         SourceTagfile: PCWSTR,
1667         TargetDirectory: PCWSTR,
1668         TargetFilename: PCWSTR,
1669         CopyStyle: DWORD,
1670     ) -> BOOL;
SetupQueueCopyIndirectA( CopyParams: PSP_FILE_COPY_PARAMS_A, ) -> BOOL1671     pub fn SetupQueueCopyIndirectA(
1672         CopyParams: PSP_FILE_COPY_PARAMS_A,
1673     ) -> BOOL;
SetupQueueCopyIndirectW( CopyParams: PSP_FILE_COPY_PARAMS_W, ) -> BOOL1674     pub fn SetupQueueCopyIndirectW(
1675         CopyParams: PSP_FILE_COPY_PARAMS_W,
1676     ) -> BOOL;
SetupQueueDefaultCopyA( QueueHandle: HSPFILEQ, InfHandle: HINF, SourceRootPath: PCSTR, SourceFilename: PCSTR, TargetFilename: PCSTR, CopyStyle: DWORD, ) -> BOOL1677     pub fn SetupQueueDefaultCopyA(
1678         QueueHandle: HSPFILEQ,
1679         InfHandle: HINF,
1680         SourceRootPath: PCSTR,
1681         SourceFilename: PCSTR,
1682         TargetFilename: PCSTR,
1683         CopyStyle: DWORD,
1684     ) -> BOOL;
SetupQueueDefaultCopyW( QueueHandle: HSPFILEQ, InfHandle: HINF, SourceRootPath: PCWSTR, SourceFilename: PCWSTR, TargetFilename: PCWSTR, CopyStyle: DWORD, ) -> BOOL1685     pub fn SetupQueueDefaultCopyW(
1686         QueueHandle: HSPFILEQ,
1687         InfHandle: HINF,
1688         SourceRootPath: PCWSTR,
1689         SourceFilename: PCWSTR,
1690         TargetFilename: PCWSTR,
1691         CopyStyle: DWORD,
1692     ) -> BOOL;
SetupQueueCopySectionA( QueueHandle: HSPFILEQ, SourceRootPath: PCSTR, InfHandle: HINF, ListInfHandle: HINF, Section: PCSTR, CopyStyle: DWORD, ) -> BOOL1693     pub fn SetupQueueCopySectionA(
1694         QueueHandle: HSPFILEQ,
1695         SourceRootPath: PCSTR,
1696         InfHandle: HINF,
1697         ListInfHandle: HINF,
1698         Section: PCSTR,
1699         CopyStyle: DWORD,
1700     ) -> BOOL;
SetupQueueCopySectionW( QueueHandle: HSPFILEQ, SourceRootPath: PCWSTR, InfHandle: HINF, ListInfHandle: HINF, Section: PCWSTR, CopyStyle: DWORD, ) -> BOOL1701     pub fn SetupQueueCopySectionW(
1702         QueueHandle: HSPFILEQ,
1703         SourceRootPath: PCWSTR,
1704         InfHandle: HINF,
1705         ListInfHandle: HINF,
1706         Section: PCWSTR,
1707         CopyStyle: DWORD,
1708     ) -> BOOL;
SetupQueueDeleteA( QueueHandle: HSPFILEQ, PathPart1: PCSTR, PathPart2: PCSTR, ) -> BOOL1709     pub fn SetupQueueDeleteA(
1710         QueueHandle: HSPFILEQ,
1711         PathPart1: PCSTR,
1712         PathPart2: PCSTR,
1713     ) -> BOOL;
SetupQueueDeleteW( QueueHandle: HSPFILEQ, PathPart1: PCWSTR, PathPart2: PCWSTR, ) -> BOOL1714     pub fn SetupQueueDeleteW(
1715         QueueHandle: HSPFILEQ,
1716         PathPart1: PCWSTR,
1717         PathPart2: PCWSTR,
1718     ) -> BOOL;
SetupQueueDeleteSectionA( QueueHandle: HSPFILEQ, InfHandle: HINF, ListInfHandle: HINF, Section: PCSTR, ) -> BOOL1719     pub fn SetupQueueDeleteSectionA(
1720         QueueHandle: HSPFILEQ,
1721         InfHandle: HINF,
1722         ListInfHandle: HINF,
1723         Section: PCSTR,
1724     ) -> BOOL;
SetupQueueDeleteSectionW( QueueHandle: HSPFILEQ, InfHandle: HINF, ListInfHandle: HINF, Section: PCWSTR, ) -> BOOL1725     pub fn SetupQueueDeleteSectionW(
1726         QueueHandle: HSPFILEQ,
1727         InfHandle: HINF,
1728         ListInfHandle: HINF,
1729         Section: PCWSTR,
1730     ) -> BOOL;
SetupQueueRenameA( QueueHandle: HSPFILEQ, SourcePath: PCSTR, SourceFilename: PCSTR, TargetPath: PCSTR, TargetFilename: PCSTR, ) -> BOOL1731     pub fn SetupQueueRenameA(
1732         QueueHandle: HSPFILEQ,
1733         SourcePath: PCSTR,
1734         SourceFilename: PCSTR,
1735         TargetPath: PCSTR,
1736         TargetFilename: PCSTR,
1737     ) -> BOOL;
SetupQueueRenameW( QueueHandle: HSPFILEQ, SourcePath: PCWSTR, SourceFilename: PCWSTR, TargetPath: PCWSTR, TargetFilename: PCWSTR, ) -> BOOL1738     pub fn SetupQueueRenameW(
1739         QueueHandle: HSPFILEQ,
1740         SourcePath: PCWSTR,
1741         SourceFilename: PCWSTR,
1742         TargetPath: PCWSTR,
1743         TargetFilename: PCWSTR,
1744     ) -> BOOL;
SetupQueueRenameSectionA( QueueHandle: HSPFILEQ, InfHandle: HINF, ListInfHandle: HINF, Section: PCSTR, ) -> BOOL1745     pub fn SetupQueueRenameSectionA(
1746         QueueHandle: HSPFILEQ,
1747         InfHandle: HINF,
1748         ListInfHandle: HINF,
1749         Section: PCSTR,
1750     ) -> BOOL;
SetupQueueRenameSectionW( QueueHandle: HSPFILEQ, InfHandle: HINF, ListInfHandle: HINF, Section: PCWSTR, ) -> BOOL1751     pub fn SetupQueueRenameSectionW(
1752         QueueHandle: HSPFILEQ,
1753         InfHandle: HINF,
1754         ListInfHandle: HINF,
1755         Section: PCWSTR,
1756     ) -> BOOL;
SetupCommitFileQueueA( Owner: HWND, QueueHandle: HSPFILEQ, MsgHandler: PSP_FILE_CALLBACK_A, Context: PVOID, ) -> BOOL1757     pub fn SetupCommitFileQueueA(
1758         Owner: HWND,
1759         QueueHandle: HSPFILEQ,
1760         MsgHandler: PSP_FILE_CALLBACK_A,
1761         Context: PVOID,
1762     ) -> BOOL;
SetupCommitFileQueueW( Owner: HWND, QueueHandle: HSPFILEQ, MsgHandler: PSP_FILE_CALLBACK_W, Context: PVOID, ) -> BOOL1763     pub fn SetupCommitFileQueueW(
1764         Owner: HWND,
1765         QueueHandle: HSPFILEQ,
1766         MsgHandler: PSP_FILE_CALLBACK_W,
1767         Context: PVOID,
1768     ) -> BOOL;
SetupScanFileQueueA( FileQueue: HSPFILEQ, Flags: DWORD, Window: HWND, CallbackRoutine: PSP_FILE_CALLBACK_A, CallbackContext: PVOID, Result: PDWORD, ) -> BOOL1769     pub fn SetupScanFileQueueA(
1770         FileQueue: HSPFILEQ,
1771         Flags: DWORD,
1772         Window: HWND,
1773         CallbackRoutine: PSP_FILE_CALLBACK_A,
1774         CallbackContext: PVOID,
1775         Result: PDWORD,
1776     ) -> BOOL;
SetupScanFileQueueW( FileQueue: HSPFILEQ, Flags: DWORD, Window: HWND, CallbackRoutine: PSP_FILE_CALLBACK_W, CallbackContext: PVOID, Result: PDWORD, ) -> BOOL1777     pub fn SetupScanFileQueueW(
1778         FileQueue: HSPFILEQ,
1779         Flags: DWORD,
1780         Window: HWND,
1781         CallbackRoutine: PSP_FILE_CALLBACK_W,
1782         CallbackContext: PVOID,
1783         Result: PDWORD,
1784     ) -> BOOL;
1785 }
1786 pub const SPQ_SCAN_FILE_PRESENCE: DWORD = 0x00000001;
1787 pub const SPQ_SCAN_FILE_VALIDITY: DWORD = 0x00000002;
1788 pub const SPQ_SCAN_USE_CALLBACK: DWORD = 0x00000004;
1789 pub const SPQ_SCAN_USE_CALLBACKEX: DWORD = 0x00000008;
1790 pub const SPQ_SCAN_INFORM_USER: DWORD = 0x00000010;
1791 pub const SPQ_SCAN_PRUNE_COPY_QUEUE: DWORD = 0x00000020;
1792 pub const SPQ_SCAN_USE_CALLBACK_SIGNERINFO: DWORD = 0x00000040;
1793 pub const SPQ_SCAN_PRUNE_DELREN: DWORD = 0x00000080;
1794 pub const SPQ_SCAN_FILE_PRESENCE_WITHOUT_SOURCE: DWORD = 0x00000100;
1795 pub const SPQ_SCAN_FILE_COMPARISON: DWORD = 0x00000200;
1796 pub const SPQ_SCAN_ACTIVATE_DRP: DWORD = 0x00000400;
1797 pub const SPQ_DELAYED_COPY: DWORD = 0x00000001;
1798 extern "system" {
SetupGetFileQueueCount( FileQueue: HSPFILEQ, SubQueueFileOp: UINT, NumOperations: PUINT, ) -> BOOL1799     pub fn SetupGetFileQueueCount(
1800         FileQueue: HSPFILEQ,
1801         SubQueueFileOp: UINT,
1802         NumOperations: PUINT,
1803     ) -> BOOL;
SetupGetFileQueueFlags( FileQueue: HSPFILEQ, Flags: PDWORD, ) -> BOOL1804     pub fn SetupGetFileQueueFlags(
1805         FileQueue: HSPFILEQ,
1806         Flags: PDWORD,
1807     ) -> BOOL;
SetupSetFileQueueFlags( FileQueue: HSPFILEQ, FlagMask: DWORD, Flags: DWORD, ) -> BOOL1808     pub fn SetupSetFileQueueFlags(
1809         FileQueue: HSPFILEQ,
1810         FlagMask: DWORD,
1811         Flags: DWORD,
1812     ) -> BOOL;
1813 }
1814 pub const SPQ_FLAG_BACKUP_AWARE: DWORD = 0x00000001;
1815 pub const SPQ_FLAG_ABORT_IF_UNSIGNED: DWORD = 0x00000002;
1816 pub const SPQ_FLAG_FILES_MODIFIED: DWORD = 0x00000004;
1817 pub const SPQ_FLAG_DO_SHUFFLEMOVE: DWORD = 0x00000008;
1818 pub const SPQ_FLAG_VALID: DWORD = 0x0000000F;
1819 pub const SPOST_NONE: DWORD = 0;
1820 pub const SPOST_PATH: DWORD = 1;
1821 pub const SPOST_URL: DWORD = 2;
1822 pub const SPOST_MAX: DWORD = 3;
1823 extern "system" {
SetupCopyOEMInfA( SourceInfFileName: PCSTR, OEMSourceMediaLocation: PCSTR, OEMSourceMediaType: DWORD, CopyStyle: DWORD, DestinationInfFileName: PSTR, DestinationInfFileNameSize: DWORD, RequiredSize: PDWORD, DestinationInfFileNameComponent: *mut PSTR, ) -> BOOL1824     pub fn SetupCopyOEMInfA(
1825         SourceInfFileName: PCSTR,
1826         OEMSourceMediaLocation: PCSTR,
1827         OEMSourceMediaType: DWORD,
1828         CopyStyle: DWORD,
1829         DestinationInfFileName: PSTR,
1830         DestinationInfFileNameSize: DWORD,
1831         RequiredSize: PDWORD,
1832         DestinationInfFileNameComponent: *mut PSTR,
1833     ) -> BOOL;
SetupCopyOEMInfW( SourceInfFileName: PCWSTR, OEMSourceMediaLocation: PCWSTR, OEMSourceMediaType: DWORD, CopyStyle: DWORD, DestinationInfFileName: PWSTR, DestinationInfFileNameSize: DWORD, RequiredSize: PDWORD, DestinationInfFileNameComponent: *mut PWSTR, ) -> BOOL1834     pub fn SetupCopyOEMInfW(
1835         SourceInfFileName: PCWSTR,
1836         OEMSourceMediaLocation: PCWSTR,
1837         OEMSourceMediaType: DWORD,
1838         CopyStyle: DWORD,
1839         DestinationInfFileName: PWSTR,
1840         DestinationInfFileNameSize: DWORD,
1841         RequiredSize: PDWORD,
1842         DestinationInfFileNameComponent: *mut PWSTR,
1843     ) -> BOOL;
1844 }
1845 pub const SUOI_FORCEDELETE: DWORD = 0x00000001;
1846 pub const SUOI_INTERNAL1: DWORD = 0x00000002;
1847 extern "system" {
SetupUninstallOEMInfA( InfFileName: PCSTR, Flags: DWORD, Reserved: PVOID, ) -> BOOL1848     pub fn SetupUninstallOEMInfA(
1849         InfFileName: PCSTR,
1850         Flags: DWORD,
1851         Reserved: PVOID,
1852     ) -> BOOL;
SetupUninstallOEMInfW( InfFileName: PCWSTR, Flags: DWORD, Reserved: PVOID, ) -> BOOL1853     pub fn SetupUninstallOEMInfW(
1854         InfFileName: PCWSTR,
1855         Flags: DWORD,
1856         Reserved: PVOID,
1857     ) -> BOOL;
SetupUninstallNewlyCopiedInfs( FileQueue: HSPFILEQ, Flags: DWORD, Reserved: PVOID, ) -> BOOL1858     pub fn SetupUninstallNewlyCopiedInfs(
1859         FileQueue: HSPFILEQ,
1860         Flags: DWORD,
1861         Reserved: PVOID,
1862     ) -> BOOL;
SetupCreateDiskSpaceListA( Reserved1: PVOID, Reserved2: DWORD, Flags: UINT, ) -> HDSKSPC1863     pub fn SetupCreateDiskSpaceListA(
1864         Reserved1: PVOID,
1865         Reserved2: DWORD,
1866         Flags: UINT,
1867     ) -> HDSKSPC;
SetupCreateDiskSpaceListW( Reserved1: PVOID, Reserved2: DWORD, Flags: UINT, ) -> HDSKSPC1868     pub fn SetupCreateDiskSpaceListW(
1869         Reserved1: PVOID,
1870         Reserved2: DWORD,
1871         Flags: UINT,
1872     ) -> HDSKSPC;
1873 }
1874 pub const SPDSL_IGNORE_DISK: UINT = 0x00000001;
1875 pub const SPDSL_DISALLOW_NEGATIVE_ADJUST: UINT = 0x00000002;
1876 extern "system" {
SetupDuplicateDiskSpaceListA( DiskSpace: HDSKSPC, Reserved1: PVOID, Reserved2: DWORD, Flags: UINT, ) -> HDSKSPC1877     pub fn SetupDuplicateDiskSpaceListA(
1878         DiskSpace: HDSKSPC,
1879         Reserved1: PVOID,
1880         Reserved2: DWORD,
1881         Flags: UINT,
1882     ) -> HDSKSPC;
SetupDuplicateDiskSpaceListW( DiskSpace: HDSKSPC, Reserved1: PVOID, Reserved2: DWORD, Flags: UINT, ) -> HDSKSPC1883     pub fn SetupDuplicateDiskSpaceListW(
1884         DiskSpace: HDSKSPC,
1885         Reserved1: PVOID,
1886         Reserved2: DWORD,
1887         Flags: UINT,
1888     ) -> HDSKSPC;
SetupDestroyDiskSpaceList( DiskSpace: HDSKSPC, ) -> BOOL1889     pub fn SetupDestroyDiskSpaceList(
1890         DiskSpace: HDSKSPC,
1891     ) -> BOOL;
SetupQueryDrivesInDiskSpaceListA( DiskSpace: HDSKSPC, ReturnBuffer: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1892     pub fn SetupQueryDrivesInDiskSpaceListA(
1893         DiskSpace: HDSKSPC,
1894         ReturnBuffer: PSTR,
1895         ReturnBufferSize: DWORD,
1896         RequiredSize: PDWORD,
1897     ) -> BOOL;
SetupQueryDrivesInDiskSpaceListW( DiskSpace: HDSKSPC, ReturnBuffer: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL1898     pub fn SetupQueryDrivesInDiskSpaceListW(
1899         DiskSpace: HDSKSPC,
1900         ReturnBuffer: PWSTR,
1901         ReturnBufferSize: DWORD,
1902         RequiredSize: PDWORD,
1903     ) -> BOOL;
SetupQuerySpaceRequiredOnDriveA( DiskSpace: HDSKSPC, DriveSpec: PCSTR, SpaceRequired: *mut LONGLONG, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1904     pub fn SetupQuerySpaceRequiredOnDriveA(
1905         DiskSpace: HDSKSPC,
1906         DriveSpec: PCSTR,
1907         SpaceRequired: *mut LONGLONG,
1908         Reserved1: PVOID,
1909         Reserved2: UINT,
1910     ) -> BOOL;
SetupQuerySpaceRequiredOnDriveW( DiskSpace: HDSKSPC, DriveSpec: PCWSTR, SpaceRequired: *mut LONGLONG, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1911     pub fn SetupQuerySpaceRequiredOnDriveW(
1912         DiskSpace: HDSKSPC,
1913         DriveSpec: PCWSTR,
1914         SpaceRequired: *mut LONGLONG,
1915         Reserved1: PVOID,
1916         Reserved2: UINT,
1917     ) -> BOOL;
SetupAdjustDiskSpaceListA( DiskSpace: HDSKSPC, DriveRoot: LPCSTR, Amount: LONGLONG, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1918     pub fn SetupAdjustDiskSpaceListA(
1919         DiskSpace: HDSKSPC,
1920         DriveRoot: LPCSTR,
1921         Amount: LONGLONG,
1922         Reserved1: PVOID,
1923         Reserved2: UINT,
1924     ) -> BOOL;
SetupAdjustDiskSpaceListW( DiskSpace: HDSKSPC, DriveRoot: LPCWSTR, Amount: LONGLONG, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1925     pub fn SetupAdjustDiskSpaceListW(
1926         DiskSpace: HDSKSPC,
1927         DriveRoot: LPCWSTR,
1928         Amount: LONGLONG,
1929         Reserved1: PVOID,
1930         Reserved2: UINT,
1931     ) -> BOOL;
SetupAddToDiskSpaceListA( DiskSpace: HDSKSPC, TargetFilespec: PCSTR, FileSize: LONGLONG, Operation: UINT, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1932     pub fn SetupAddToDiskSpaceListA(
1933         DiskSpace: HDSKSPC,
1934         TargetFilespec: PCSTR,
1935         FileSize: LONGLONG,
1936         Operation: UINT,
1937         Reserved1: PVOID,
1938         Reserved2: UINT,
1939     ) -> BOOL;
SetupAddToDiskSpaceListW( DiskSpace: HDSKSPC, TargetFilespec: PCWSTR, FileSize: LONGLONG, Operation: UINT, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1940     pub fn SetupAddToDiskSpaceListW(
1941         DiskSpace: HDSKSPC,
1942         TargetFilespec: PCWSTR,
1943         FileSize: LONGLONG,
1944         Operation: UINT,
1945         Reserved1: PVOID,
1946         Reserved2: UINT,
1947     ) -> BOOL;
SetupAddSectionToDiskSpaceListA( DiskSpace: HDSKSPC, InfHandle: HINF, ListInfHandle: HINF, SectionName: PCSTR, Operation: UINT, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1948     pub fn SetupAddSectionToDiskSpaceListA(
1949         DiskSpace: HDSKSPC,
1950         InfHandle: HINF,
1951         ListInfHandle: HINF,
1952         SectionName: PCSTR,
1953         Operation: UINT,
1954         Reserved1: PVOID,
1955         Reserved2: UINT,
1956     ) -> BOOL;
SetupAddSectionToDiskSpaceListW( DiskSpace: HDSKSPC, InfHandle: HINF, ListInfHandle: HINF, SectionName: PCWSTR, Operation: UINT, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1957     pub fn SetupAddSectionToDiskSpaceListW(
1958         DiskSpace: HDSKSPC,
1959         InfHandle: HINF,
1960         ListInfHandle: HINF,
1961         SectionName: PCWSTR,
1962         Operation: UINT,
1963         Reserved1: PVOID,
1964         Reserved2: UINT,
1965     ) -> BOOL;
SetupAddInstallSectionToDiskSpaceListA( DiskSpace: HDSKSPC, InfHandle: HINF, LayoutInfHandle: HINF, SectionName: PCSTR, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1966     pub fn SetupAddInstallSectionToDiskSpaceListA(
1967         DiskSpace: HDSKSPC,
1968         InfHandle: HINF,
1969         LayoutInfHandle: HINF,
1970         SectionName: PCSTR,
1971         Reserved1: PVOID,
1972         Reserved2: UINT,
1973     ) -> BOOL;
SetupAddInstallSectionToDiskSpaceListW( DiskSpace: HDSKSPC, InfHandle: HINF, LayoutInfHandle: HINF, SectionName: PCWSTR, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1974     pub fn SetupAddInstallSectionToDiskSpaceListW(
1975         DiskSpace: HDSKSPC,
1976         InfHandle: HINF,
1977         LayoutInfHandle: HINF,
1978         SectionName: PCWSTR,
1979         Reserved1: PVOID,
1980         Reserved2: UINT,
1981     ) -> BOOL;
SetupRemoveFromDiskSpaceListA( DiskSpace: HDSKSPC, TargetFilespec: PCSTR, Operation: UINT, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1982     pub fn SetupRemoveFromDiskSpaceListA(
1983         DiskSpace: HDSKSPC,
1984         TargetFilespec: PCSTR,
1985         Operation: UINT,
1986         Reserved1: PVOID,
1987         Reserved2: UINT,
1988     ) -> BOOL;
SetupRemoveFromDiskSpaceListW( DiskSpace: HDSKSPC, TargetFilespec: PCWSTR, Operation: UINT, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1989     pub fn SetupRemoveFromDiskSpaceListW(
1990         DiskSpace: HDSKSPC,
1991         TargetFilespec: PCWSTR,
1992         Operation: UINT,
1993         Reserved1: PVOID,
1994         Reserved2: UINT,
1995     ) -> BOOL;
SetupRemoveSectionFromDiskSpaceListA( DiskSpace: HDSKSPC, InfHandle: HINF, ListInfHandle: HINF, SectionName: PCSTR, Operation: UINT, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL1996     pub fn SetupRemoveSectionFromDiskSpaceListA(
1997         DiskSpace: HDSKSPC,
1998         InfHandle: HINF,
1999         ListInfHandle: HINF,
2000         SectionName: PCSTR,
2001         Operation: UINT,
2002         Reserved1: PVOID,
2003         Reserved2: UINT,
2004     ) -> BOOL;
SetupRemoveSectionFromDiskSpaceListW( DiskSpace: HDSKSPC, InfHandle: HINF, ListInfHandle: HINF, SectionName: PCWSTR, Operation: UINT, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL2005     pub fn SetupRemoveSectionFromDiskSpaceListW(
2006         DiskSpace: HDSKSPC,
2007         InfHandle: HINF,
2008         ListInfHandle: HINF,
2009         SectionName: PCWSTR,
2010         Operation: UINT,
2011         Reserved1: PVOID,
2012         Reserved2: UINT,
2013     ) -> BOOL;
SetupRemoveInstallSectionFromDiskSpaceListA( DiskSpace: HDSKSPC, InfHandle: HINF, LayoutInfHandle: HINF, SectionName: PCSTR, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL2014     pub fn SetupRemoveInstallSectionFromDiskSpaceListA(
2015         DiskSpace: HDSKSPC,
2016         InfHandle: HINF,
2017         LayoutInfHandle: HINF,
2018         SectionName: PCSTR,
2019         Reserved1: PVOID,
2020         Reserved2: UINT,
2021     ) -> BOOL;
SetupRemoveInstallSectionFromDiskSpaceListW( DiskSpace: HDSKSPC, InfHandle: HINF, LayoutInfHandle: HINF, SectionName: PCWSTR, Reserved1: PVOID, Reserved2: UINT, ) -> BOOL2022     pub fn SetupRemoveInstallSectionFromDiskSpaceListW(
2023         DiskSpace: HDSKSPC,
2024         InfHandle: HINF,
2025         LayoutInfHandle: HINF,
2026         SectionName: PCWSTR,
2027         Reserved1: PVOID,
2028         Reserved2: UINT,
2029     ) -> BOOL;
SetupIterateCabinetA( CabinetFile: PCSTR, Reserved: DWORD, MsgHandler: PSP_FILE_CALLBACK_A, Context: PVOID, ) -> BOOL2030     pub fn SetupIterateCabinetA(
2031         CabinetFile: PCSTR,
2032         Reserved: DWORD,
2033         MsgHandler: PSP_FILE_CALLBACK_A,
2034         Context: PVOID,
2035     ) -> BOOL;
SetupIterateCabinetW( CabinetFile: PCWSTR, Reserved: DWORD, MsgHandler: PSP_FILE_CALLBACK_W, Context: PVOID, ) -> BOOL2036     pub fn SetupIterateCabinetW(
2037         CabinetFile: PCWSTR,
2038         Reserved: DWORD,
2039         MsgHandler: PSP_FILE_CALLBACK_W,
2040         Context: PVOID,
2041     ) -> BOOL;
SetupPromptReboot( FileQueue: HSPFILEQ, Owner: HWND, ScanOnly: BOOL, ) -> INT2042     pub fn SetupPromptReboot(
2043         FileQueue: HSPFILEQ,
2044         Owner: HWND,
2045         ScanOnly: BOOL,
2046     ) -> INT;
2047 }
2048 pub const SPFILEQ_FILE_IN_USE: INT = 0x00000001;
2049 pub const SPFILEQ_REBOOT_RECOMMENDED: INT = 0x00000002;
2050 pub const SPFILEQ_REBOOT_IN_PROGRESS: INT = 0x00000004;
2051 extern "system" {
SetupInitDefaultQueueCallback( OwnerWindow: HWND, ) -> PVOID2052     pub fn SetupInitDefaultQueueCallback(
2053         OwnerWindow: HWND,
2054     ) -> PVOID;
SetupInitDefaultQueueCallbackEx( OwnerWindow: HWND, AlternateProgressWindow: HWND, ProgressMessage: UINT, Reserved1: DWORD, Reserved2: PVOID, ) -> PVOID2055     pub fn SetupInitDefaultQueueCallbackEx(
2056         OwnerWindow: HWND,
2057         AlternateProgressWindow: HWND,
2058         ProgressMessage: UINT,
2059         Reserved1: DWORD,
2060         Reserved2: PVOID,
2061     ) -> PVOID;
SetupTermDefaultQueueCallback( Context: PVOID, ) -> ()2062     pub fn SetupTermDefaultQueueCallback(
2063         Context: PVOID,
2064     ) -> ();
SetupDefaultQueueCallbackA( Context: PVOID, Notification: UINT, Param1: UINT_PTR, Param2: UINT_PTR, ) -> UINT2065     pub fn SetupDefaultQueueCallbackA(
2066         Context: PVOID,
2067         Notification: UINT,
2068         Param1: UINT_PTR,
2069         Param2: UINT_PTR,
2070     ) -> UINT;
SetupDefaultQueueCallbackW( Context: PVOID, Notification: UINT, Param1: UINT_PTR, Param2: UINT_PTR, ) -> UINT2071     pub fn SetupDefaultQueueCallbackW(
2072         Context: PVOID,
2073         Notification: UINT,
2074         Param1: UINT_PTR,
2075         Param2: UINT_PTR,
2076     ) -> UINT;
2077 }
2078 pub const FLG_ADDREG_DELREG_BIT: DWORD = 0x00008000;
2079 pub const FLG_ADDREG_BINVALUETYPE: DWORD = 0x00000001;
2080 pub const FLG_ADDREG_NOCLOBBER: DWORD = 0x00000002;
2081 pub const FLG_ADDREG_DELVAL: DWORD = 0x00000004;
2082 pub const FLG_ADDREG_APPEND: DWORD = 0x00000008;
2083 pub const FLG_ADDREG_KEYONLY: DWORD = 0x00000010;
2084 pub const FLG_ADDREG_OVERWRITEONLY: DWORD = 0x00000020;
2085 pub const FLG_ADDREG_64BITKEY: DWORD = 0x00001000;
2086 pub const FLG_ADDREG_KEYONLY_COMMON: DWORD = 0x00002000;
2087 pub const FLG_ADDREG_32BITKEY: DWORD = 0x00004000;
2088 pub const FLG_ADDREG_TYPE_MASK: DWORD = 0xFFFF0000 | FLG_ADDREG_BINVALUETYPE;
2089 pub const FLG_ADDREG_TYPE_SZ: DWORD = 0x00000000;
2090 pub const FLG_ADDREG_TYPE_MULTI_SZ: DWORD = 0x00010000;
2091 pub const FLG_ADDREG_TYPE_EXPAND_SZ: DWORD = 0x00020000;
2092 pub const FLG_ADDREG_TYPE_BINARY: DWORD = 0x00000000 | FLG_ADDREG_BINVALUETYPE;
2093 pub const FLG_ADDREG_TYPE_DWORD: DWORD = 0x00010000 | FLG_ADDREG_BINVALUETYPE;
2094 pub const FLG_ADDREG_TYPE_NONE: DWORD = 0x00020000 | FLG_ADDREG_BINVALUETYPE;
2095 pub const FLG_DELREG_VALUE: DWORD = 0x00000000;
2096 pub const FLG_DELREG_TYPE_MASK: DWORD = FLG_ADDREG_TYPE_MASK;
2097 pub const FLG_DELREG_TYPE_SZ: DWORD = FLG_ADDREG_TYPE_SZ;
2098 pub const FLG_DELREG_TYPE_MULTI_SZ: DWORD = FLG_ADDREG_TYPE_MULTI_SZ;
2099 pub const FLG_DELREG_TYPE_EXPAND_SZ: DWORD = FLG_ADDREG_TYPE_EXPAND_SZ;
2100 pub const FLG_DELREG_TYPE_BINARY: DWORD = FLG_ADDREG_TYPE_BINARY;
2101 pub const FLG_DELREG_TYPE_DWORD: DWORD = FLG_ADDREG_TYPE_DWORD;
2102 pub const FLG_DELREG_TYPE_NONE: DWORD = FLG_ADDREG_TYPE_NONE;
2103 pub const FLG_DELREG_64BITKEY: DWORD = FLG_ADDREG_64BITKEY;
2104 pub const FLG_DELREG_KEYONLY_COMMON: DWORD = FLG_ADDREG_KEYONLY_COMMON;
2105 pub const FLG_DELREG_32BITKEY: DWORD = FLG_ADDREG_32BITKEY;
2106 pub const FLG_DELREG_OPERATION_MASK: DWORD = 0x000000FE;
2107 pub const FLG_DELREG_MULTI_SZ_DELSTRING: DWORD = FLG_DELREG_TYPE_MULTI_SZ | FLG_ADDREG_DELREG_BIT
2108     | 0x00000002;
2109 pub const FLG_BITREG_CLEARBITS: DWORD = 0x00000000;
2110 pub const FLG_BITREG_SETBITS: DWORD = 0x00000001;
2111 pub const FLG_BITREG_64BITKEY: DWORD = 0x00001000;
2112 pub const FLG_BITREG_32BITKEY: DWORD = 0x00004000;
2113 pub const FLG_INI2REG_64BITKEY: DWORD = 0x00001000;
2114 pub const FLG_INI2REG_32BITKEY: DWORD = 0x00004000;
2115 pub const FLG_REGSVR_DLLREGISTER: DWORD = 0x00000001;
2116 pub const FLG_REGSVR_DLLINSTALL: DWORD = 0x00000002;
2117 pub const FLG_PROFITEM_CURRENTUSER: DWORD = 0x00000001;
2118 pub const FLG_PROFITEM_DELETE: DWORD = 0x00000002;
2119 pub const FLG_PROFITEM_GROUP: DWORD = 0x00000004;
2120 pub const FLG_PROFITEM_CSIDL: DWORD = 0x00000008;
2121 pub const FLG_ADDPROPERTY_NOCLOBBER: DWORD = 0x00000001;
2122 pub const FLG_ADDPROPERTY_OVERWRITEONLY: DWORD = 0x00000002;
2123 pub const FLG_ADDPROPERTY_APPEND: DWORD = 0x00000004;
2124 pub const FLG_ADDPROPERTY_OR: DWORD = 0x00000008;
2125 pub const FLG_ADDPROPERTY_AND: DWORD = 0x00000010;
2126 pub const FLG_DELPROPERTY_MULTI_SZ_DELSTRING: DWORD = 0x00000001;
2127 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, ) -> BOOL2128     pub fn SetupInstallFromInfSectionA(
2129         Owner: HWND,
2130         InfHandle: HINF,
2131         SectionName: PCSTR,
2132         Flags: UINT,
2133         RelativeKeyRoot: HKEY,
2134         SourceRootPath: PCSTR,
2135         CopyFlags: UINT,
2136         MsgHandler: PSP_FILE_CALLBACK_A,
2137         Context: PVOID,
2138         DeviceInfoSet: HDEVINFO,
2139         DeviceInfoData: PSP_DEVINFO_DATA,
2140     ) -> 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, ) -> BOOL2141     pub fn SetupInstallFromInfSectionW(
2142         Owner: HWND,
2143         InfHandle: HINF,
2144         SectionName: PCWSTR,
2145         Flags: UINT,
2146         RelativeKeyRoot: HKEY,
2147         SourceRootPath: PCWSTR,
2148         CopyFlags: UINT,
2149         MsgHandler: PSP_FILE_CALLBACK_W,
2150         Context: PVOID,
2151         DeviceInfoSet: HDEVINFO,
2152         DeviceInfoData: PSP_DEVINFO_DATA,
2153     ) -> BOOL;
2154 }
2155 pub const SPINST_LOGCONFIG: UINT = 0x00000001;
2156 pub const SPINST_INIFILES: UINT = 0x00000002;
2157 pub const SPINST_REGISTRY: UINT = 0x00000004;
2158 pub const SPINST_INI2REG: UINT = 0x00000008;
2159 pub const SPINST_FILES: UINT = 0x00000010;
2160 pub const SPINST_BITREG: UINT = 0x00000020;
2161 pub const SPINST_REGSVR: UINT = 0x00000040;
2162 pub const SPINST_UNREGSVR: UINT = 0x00000080;
2163 pub const SPINST_PROFILEITEMS: UINT = 0x00000100;
2164 pub const SPINST_COPYINF: UINT = 0x00000200;
2165 pub const SPINST_PROPERTIES: UINT = 0x00000400;
2166 pub const SPINST_ALL: UINT = 0x000007ff;
2167 pub const SPINST_SINGLESECTION: UINT = 0x00010000;
2168 pub const SPINST_LOGCONFIG_IS_FORCED: UINT = 0x00020000;
2169 pub const SPINST_LOGCONFIGS_ARE_OVERRIDES: UINT = 0x00040000;
2170 pub const SPINST_REGISTERCALLBACKAWARE: UINT = 0x00080000;
2171 pub const SPINST_DEVICEINSTALL: UINT = 0x00100000;
2172 extern "system" {
SetupInstallFilesFromInfSectionA( InfHandle: HINF, LayoutInfHandle: HINF, FileQueue: HSPFILEQ, SectionName: PCSTR, SourceRootPath: PCSTR, CopyFlags: UINT, ) -> BOOL2173     pub fn SetupInstallFilesFromInfSectionA(
2174         InfHandle: HINF,
2175         LayoutInfHandle: HINF,
2176         FileQueue: HSPFILEQ,
2177         SectionName: PCSTR,
2178         SourceRootPath: PCSTR,
2179         CopyFlags: UINT,
2180     ) -> BOOL;
SetupInstallFilesFromInfSectionW( InfHandle: HINF, LayoutInfHandle: HINF, FileQueue: HSPFILEQ, SectionName: PCWSTR, SourceRootPath: PCWSTR, CopyFlags: UINT, ) -> BOOL2181     pub fn SetupInstallFilesFromInfSectionW(
2182         InfHandle: HINF,
2183         LayoutInfHandle: HINF,
2184         FileQueue: HSPFILEQ,
2185         SectionName: PCWSTR,
2186         SourceRootPath: PCWSTR,
2187         CopyFlags: UINT,
2188     ) -> BOOL;
2189 }
2190 pub const SPSVCINST_TAGTOFRONT: DWORD = 0x00000001;
2191 pub const SPSVCINST_ASSOCSERVICE: DWORD = 0x00000002;
2192 pub const SPSVCINST_DELETEEVENTLOGENTRY: DWORD = 0x00000004;
2193 pub const SPSVCINST_NOCLOBBER_DISPLAYNAME: DWORD = 0x00000008;
2194 pub const SPSVCINST_NOCLOBBER_STARTTYPE: DWORD = 0x00000010;
2195 pub const SPSVCINST_NOCLOBBER_ERRORCONTROL: DWORD = 0x00000020;
2196 pub const SPSVCINST_NOCLOBBER_LOADORDERGROUP: DWORD = 0x00000040;
2197 pub const SPSVCINST_NOCLOBBER_DEPENDENCIES: DWORD = 0x00000080;
2198 pub const SPSVCINST_NOCLOBBER_DESCRIPTION: DWORD = 0x00000100;
2199 pub const SPSVCINST_STOPSERVICE: DWORD = 0x00000200;
2200 pub const SPSVCINST_CLOBBER_SECURITY: DWORD = 0x00000400;
2201 pub const SPSVCINST_STARTSERVICE: DWORD = 0x00000800;
2202 pub const SPSVCINST_NOCLOBBER_REQUIREDPRIVILEGES: DWORD = 0x00001000;
2203 extern "system" {
SetupInstallServicesFromInfSectionA( InfHandle: HINF, SectionName: PCSTR, Flags: DWORD, ) -> BOOL2204     pub fn SetupInstallServicesFromInfSectionA(
2205         InfHandle: HINF,
2206         SectionName: PCSTR,
2207         Flags: DWORD,
2208     ) -> BOOL;
SetupInstallServicesFromInfSectionW( InfHandle: HINF, SectionName: PCWSTR, Flags: DWORD, ) -> BOOL2209     pub fn SetupInstallServicesFromInfSectionW(
2210         InfHandle: HINF,
2211         SectionName: PCWSTR,
2212         Flags: DWORD,
2213     ) -> BOOL;
SetupInstallServicesFromInfSectionExA( InfHandle: HINF, SectionName: PCSTR, Flags: DWORD, DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Reserved1: PVOID, Reserved2: PVOID, ) -> BOOL2214     pub fn SetupInstallServicesFromInfSectionExA(
2215         InfHandle: HINF,
2216         SectionName: PCSTR,
2217         Flags: DWORD,
2218         DeviceInfoSet: HDEVINFO,
2219         DeviceInfoData: PSP_DEVINFO_DATA,
2220         Reserved1: PVOID,
2221         Reserved2: PVOID,
2222     ) -> BOOL;
SetupInstallServicesFromInfSectionExW( InfHandle: HINF, SectionName: PCWSTR, Flags: DWORD, DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Reserved1: PVOID, Reserved2: PVOID, ) -> BOOL2223     pub fn SetupInstallServicesFromInfSectionExW(
2224         InfHandle: HINF,
2225         SectionName: PCWSTR,
2226         Flags: DWORD,
2227         DeviceInfoSet: HDEVINFO,
2228         DeviceInfoData: PSP_DEVINFO_DATA,
2229         Reserved1: PVOID,
2230         Reserved2: PVOID,
2231     ) -> BOOL;
InstallHinfSectionA( Window: HWND, ModuleHandle: HINSTANCE, CommandLine: PCSTR, ShowCommand: INT, ) -> ()2232     pub fn InstallHinfSectionA(
2233         Window: HWND,
2234         ModuleHandle: HINSTANCE,
2235         CommandLine: PCSTR,
2236         ShowCommand: INT,
2237     ) -> ();
InstallHinfSectionW( Window: HWND, ModuleHandle: HINSTANCE, CommandLine: PCWSTR, ShowCommand: INT, ) -> ()2238     pub fn InstallHinfSectionW(
2239         Window: HWND,
2240         ModuleHandle: HINSTANCE,
2241         CommandLine: PCWSTR,
2242         ShowCommand: INT,
2243     ) -> ();
2244 }
2245 pub type HSPFILELOG = PVOID;
2246 extern "system" {
SetupInitializeFileLogA( LogFileName: PCSTR, Flags: DWORD, ) -> HSPFILELOG2247     pub fn SetupInitializeFileLogA(
2248         LogFileName: PCSTR,
2249         Flags: DWORD,
2250     ) -> HSPFILELOG;
SetupInitializeFileLogW( LogFileName: PCWSTR, Flags: DWORD, ) -> HSPFILELOG2251     pub fn SetupInitializeFileLogW(
2252         LogFileName: PCWSTR,
2253         Flags: DWORD,
2254     ) -> HSPFILELOG;
2255 }
2256 pub const SPFILELOG_SYSTEMLOG: DWORD = 0x00000001;
2257 pub const SPFILELOG_FORCENEW: DWORD = 0x00000002;
2258 pub const SPFILELOG_QUERYONLY: DWORD = 0x00000004;
2259 extern "system" {
SetupTerminateFileLog( FileLogHandle: HSPFILELOG, ) -> BOOL2260     pub fn SetupTerminateFileLog(
2261         FileLogHandle: HSPFILELOG,
2262     ) -> BOOL;
SetupLogFileA( FileLogHandle: HSPFILELOG, LogSectionName: PCSTR, SourceFilename: PCSTR, TargetFilename: PCSTR, Checksum: DWORD, DiskTagfile: PCSTR, DiskDescription: PCSTR, OtherInfo: PCSTR, Flags: DWORD, ) -> BOOL2263     pub fn SetupLogFileA(
2264         FileLogHandle: HSPFILELOG,
2265         LogSectionName: PCSTR,
2266         SourceFilename: PCSTR,
2267         TargetFilename: PCSTR,
2268         Checksum: DWORD,
2269         DiskTagfile: PCSTR,
2270         DiskDescription: PCSTR,
2271         OtherInfo: PCSTR,
2272         Flags: DWORD,
2273     ) -> BOOL;
SetupLogFileW( FileLogHandle: HSPFILELOG, LogSectionName: PCWSTR, SourceFilename: PCWSTR, TargetFilename: PCWSTR, Checksum: DWORD, DiskTagfile: PCWSTR, DiskDescription: PCWSTR, OtherInfo: PCWSTR, Flags: DWORD, ) -> BOOL2274     pub fn SetupLogFileW(
2275         FileLogHandle: HSPFILELOG,
2276         LogSectionName: PCWSTR,
2277         SourceFilename: PCWSTR,
2278         TargetFilename: PCWSTR,
2279         Checksum: DWORD,
2280         DiskTagfile: PCWSTR,
2281         DiskDescription: PCWSTR,
2282         OtherInfo: PCWSTR,
2283         Flags: DWORD,
2284     ) -> BOOL;
2285 }
2286 pub const SPFILELOG_OEMFILE: DWORD = 0x00000001;
2287 extern "system" {
SetupRemoveFileLogEntryA( FileLogHandle: HSPFILELOG, LogSectionName: PCSTR, TargetFilename: PCSTR, ) -> BOOL2288     pub fn SetupRemoveFileLogEntryA(
2289         FileLogHandle: HSPFILELOG,
2290         LogSectionName: PCSTR,
2291         TargetFilename: PCSTR,
2292     ) -> BOOL;
SetupRemoveFileLogEntryW( FileLogHandle: HSPFILELOG, LogSectionName: PCWSTR, TargetFilename: PCWSTR, ) -> BOOL2293     pub fn SetupRemoveFileLogEntryW(
2294         FileLogHandle: HSPFILELOG,
2295         LogSectionName: PCWSTR,
2296         TargetFilename: PCWSTR,
2297     ) -> BOOL;
2298 }
2299 ENUM!{enum SetupFileLogInfo {
2300     SetupFileLogSourceFilename,
2301     SetupFileLogChecksum,
2302     SetupFileLogDiskTagfile,
2303     SetupFileLogDiskDescription,
2304     SetupFileLogOtherInfo,
2305     SetupFileLogMax,
2306 }}
2307 extern "system" {
SetupQueryFileLogA( FileLogHandle: HSPFILELOG, LogSectionName: PCSTR, TargetFilename: PCSTR, DesiredInfo: SetupFileLogInfo, DataOut: PSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2308     pub fn SetupQueryFileLogA(
2309         FileLogHandle: HSPFILELOG,
2310         LogSectionName: PCSTR,
2311         TargetFilename: PCSTR,
2312         DesiredInfo: SetupFileLogInfo,
2313         DataOut: PSTR,
2314         ReturnBufferSize: DWORD,
2315         RequiredSize: PDWORD,
2316     ) -> BOOL;
SetupQueryFileLogW( FileLogHandle: HSPFILELOG, LogSectionName: PCWSTR, TargetFilename: PCWSTR, DesiredInfo: SetupFileLogInfo, DataOut: PWSTR, ReturnBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2317     pub fn SetupQueryFileLogW(
2318         FileLogHandle: HSPFILELOG,
2319         LogSectionName: PCWSTR,
2320         TargetFilename: PCWSTR,
2321         DesiredInfo: SetupFileLogInfo,
2322         DataOut: PWSTR,
2323         ReturnBufferSize: DWORD,
2324         RequiredSize: PDWORD,
2325     ) -> BOOL;
2326 }
2327 pub type LogSeverity = DWORD;
2328 pub const LogSevInformation: LogSeverity = 0x00000000;
2329 pub const LogSevWarning: LogSeverity = 0x00000001;
2330 pub const LogSevError: LogSeverity = 0x00000002;
2331 pub const LogSevFatalError: LogSeverity = 0x00000003;
2332 pub const LogSevMaximum: LogSeverity = 0x00000004;
2333 extern "system" {
SetupOpenLog( Erase: BOOL, ) -> BOOL2334     pub fn SetupOpenLog(
2335         Erase: BOOL,
2336     ) -> BOOL;
SetupLogErrorA( MessageString: LPCSTR, Severity: LogSeverity, ) -> BOOL2337     pub fn SetupLogErrorA(
2338         MessageString: LPCSTR,
2339         Severity: LogSeverity,
2340     ) -> BOOL;
SetupLogErrorW( MessageString: LPCWSTR, Severity: LogSeverity, ) -> BOOL2341     pub fn SetupLogErrorW(
2342         MessageString: LPCWSTR,
2343         Severity: LogSeverity,
2344     ) -> BOOL;
SetupCloseLog() -> ()2345     pub fn SetupCloseLog() -> ();
SetupGetThreadLogToken() -> SP_LOG_TOKEN2346     pub fn SetupGetThreadLogToken() -> SP_LOG_TOKEN;
SetupSetThreadLogToken( LogToken: SP_LOG_TOKEN, ) -> ()2347     pub fn SetupSetThreadLogToken(
2348         LogToken: SP_LOG_TOKEN,
2349     ) -> ();
2350 }
2351 //pub fn SetupWriteTextLog() -> ();
2352 //pub fn SetupWriteTextLogError() -> ();
2353 extern "system" {
SetupWriteTextLogInfLine( LogToken: SP_LOG_TOKEN, Flags: DWORD, InfHandle: HINF, Context: PINFCONTEXT, ) -> ()2354     pub fn SetupWriteTextLogInfLine(
2355         LogToken: SP_LOG_TOKEN,
2356         Flags: DWORD,
2357         InfHandle: HINF,
2358         Context: PINFCONTEXT,
2359     ) -> ();
SetupGetBackupInformationA( QueueHandle: HSPFILEQ, BackupParams: PSP_BACKUP_QUEUE_PARAMS_A, ) -> BOOL2360     pub fn SetupGetBackupInformationA(
2361         QueueHandle: HSPFILEQ,
2362         BackupParams: PSP_BACKUP_QUEUE_PARAMS_A,
2363     ) -> BOOL;
SetupGetBackupInformationW( QueueHandle: HSPFILEQ, BackupParams: PSP_BACKUP_QUEUE_PARAMS_W, ) -> BOOL2364     pub fn SetupGetBackupInformationW(
2365         QueueHandle: HSPFILEQ,
2366         BackupParams: PSP_BACKUP_QUEUE_PARAMS_W,
2367     ) -> BOOL;
SetupPrepareQueueForRestoreA( QueueHandle: HSPFILEQ, BackupPath: PCSTR, RestoreFlags: DWORD, ) -> BOOL2368     pub fn SetupPrepareQueueForRestoreA(
2369         QueueHandle: HSPFILEQ,
2370         BackupPath: PCSTR,
2371         RestoreFlags: DWORD,
2372     ) -> BOOL;
SetupPrepareQueueForRestoreW( QueueHandle: HSPFILEQ, BackupPath: PCWSTR, RestoreFlags: DWORD, ) -> BOOL2373     pub fn SetupPrepareQueueForRestoreW(
2374         QueueHandle: HSPFILEQ,
2375         BackupPath: PCWSTR,
2376         RestoreFlags: DWORD,
2377     ) -> BOOL;
SetupSetNonInteractiveMode( NonInteractiveFlag: BOOL, ) -> BOOL2378     pub fn SetupSetNonInteractiveMode(
2379         NonInteractiveFlag: BOOL,
2380     ) -> BOOL;
SetupGetNonInteractiveMode() -> BOOL2381     pub fn SetupGetNonInteractiveMode() -> BOOL;
SetupDiCreateDeviceInfoList( ClassGuid: *const GUID, hwndParent: HWND, ) -> HDEVINFO2382     pub fn SetupDiCreateDeviceInfoList(
2383         ClassGuid: *const GUID,
2384         hwndParent: HWND,
2385     ) -> HDEVINFO;
SetupDiCreateDeviceInfoListExA( ClassGuid: *const GUID, hwndParent: HWND, MachineName: PCSTR, Reserved: PVOID, ) -> HDEVINFO2386     pub fn SetupDiCreateDeviceInfoListExA(
2387         ClassGuid: *const GUID,
2388         hwndParent: HWND,
2389         MachineName: PCSTR,
2390         Reserved: PVOID,
2391     ) -> HDEVINFO;
SetupDiCreateDeviceInfoListExW( ClassGuid: *const GUID, hwndParent: HWND, MachineName: PCWSTR, Reserved: PVOID, ) -> HDEVINFO2392     pub fn SetupDiCreateDeviceInfoListExW(
2393         ClassGuid: *const GUID,
2394         hwndParent: HWND,
2395         MachineName: PCWSTR,
2396         Reserved: PVOID,
2397     ) -> HDEVINFO;
SetupDiGetDeviceInfoListClass( DeviceInfoSet: HDEVINFO, ClassGuid: LPGUID, ) -> BOOL2398     pub fn SetupDiGetDeviceInfoListClass(
2399         DeviceInfoSet: HDEVINFO,
2400         ClassGuid: LPGUID,
2401     ) -> BOOL;
SetupDiGetDeviceInfoListDetailA( DeviceInfoSet: HDEVINFO, DeviceInfoSetDetailData: PSP_DEVINFO_LIST_DETAIL_DATA_A, ) -> BOOL2402     pub fn SetupDiGetDeviceInfoListDetailA(
2403         DeviceInfoSet: HDEVINFO,
2404         DeviceInfoSetDetailData: PSP_DEVINFO_LIST_DETAIL_DATA_A,
2405     ) -> BOOL;
SetupDiGetDeviceInfoListDetailW( DeviceInfoSet: HDEVINFO, DeviceInfoSetDetailData: PSP_DEVINFO_LIST_DETAIL_DATA_W, ) -> BOOL2406     pub fn SetupDiGetDeviceInfoListDetailW(
2407         DeviceInfoSet: HDEVINFO,
2408         DeviceInfoSetDetailData: PSP_DEVINFO_LIST_DETAIL_DATA_W,
2409     ) -> BOOL;
2410 }
2411 pub const DICD_GENERATE_ID: DWORD = 0x00000001;
2412 pub const DICD_INHERIT_CLASSDRVS: DWORD = 0x00000002;
2413 extern "system" {
SetupDiCreateDeviceInfoA( DeviceInfoSet: HDEVINFO, DeviceName: PCSTR, ClassGuid: *const GUID, DeviceDescription: PCSTR, hwndParent: HWND, CreationFlags: DWORD, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2414     pub fn SetupDiCreateDeviceInfoA(
2415         DeviceInfoSet: HDEVINFO,
2416         DeviceName: PCSTR,
2417         ClassGuid: *const GUID,
2418         DeviceDescription: PCSTR,
2419         hwndParent: HWND,
2420         CreationFlags: DWORD,
2421         DeviceInfoData: PSP_DEVINFO_DATA,
2422     ) -> BOOL;
SetupDiCreateDeviceInfoW( DeviceInfoSet: HDEVINFO, DeviceName: PCWSTR, ClassGuid: *const GUID, DeviceDescription: PCWSTR, hwndParent: HWND, CreationFlags: DWORD, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2423     pub fn SetupDiCreateDeviceInfoW(
2424         DeviceInfoSet: HDEVINFO,
2425         DeviceName: PCWSTR,
2426         ClassGuid: *const GUID,
2427         DeviceDescription: PCWSTR,
2428         hwndParent: HWND,
2429         CreationFlags: DWORD,
2430         DeviceInfoData: PSP_DEVINFO_DATA,
2431     ) -> BOOL;
2432 }
2433 pub const DIOD_INHERIT_CLASSDRVS: DWORD = 0x00000002;
2434 pub const DIOD_CANCEL_REMOVE: DWORD = 0x00000004;
2435 extern "system" {
SetupDiOpenDeviceInfoA( DeviceInfoSet: HDEVINFO, DeviceInstanceId: PCSTR, hwndParent: HWND, OpenFlags: DWORD, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2436     pub fn SetupDiOpenDeviceInfoA(
2437         DeviceInfoSet: HDEVINFO,
2438         DeviceInstanceId: PCSTR,
2439         hwndParent: HWND,
2440         OpenFlags: DWORD,
2441         DeviceInfoData: PSP_DEVINFO_DATA,
2442     ) -> BOOL;
SetupDiOpenDeviceInfoW( DeviceInfoSet: HDEVINFO, DeviceInstanceId: PCWSTR, hwndParent: HWND, OpenFlags: DWORD, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2443     pub fn SetupDiOpenDeviceInfoW(
2444         DeviceInfoSet: HDEVINFO,
2445         DeviceInstanceId: PCWSTR,
2446         hwndParent: HWND,
2447         OpenFlags: DWORD,
2448         DeviceInfoData: PSP_DEVINFO_DATA,
2449     ) -> BOOL;
SetupDiGetDeviceInstanceIdA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DeviceInstanceId: PSTR, DeviceInstanceIdSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2450     pub fn SetupDiGetDeviceInstanceIdA(
2451         DeviceInfoSet: HDEVINFO,
2452         DeviceInfoData: PSP_DEVINFO_DATA,
2453         DeviceInstanceId: PSTR,
2454         DeviceInstanceIdSize: DWORD,
2455         RequiredSize: PDWORD,
2456     ) -> BOOL;
SetupDiGetDeviceInstanceIdW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DeviceInstanceId: PWSTR, DeviceInstanceIdSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2457     pub fn SetupDiGetDeviceInstanceIdW(
2458         DeviceInfoSet: HDEVINFO,
2459         DeviceInfoData: PSP_DEVINFO_DATA,
2460         DeviceInstanceId: PWSTR,
2461         DeviceInstanceIdSize: DWORD,
2462         RequiredSize: PDWORD,
2463     ) -> BOOL;
SetupDiDeleteDeviceInfo( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2464     pub fn SetupDiDeleteDeviceInfo(
2465         DeviceInfoSet: HDEVINFO,
2466         DeviceInfoData: PSP_DEVINFO_DATA,
2467     ) -> BOOL;
SetupDiEnumDeviceInfo( DeviceInfoSet: HDEVINFO, MemberIndex: DWORD, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2468     pub fn SetupDiEnumDeviceInfo(
2469         DeviceInfoSet: HDEVINFO,
2470         MemberIndex: DWORD,
2471         DeviceInfoData: PSP_DEVINFO_DATA,
2472     ) -> BOOL;
SetupDiDestroyDeviceInfoList( DeviceInfoSet: HDEVINFO, ) -> BOOL2473     pub fn SetupDiDestroyDeviceInfoList(
2474         DeviceInfoSet: HDEVINFO,
2475     ) -> BOOL;
SetupDiEnumDeviceInterfaces( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, InterfaceClassGuid: *const GUID, MemberIndex: DWORD, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, ) -> BOOL2476     pub fn SetupDiEnumDeviceInterfaces(
2477         DeviceInfoSet: HDEVINFO,
2478         DeviceInfoData: PSP_DEVINFO_DATA,
2479         InterfaceClassGuid: *const GUID,
2480         MemberIndex: DWORD,
2481         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2482     ) -> BOOL;
SetupDiCreateDeviceInterfaceA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, InterfaceClassGuid: *const GUID, ReferenceString: PCSTR, CreationFlags: DWORD, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, ) -> BOOL2483     pub fn SetupDiCreateDeviceInterfaceA(
2484         DeviceInfoSet: HDEVINFO,
2485         DeviceInfoData: PSP_DEVINFO_DATA,
2486         InterfaceClassGuid: *const GUID,
2487         ReferenceString: PCSTR,
2488         CreationFlags: DWORD,
2489         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2490     ) -> BOOL;
SetupDiCreateDeviceInterfaceW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, InterfaceClassGuid: *const GUID, ReferenceString: PCWSTR, CreationFlags: DWORD, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, ) -> BOOL2491     pub fn SetupDiCreateDeviceInterfaceW(
2492         DeviceInfoSet: HDEVINFO,
2493         DeviceInfoData: PSP_DEVINFO_DATA,
2494         InterfaceClassGuid: *const GUID,
2495         ReferenceString: PCWSTR,
2496         CreationFlags: DWORD,
2497         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2498     ) -> BOOL;
2499 }
2500 pub const DIODI_NO_ADD: DWORD = 0x00000001;
2501 extern "system" {
SetupDiOpenDeviceInterfaceA( DeviceInfoSet: HDEVINFO, DevicePath: PCSTR, OpenFlags: DWORD, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, ) -> BOOL2502     pub fn SetupDiOpenDeviceInterfaceA(
2503         DeviceInfoSet: HDEVINFO,
2504         DevicePath: PCSTR,
2505         OpenFlags: DWORD,
2506         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2507     ) -> BOOL;
SetupDiOpenDeviceInterfaceW( DeviceInfoSet: HDEVINFO, DevicePath: PCWSTR, OpenFlags: DWORD, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, ) -> BOOL2508     pub fn SetupDiOpenDeviceInterfaceW(
2509         DeviceInfoSet: HDEVINFO,
2510         DevicePath: PCWSTR,
2511         OpenFlags: DWORD,
2512         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2513     ) -> BOOL;
SetupDiGetDeviceInterfaceAlias( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, AliasInterfaceClassGuid: *const GUID, AliasDeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, ) -> BOOL2514     pub fn SetupDiGetDeviceInterfaceAlias(
2515         DeviceInfoSet: HDEVINFO,
2516         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2517         AliasInterfaceClassGuid: *const GUID,
2518         AliasDeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2519     ) -> BOOL;
SetupDiDeleteDeviceInterfaceData( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, ) -> BOOL2520     pub fn SetupDiDeleteDeviceInterfaceData(
2521         DeviceInfoSet: HDEVINFO,
2522         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2523     ) -> BOOL;
SetupDiRemoveDeviceInterface( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, ) -> BOOL2524     pub fn SetupDiRemoveDeviceInterface(
2525         DeviceInfoSet: HDEVINFO,
2526         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2527     ) -> BOOL;
SetupDiGetDeviceInterfaceDetailA( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, DeviceInterfaceDetailData: PSP_DEVICE_INTERFACE_DETAIL_DATA_A, DeviceInterfaceDetailDataSize: DWORD, RequiredSize: PDWORD, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2528     pub fn SetupDiGetDeviceInterfaceDetailA(
2529         DeviceInfoSet: HDEVINFO,
2530         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2531         DeviceInterfaceDetailData: PSP_DEVICE_INTERFACE_DETAIL_DATA_A,
2532         DeviceInterfaceDetailDataSize: DWORD,
2533         RequiredSize: PDWORD,
2534         DeviceInfoData: PSP_DEVINFO_DATA,
2535     ) -> BOOL;
SetupDiGetDeviceInterfaceDetailW( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, DeviceInterfaceDetailData: PSP_DEVICE_INTERFACE_DETAIL_DATA_W, DeviceInterfaceDetailDataSize: DWORD, RequiredSize: PDWORD, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2536     pub fn SetupDiGetDeviceInterfaceDetailW(
2537         DeviceInfoSet: HDEVINFO,
2538         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2539         DeviceInterfaceDetailData: PSP_DEVICE_INTERFACE_DETAIL_DATA_W,
2540         DeviceInterfaceDetailDataSize: DWORD,
2541         RequiredSize: PDWORD,
2542         DeviceInfoData: PSP_DEVINFO_DATA,
2543     ) -> BOOL;
SetupDiInstallDeviceInterfaces( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2544     pub fn SetupDiInstallDeviceInterfaces(
2545         DeviceInfoSet: HDEVINFO,
2546         DeviceInfoData: PSP_DEVINFO_DATA,
2547     ) -> BOOL;
SetupDiSetDeviceInterfaceDefault( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Flags: DWORD, Reserved: PVOID, ) -> BOOL2548     pub fn SetupDiSetDeviceInterfaceDefault(
2549         DeviceInfoSet: HDEVINFO,
2550         DeviceInfoData: PSP_DEVINFO_DATA,
2551         Flags: DWORD,
2552         Reserved: PVOID,
2553     ) -> BOOL;
2554 }
2555 pub const SPRDI_FIND_DUPS: DWORD = 0x00000001;
2556 extern "system" {
SetupDiRegisterDeviceInfo( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Flags: DWORD, CompareProc: PSP_DETSIG_CMPPROC, CompareContext: PVOID, DupDeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2557     pub fn SetupDiRegisterDeviceInfo(
2558         DeviceInfoSet: HDEVINFO,
2559         DeviceInfoData: PSP_DEVINFO_DATA,
2560         Flags: DWORD,
2561         CompareProc: PSP_DETSIG_CMPPROC,
2562         CompareContext: PVOID,
2563         DupDeviceInfoData: PSP_DEVINFO_DATA,
2564     ) -> BOOL;
2565 }
2566 pub const SPDIT_NODRIVER: DWORD = 0x00000000;
2567 pub const SPDIT_CLASSDRIVER: DWORD = 0x00000001;
2568 pub const SPDIT_COMPATDRIVER: DWORD = 0x00000002;
2569 extern "system" {
SetupDiBuildDriverInfoList( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverType: DWORD, ) -> BOOL2570     pub fn SetupDiBuildDriverInfoList(
2571         DeviceInfoSet: HDEVINFO,
2572         DeviceInfoData: PSP_DEVINFO_DATA,
2573         DriverType: DWORD,
2574     ) -> BOOL;
SetupDiCancelDriverInfoSearch( DeviceInfoSet: HDEVINFO, ) -> BOOL2575     pub fn SetupDiCancelDriverInfoSearch(
2576         DeviceInfoSet: HDEVINFO,
2577     ) -> BOOL;
SetupDiEnumDriverInfoA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverType: DWORD, MemberIndex: DWORD, DriverInfoData: PSP_DRVINFO_DATA_A, ) -> BOOL2578     pub fn SetupDiEnumDriverInfoA(
2579         DeviceInfoSet: HDEVINFO,
2580         DeviceInfoData: PSP_DEVINFO_DATA,
2581         DriverType: DWORD,
2582         MemberIndex: DWORD,
2583         DriverInfoData: PSP_DRVINFO_DATA_A,
2584     ) -> BOOL;
SetupDiEnumDriverInfoW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverType: DWORD, MemberIndex: DWORD, DriverInfoData: PSP_DRVINFO_DATA_W, ) -> BOOL2585     pub fn SetupDiEnumDriverInfoW(
2586         DeviceInfoSet: HDEVINFO,
2587         DeviceInfoData: PSP_DEVINFO_DATA,
2588         DriverType: DWORD,
2589         MemberIndex: DWORD,
2590         DriverInfoData: PSP_DRVINFO_DATA_W,
2591     ) -> BOOL;
SetupDiGetSelectedDriverA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_A, ) -> BOOL2592     pub fn SetupDiGetSelectedDriverA(
2593         DeviceInfoSet: HDEVINFO,
2594         DeviceInfoData: PSP_DEVINFO_DATA,
2595         DriverInfoData: PSP_DRVINFO_DATA_A,
2596     ) -> BOOL;
SetupDiGetSelectedDriverW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_W, ) -> BOOL2597     pub fn SetupDiGetSelectedDriverW(
2598         DeviceInfoSet: HDEVINFO,
2599         DeviceInfoData: PSP_DEVINFO_DATA,
2600         DriverInfoData: PSP_DRVINFO_DATA_W,
2601     ) -> BOOL;
SetupDiSetSelectedDriverA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_A, ) -> BOOL2602     pub fn SetupDiSetSelectedDriverA(
2603         DeviceInfoSet: HDEVINFO,
2604         DeviceInfoData: PSP_DEVINFO_DATA,
2605         DriverInfoData: PSP_DRVINFO_DATA_A,
2606     ) -> BOOL;
SetupDiSetSelectedDriverW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_W, ) -> BOOL2607     pub fn SetupDiSetSelectedDriverW(
2608         DeviceInfoSet: HDEVINFO,
2609         DeviceInfoData: PSP_DEVINFO_DATA,
2610         DriverInfoData: PSP_DRVINFO_DATA_W,
2611     ) -> BOOL;
SetupDiGetDriverInfoDetailA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_A, DriverInfoDetailData: PSP_DRVINFO_DETAIL_DATA_A, DriverInfoDetailDataSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2612     pub fn SetupDiGetDriverInfoDetailA(
2613         DeviceInfoSet: HDEVINFO,
2614         DeviceInfoData: PSP_DEVINFO_DATA,
2615         DriverInfoData: PSP_DRVINFO_DATA_A,
2616         DriverInfoDetailData: PSP_DRVINFO_DETAIL_DATA_A,
2617         DriverInfoDetailDataSize: DWORD,
2618         RequiredSize: PDWORD,
2619     ) -> BOOL;
SetupDiGetDriverInfoDetailW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_W, DriverInfoDetailData: PSP_DRVINFO_DETAIL_DATA_W, DriverInfoDetailDataSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2620     pub fn SetupDiGetDriverInfoDetailW(
2621         DeviceInfoSet: HDEVINFO,
2622         DeviceInfoData: PSP_DEVINFO_DATA,
2623         DriverInfoData: PSP_DRVINFO_DATA_W,
2624         DriverInfoDetailData: PSP_DRVINFO_DETAIL_DATA_W,
2625         DriverInfoDetailDataSize: DWORD,
2626         RequiredSize: PDWORD,
2627     ) -> BOOL;
SetupDiDestroyDriverInfoList( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverType: DWORD, ) -> BOOL2628     pub fn SetupDiDestroyDriverInfoList(
2629         DeviceInfoSet: HDEVINFO,
2630         DeviceInfoData: PSP_DEVINFO_DATA,
2631         DriverType: DWORD,
2632     ) -> BOOL;
2633 }
2634 pub const DIGCF_DEFAULT: DWORD = 0x00000001;
2635 pub const DIGCF_PRESENT: DWORD = 0x00000002;
2636 pub const DIGCF_ALLCLASSES: DWORD = 0x00000004;
2637 pub const DIGCF_PROFILE: DWORD = 0x00000008;
2638 pub const DIGCF_DEVICEINTERFACE: DWORD = 0x00000010;
2639 extern "system" {
SetupDiGetClassDevsA( ClassGuid: *const GUID, Enumerator: PCSTR, hwndParent: HWND, Flags: DWORD, ) -> HDEVINFO2640     pub fn SetupDiGetClassDevsA(
2641         ClassGuid: *const GUID,
2642         Enumerator: PCSTR,
2643         hwndParent: HWND,
2644         Flags: DWORD,
2645     ) -> HDEVINFO;
SetupDiGetClassDevsW( ClassGuid: *const GUID, Enumerator: PCWSTR, hwndParent: HWND, Flags: DWORD, ) -> HDEVINFO2646     pub fn SetupDiGetClassDevsW(
2647         ClassGuid: *const GUID,
2648         Enumerator: PCWSTR,
2649         hwndParent: HWND,
2650         Flags: DWORD,
2651     ) -> HDEVINFO;
SetupDiGetClassDevsExA( ClassGuid: *const GUID, Enumerator: PCSTR, hwndParent: HWND, Flags: DWORD, DeviceInfoSet: HDEVINFO, MachineName: PCSTR, Reserved: PVOID, ) -> HDEVINFO2652     pub fn SetupDiGetClassDevsExA(
2653         ClassGuid: *const GUID,
2654         Enumerator: PCSTR,
2655         hwndParent: HWND,
2656         Flags: DWORD,
2657         DeviceInfoSet: HDEVINFO,
2658         MachineName: PCSTR,
2659         Reserved: PVOID,
2660     ) -> HDEVINFO;
SetupDiGetClassDevsExW( ClassGuid: *const GUID, Enumerator: PCWSTR, hwndParent: HWND, Flags: DWORD, DeviceInfoSet: HDEVINFO, MachineName: PCWSTR, Reserved: PVOID, ) -> HDEVINFO2661     pub fn SetupDiGetClassDevsExW(
2662         ClassGuid: *const GUID,
2663         Enumerator: PCWSTR,
2664         hwndParent: HWND,
2665         Flags: DWORD,
2666         DeviceInfoSet: HDEVINFO,
2667         MachineName: PCWSTR,
2668         Reserved: PVOID,
2669     ) -> HDEVINFO;
SetupDiGetINFClassA( InfName: PCSTR, ClassGuid: LPGUID, ClassName: PSTR, ClassNameSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2670     pub fn SetupDiGetINFClassA(
2671         InfName: PCSTR,
2672         ClassGuid: LPGUID,
2673         ClassName: PSTR,
2674         ClassNameSize: DWORD,
2675         RequiredSize: PDWORD,
2676     ) -> BOOL;
SetupDiGetINFClassW( InfName: PCWSTR, ClassGuid: LPGUID, ClassName: PWSTR, ClassNameSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2677     pub fn SetupDiGetINFClassW(
2678         InfName: PCWSTR,
2679         ClassGuid: LPGUID,
2680         ClassName: PWSTR,
2681         ClassNameSize: DWORD,
2682         RequiredSize: PDWORD,
2683     ) -> BOOL;
2684 }
2685 pub const DIBCI_NOINSTALLCLASS: DWORD = 0x00000001;
2686 pub const DIBCI_NODISPLAYCLASS: DWORD = 0x00000002;
2687 extern "system" {
SetupDiBuildClassInfoList( Flags: DWORD, ClassGuidList: LPGUID, ClassGuidListSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2688     pub fn SetupDiBuildClassInfoList(
2689         Flags: DWORD,
2690         ClassGuidList: LPGUID,
2691         ClassGuidListSize: DWORD,
2692         RequiredSize: PDWORD,
2693     ) -> BOOL;
SetupDiBuildClassInfoListExA( Flags: DWORD, ClassGuidList: LPGUID, ClassGuidListSize: DWORD, RequiredSize: PDWORD, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL2694     pub fn SetupDiBuildClassInfoListExA(
2695         Flags: DWORD,
2696         ClassGuidList: LPGUID,
2697         ClassGuidListSize: DWORD,
2698         RequiredSize: PDWORD,
2699         MachineName: PCSTR,
2700         Reserved: PVOID,
2701     ) -> BOOL;
SetupDiBuildClassInfoListExW( Flags: DWORD, ClassGuidList: LPGUID, ClassGuidListSize: DWORD, RequiredSize: PDWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL2702     pub fn SetupDiBuildClassInfoListExW(
2703         Flags: DWORD,
2704         ClassGuidList: LPGUID,
2705         ClassGuidListSize: DWORD,
2706         RequiredSize: PDWORD,
2707         MachineName: PCWSTR,
2708         Reserved: PVOID,
2709     ) -> BOOL;
SetupDiGetClassDescriptionA( ClassGuid: *const GUID, ClassDescription: PSTR, ClassDescriptionSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2710     pub fn SetupDiGetClassDescriptionA(
2711         ClassGuid: *const GUID,
2712         ClassDescription: PSTR,
2713         ClassDescriptionSize: DWORD,
2714         RequiredSize: PDWORD,
2715     ) -> BOOL;
SetupDiGetClassDescriptionW( ClassGuid: *const GUID, ClassDescription: PWSTR, ClassDescriptionSize: DWORD, RequiredSize: PDWORD, ) -> BOOL2716     pub fn SetupDiGetClassDescriptionW(
2717         ClassGuid: *const GUID,
2718         ClassDescription: PWSTR,
2719         ClassDescriptionSize: DWORD,
2720         RequiredSize: PDWORD,
2721     ) -> BOOL;
SetupDiGetClassDescriptionExA( ClassGuid: *const GUID, ClassDescription: PSTR, ClassDescriptionSize: DWORD, RequiredSize: PDWORD, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL2722     pub fn SetupDiGetClassDescriptionExA(
2723         ClassGuid: *const GUID,
2724         ClassDescription: PSTR,
2725         ClassDescriptionSize: DWORD,
2726         RequiredSize: PDWORD,
2727         MachineName: PCSTR,
2728         Reserved: PVOID,
2729     ) -> BOOL;
SetupDiGetClassDescriptionExW( ClassGuid: *const GUID, ClassDescription: PWSTR, ClassDescriptionSize: DWORD, RequiredSize: PDWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL2730     pub fn SetupDiGetClassDescriptionExW(
2731         ClassGuid: *const GUID,
2732         ClassDescription: PWSTR,
2733         ClassDescriptionSize: DWORD,
2734         RequiredSize: PDWORD,
2735         MachineName: PCWSTR,
2736         Reserved: PVOID,
2737     ) -> BOOL;
SetupDiCallClassInstaller( InstallFunction: DI_FUNCTION, DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2738     pub fn SetupDiCallClassInstaller(
2739         InstallFunction: DI_FUNCTION,
2740         DeviceInfoSet: HDEVINFO,
2741         DeviceInfoData: PSP_DEVINFO_DATA,
2742     ) -> BOOL;
SetupDiSelectDevice( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2743     pub fn SetupDiSelectDevice(
2744         DeviceInfoSet: HDEVINFO,
2745         DeviceInfoData: PSP_DEVINFO_DATA,
2746     ) -> BOOL;
SetupDiSelectBestCompatDrv( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2747     pub fn SetupDiSelectBestCompatDrv(
2748         DeviceInfoSet: HDEVINFO,
2749         DeviceInfoData: PSP_DEVINFO_DATA,
2750     ) -> BOOL;
SetupDiInstallDevice( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2751     pub fn SetupDiInstallDevice(
2752         DeviceInfoSet: HDEVINFO,
2753         DeviceInfoData: PSP_DEVINFO_DATA,
2754     ) -> BOOL;
SetupDiInstallDriverFiles( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2755     pub fn SetupDiInstallDriverFiles(
2756         DeviceInfoSet: HDEVINFO,
2757         DeviceInfoData: PSP_DEVINFO_DATA,
2758     ) -> BOOL;
SetupDiRegisterCoDeviceInstallers( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2759     pub fn SetupDiRegisterCoDeviceInstallers(
2760         DeviceInfoSet: HDEVINFO,
2761         DeviceInfoData: PSP_DEVINFO_DATA,
2762     ) -> BOOL;
SetupDiRemoveDevice( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2763     pub fn SetupDiRemoveDevice(
2764         DeviceInfoSet: HDEVINFO,
2765         DeviceInfoData: PSP_DEVINFO_DATA,
2766     ) -> BOOL;
SetupDiUnremoveDevice( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2767     pub fn SetupDiUnremoveDevice(
2768         DeviceInfoSet: HDEVINFO,
2769         DeviceInfoData: PSP_DEVINFO_DATA,
2770     ) -> BOOL;
SetupDiRestartDevices( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2771     pub fn SetupDiRestartDevices(
2772         DeviceInfoSet: HDEVINFO,
2773         DeviceInfoData: PSP_DEVINFO_DATA,
2774     ) -> BOOL;
SetupDiChangeState( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL2775     pub fn SetupDiChangeState(
2776         DeviceInfoSet: HDEVINFO,
2777         DeviceInfoData: PSP_DEVINFO_DATA,
2778     ) -> BOOL;
SetupDiInstallClassA( hwndParent: HWND, InfFileName: PCSTR, Flags: DWORD, FileQueue: HSPFILEQ, ) -> BOOL2779     pub fn SetupDiInstallClassA(
2780         hwndParent: HWND,
2781         InfFileName: PCSTR,
2782         Flags: DWORD,
2783         FileQueue: HSPFILEQ,
2784     ) -> BOOL;
SetupDiInstallClassW( hwndParent: HWND, InfFileName: PCWSTR, Flags: DWORD, FileQueue: HSPFILEQ, ) -> BOOL2785     pub fn SetupDiInstallClassW(
2786         hwndParent: HWND,
2787         InfFileName: PCWSTR,
2788         Flags: DWORD,
2789         FileQueue: HSPFILEQ,
2790     ) -> BOOL;
SetupDiInstallClassExA( hwndParent: HWND, InfFileName: PCSTR, Flags: DWORD, FileQueue: HSPFILEQ, InterfaceClassGuid: *const GUID, Reserved1: PVOID, Reserved2: PVOID, ) -> BOOL2791     pub fn SetupDiInstallClassExA(
2792         hwndParent: HWND,
2793         InfFileName: PCSTR,
2794         Flags: DWORD,
2795         FileQueue: HSPFILEQ,
2796         InterfaceClassGuid: *const GUID,
2797         Reserved1: PVOID,
2798         Reserved2: PVOID,
2799     ) -> BOOL;
SetupDiInstallClassExW( hwndParent: HWND, InfFileName: PCWSTR, Flags: DWORD, FileQueue: HSPFILEQ, InterfaceClassGuid: *const GUID, Reserved1: PVOID, Reserved2: PVOID, ) -> BOOL2800     pub fn SetupDiInstallClassExW(
2801         hwndParent: HWND,
2802         InfFileName: PCWSTR,
2803         Flags: DWORD,
2804         FileQueue: HSPFILEQ,
2805         InterfaceClassGuid: *const GUID,
2806         Reserved1: PVOID,
2807         Reserved2: PVOID,
2808     ) -> BOOL;
SetupDiOpenClassRegKey( ClassGuid: *const GUID, samDesired: REGSAM, ) -> HKEY2809     pub fn SetupDiOpenClassRegKey(
2810         ClassGuid: *const GUID,
2811         samDesired: REGSAM,
2812     ) -> HKEY;
2813 }
2814 pub const DIOCR_INSTALLER: DWORD = 0x00000001;
2815 pub const DIOCR_INTERFACE: DWORD = 0x00000002;
2816 extern "system" {
SetupDiOpenClassRegKeyExA( ClassGuid: *const GUID, samDesired: REGSAM, Flags: DWORD, MachineName: PCSTR, Reserved: PVOID, ) -> HKEY2817     pub fn SetupDiOpenClassRegKeyExA(
2818         ClassGuid: *const GUID,
2819         samDesired: REGSAM,
2820         Flags: DWORD,
2821         MachineName: PCSTR,
2822         Reserved: PVOID,
2823     ) -> HKEY;
SetupDiOpenClassRegKeyExW( ClassGuid: *const GUID, samDesired: REGSAM, Flags: DWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> HKEY2824     pub fn SetupDiOpenClassRegKeyExW(
2825         ClassGuid: *const GUID,
2826         samDesired: REGSAM,
2827         Flags: DWORD,
2828         MachineName: PCWSTR,
2829         Reserved: PVOID,
2830     ) -> HKEY;
SetupDiCreateDeviceInterfaceRegKeyA( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, Reserved: DWORD, samDesired: REGSAM, InfHandle: HINF, InfSectionName: PCSTR, ) -> HKEY2831     pub fn SetupDiCreateDeviceInterfaceRegKeyA(
2832         DeviceInfoSet: HDEVINFO,
2833         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2834         Reserved: DWORD,
2835         samDesired: REGSAM,
2836         InfHandle: HINF,
2837         InfSectionName: PCSTR,
2838     ) -> HKEY;
SetupDiCreateDeviceInterfaceRegKeyW( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, Reserved: DWORD, samDesired: REGSAM, InfHandle: HINF, InfSectionName: PCWSTR, ) -> HKEY2839     pub fn SetupDiCreateDeviceInterfaceRegKeyW(
2840         DeviceInfoSet: HDEVINFO,
2841         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2842         Reserved: DWORD,
2843         samDesired: REGSAM,
2844         InfHandle: HINF,
2845         InfSectionName: PCWSTR,
2846     ) -> HKEY;
SetupDiOpenDeviceInterfaceRegKey( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, Reserved: DWORD, samDesired: REGSAM, ) -> HKEY2847     pub fn SetupDiOpenDeviceInterfaceRegKey(
2848         DeviceInfoSet: HDEVINFO,
2849         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2850         Reserved: DWORD,
2851         samDesired: REGSAM,
2852     ) -> HKEY;
SetupDiDeleteDeviceInterfaceRegKey( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, Reserved: DWORD, ) -> BOOL2853     pub fn SetupDiDeleteDeviceInterfaceRegKey(
2854         DeviceInfoSet: HDEVINFO,
2855         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2856         Reserved: DWORD,
2857     ) -> BOOL;
2858 }
2859 pub const DIREG_DEV: DWORD = 0x00000001;
2860 pub const DIREG_DRV: DWORD = 0x00000002;
2861 pub const DIREG_BOTH: DWORD = 0x00000004;
2862 extern "system" {
SetupDiCreateDevRegKeyA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Scope: DWORD, HwProfile: DWORD, KeyType: DWORD, InfHandle: HINF, InfSectionName: PCSTR, ) -> HKEY2863     pub fn SetupDiCreateDevRegKeyA(
2864         DeviceInfoSet: HDEVINFO,
2865         DeviceInfoData: PSP_DEVINFO_DATA,
2866         Scope: DWORD,
2867         HwProfile: DWORD,
2868         KeyType: DWORD,
2869         InfHandle: HINF,
2870         InfSectionName: PCSTR,
2871     ) -> HKEY;
SetupDiCreateDevRegKeyW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Scope: DWORD, HwProfile: DWORD, KeyType: DWORD, InfHandle: HINF, InfSectionName: PCWSTR, ) -> HKEY2872     pub fn SetupDiCreateDevRegKeyW(
2873         DeviceInfoSet: HDEVINFO,
2874         DeviceInfoData: PSP_DEVINFO_DATA,
2875         Scope: DWORD,
2876         HwProfile: DWORD,
2877         KeyType: DWORD,
2878         InfHandle: HINF,
2879         InfSectionName: PCWSTR,
2880     ) -> HKEY;
SetupDiOpenDevRegKey( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Scope: DWORD, HwProfile: DWORD, KeyType: DWORD, samDesired: REGSAM, ) -> HKEY2881     pub fn SetupDiOpenDevRegKey(
2882         DeviceInfoSet: HDEVINFO,
2883         DeviceInfoData: PSP_DEVINFO_DATA,
2884         Scope: DWORD,
2885         HwProfile: DWORD,
2886         KeyType: DWORD,
2887         samDesired: REGSAM,
2888     ) -> HKEY;
SetupDiDeleteDevRegKey( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Scope: DWORD, HwProfile: DWORD, KeyType: DWORD, ) -> BOOL2889     pub fn SetupDiDeleteDevRegKey(
2890         DeviceInfoSet: HDEVINFO,
2891         DeviceInfoData: PSP_DEVINFO_DATA,
2892         Scope: DWORD,
2893         HwProfile: DWORD,
2894         KeyType: DWORD,
2895     ) -> BOOL;
SetupDiGetHwProfileList( HwProfileList: PDWORD, HwProfileListSize: DWORD, RequiredSize: PDWORD, CurrentlyActiveIndex: PDWORD, ) -> BOOL2896     pub fn SetupDiGetHwProfileList(
2897         HwProfileList: PDWORD,
2898         HwProfileListSize: DWORD,
2899         RequiredSize: PDWORD,
2900         CurrentlyActiveIndex: PDWORD,
2901     ) -> BOOL;
SetupDiGetHwProfileListExA( HwProfileList: PDWORD, HwProfileListSize: DWORD, RequiredSize: PDWORD, CurrentlyActiveIndex: PDWORD, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL2902     pub fn SetupDiGetHwProfileListExA(
2903         HwProfileList: PDWORD,
2904         HwProfileListSize: DWORD,
2905         RequiredSize: PDWORD,
2906         CurrentlyActiveIndex: PDWORD,
2907         MachineName: PCSTR,
2908         Reserved: PVOID,
2909     ) -> BOOL;
SetupDiGetHwProfileListExW( HwProfileList: PDWORD, HwProfileListSize: DWORD, RequiredSize: PDWORD, CurrentlyActiveIndex: PDWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL2910     pub fn SetupDiGetHwProfileListExW(
2911         HwProfileList: PDWORD,
2912         HwProfileListSize: DWORD,
2913         RequiredSize: PDWORD,
2914         CurrentlyActiveIndex: PDWORD,
2915         MachineName: PCWSTR,
2916         Reserved: PVOID,
2917     ) -> BOOL;
SetupDiGetDevicePropertyKeys( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, PropertyKeyArray: *mut DEVPROPKEY, PropertyKeyCount: DWORD, RequiredPropertyKeyCount: PDWORD, Flags: DWORD, ) -> BOOL2918     pub fn SetupDiGetDevicePropertyKeys(
2919         DeviceInfoSet: HDEVINFO,
2920         DeviceInfoData: PSP_DEVINFO_DATA,
2921         PropertyKeyArray: *mut DEVPROPKEY,
2922         PropertyKeyCount: DWORD,
2923         RequiredPropertyKeyCount: PDWORD,
2924         Flags: DWORD,
2925     ) -> BOOL;
SetupDiGetDevicePropertyW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, PropertyKey: *const DEVPROPKEY, PropertyType: *mut DEVPROPTYPE, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, Flags: DWORD, ) -> BOOL2926     pub fn SetupDiGetDevicePropertyW(
2927         DeviceInfoSet: HDEVINFO,
2928         DeviceInfoData: PSP_DEVINFO_DATA,
2929         PropertyKey: *const DEVPROPKEY,
2930         PropertyType: *mut DEVPROPTYPE,
2931         PropertyBuffer: PBYTE,
2932         PropertyBufferSize: DWORD,
2933         RequiredSize: PDWORD,
2934         Flags: DWORD,
2935     ) -> BOOL;
SetupDiSetDevicePropertyW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, PropertyKey: *const DEVPROPKEY, PropertyType: DEVPROPTYPE, PropertyBuffer: *const BYTE, PropertyBufferSize: DWORD, Flags: DWORD, ) -> BOOL2936     pub fn SetupDiSetDevicePropertyW(
2937         DeviceInfoSet: HDEVINFO,
2938         DeviceInfoData: PSP_DEVINFO_DATA,
2939         PropertyKey: *const DEVPROPKEY,
2940         PropertyType: DEVPROPTYPE,
2941         PropertyBuffer: *const BYTE,
2942         PropertyBufferSize: DWORD,
2943         Flags: DWORD,
2944     ) -> BOOL;
SetupDiGetDeviceInterfacePropertyKeys( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, PropertyKeyArray: *mut DEVPROPKEY, PropertyKeyCount: DWORD, RequiredPropertyKeyCount: PDWORD, Flags: DWORD, ) -> BOOL2945     pub fn SetupDiGetDeviceInterfacePropertyKeys(
2946         DeviceInfoSet: HDEVINFO,
2947         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2948         PropertyKeyArray: *mut DEVPROPKEY,
2949         PropertyKeyCount: DWORD,
2950         RequiredPropertyKeyCount: PDWORD,
2951         Flags: DWORD,
2952     ) -> BOOL;
SetupDiGetDeviceInterfacePropertyW( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, PropertyKey: *const DEVPROPKEY, PropertyType: *mut DEVPROPTYPE, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, Flags: DWORD, ) -> BOOL2953     pub fn SetupDiGetDeviceInterfacePropertyW(
2954         DeviceInfoSet: HDEVINFO,
2955         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2956         PropertyKey: *const DEVPROPKEY,
2957         PropertyType: *mut DEVPROPTYPE,
2958         PropertyBuffer: PBYTE,
2959         PropertyBufferSize: DWORD,
2960         RequiredSize: PDWORD,
2961         Flags: DWORD,
2962     ) -> BOOL;
SetupDiSetDeviceInterfacePropertyW( DeviceInfoSet: HDEVINFO, DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA, PropertyKey: *const DEVPROPKEY, PropertyType: DEVPROPTYPE, PropertyBuffer: *const BYTE, PropertyBufferSize: DWORD, Flags: DWORD, ) -> BOOL2963     pub fn SetupDiSetDeviceInterfacePropertyW(
2964         DeviceInfoSet: HDEVINFO,
2965         DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
2966         PropertyKey: *const DEVPROPKEY,
2967         PropertyType: DEVPROPTYPE,
2968         PropertyBuffer: *const BYTE,
2969         PropertyBufferSize: DWORD,
2970         Flags: DWORD,
2971     ) -> BOOL;
2972 }
2973 pub const DICLASSPROP_INSTALLER: DWORD = 0x00000001;
2974 pub const DICLASSPROP_INTERFACE: DWORD = 0x00000002;
2975 extern "system" {
SetupDiGetClassPropertyKeys( ClassGuid: *const GUID, PropertyKeyArray: *mut DEVPROPKEY, PropertyKeyCount: DWORD, RequiredPropertyKeyCount: PDWORD, Flags: DWORD, ) -> BOOL2976     pub fn SetupDiGetClassPropertyKeys(
2977         ClassGuid: *const GUID,
2978         PropertyKeyArray: *mut DEVPROPKEY,
2979         PropertyKeyCount: DWORD,
2980         RequiredPropertyKeyCount: PDWORD,
2981         Flags: DWORD,
2982     ) -> BOOL;
SetupDiGetClassPropertyKeysExW( ClassGuid: *const GUID, PropertyKeyArray: *mut DEVPROPKEY, PropertyKeyCount: DWORD, RequiredPropertyKeyCount: PDWORD, Flags: DWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL2983     pub fn SetupDiGetClassPropertyKeysExW(
2984         ClassGuid: *const GUID,
2985         PropertyKeyArray: *mut DEVPROPKEY,
2986         PropertyKeyCount: DWORD,
2987         RequiredPropertyKeyCount: PDWORD,
2988         Flags: DWORD,
2989         MachineName: PCWSTR,
2990         Reserved: PVOID,
2991     ) -> BOOL;
SetupDiGetClassPropertyW( ClassGuid: *const GUID, PropertyKey: *const DEVPROPKEY, PropertyType: *mut DEVPROPTYPE, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, Flags: DWORD, ) -> BOOL2992     pub fn SetupDiGetClassPropertyW(
2993         ClassGuid: *const GUID,
2994         PropertyKey: *const DEVPROPKEY,
2995         PropertyType: *mut DEVPROPTYPE,
2996         PropertyBuffer: PBYTE,
2997         PropertyBufferSize: DWORD,
2998         RequiredSize: PDWORD,
2999         Flags: DWORD,
3000     ) -> BOOL;
SetupDiGetClassPropertyExW( ClassGuid: *const GUID, PropertyKey: *const DEVPROPKEY, PropertyType: *mut DEVPROPTYPE, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, Flags: DWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL3001     pub fn SetupDiGetClassPropertyExW(
3002         ClassGuid: *const GUID,
3003         PropertyKey: *const DEVPROPKEY,
3004         PropertyType: *mut DEVPROPTYPE,
3005         PropertyBuffer: PBYTE,
3006         PropertyBufferSize: DWORD,
3007         RequiredSize: PDWORD,
3008         Flags: DWORD,
3009         MachineName: PCWSTR,
3010         Reserved: PVOID,
3011     ) -> BOOL;
SetupDiSetClassPropertyW( ClassGuid: *const GUID, PropertyKey: *const DEVPROPKEY, PropertyType: DEVPROPTYPE, PropertyBuffer: *const BYTE, PropertyBufferSize: DWORD, Flags: DWORD, ) -> BOOL3012     pub fn SetupDiSetClassPropertyW(
3013         ClassGuid: *const GUID,
3014         PropertyKey: *const DEVPROPKEY,
3015         PropertyType: DEVPROPTYPE,
3016         PropertyBuffer: *const BYTE,
3017         PropertyBufferSize: DWORD,
3018         Flags: DWORD,
3019     ) -> BOOL;
SetupDiSetClassPropertyExW( ClassGuid: *const GUID, PropertyKey: *const DEVPROPKEY, PropertyType: DEVPROPTYPE, PropertyBuffer: *const BYTE, PropertyBufferSize: DWORD, Flags: DWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL3020     pub fn SetupDiSetClassPropertyExW(
3021         ClassGuid: *const GUID,
3022         PropertyKey: *const DEVPROPKEY,
3023         PropertyType: DEVPROPTYPE,
3024         PropertyBuffer: *const BYTE,
3025         PropertyBufferSize: DWORD,
3026         Flags: DWORD,
3027         MachineName: PCWSTR,
3028         Reserved: PVOID,
3029     ) -> BOOL;
3030 }
3031 pub const SPDRP_DEVICEDESC: DWORD = 0x00000000;
3032 pub const SPDRP_HARDWAREID: DWORD = 0x00000001;
3033 pub const SPDRP_COMPATIBLEIDS: DWORD = 0x00000002;
3034 pub const SPDRP_UNUSED0: DWORD = 0x00000003;
3035 pub const SPDRP_SERVICE: DWORD = 0x00000004;
3036 pub const SPDRP_UNUSED1: DWORD = 0x00000005;
3037 pub const SPDRP_UNUSED2: DWORD = 0x00000006;
3038 pub const SPDRP_CLASS: DWORD = 0x00000007;
3039 pub const SPDRP_CLASSGUID: DWORD = 0x00000008;
3040 pub const SPDRP_DRIVER: DWORD = 0x00000009;
3041 pub const SPDRP_CONFIGFLAGS: DWORD = 0x0000000A;
3042 pub const SPDRP_MFG: DWORD = 0x0000000B;
3043 pub const SPDRP_FRIENDLYNAME: DWORD = 0x0000000C;
3044 pub const SPDRP_LOCATION_INFORMATION: DWORD = 0x0000000D;
3045 pub const SPDRP_PHYSICAL_DEVICE_OBJECT_NAME: DWORD = 0x0000000E;
3046 pub const SPDRP_CAPABILITIES: DWORD = 0x0000000F;
3047 pub const SPDRP_UI_NUMBER: DWORD = 0x00000010;
3048 pub const SPDRP_UPPERFILTERS: DWORD = 0x00000011;
3049 pub const SPDRP_LOWERFILTERS: DWORD = 0x00000012;
3050 pub const SPDRP_BUSTYPEGUID: DWORD = 0x00000013;
3051 pub const SPDRP_LEGACYBUSTYPE: DWORD = 0x00000014;
3052 pub const SPDRP_BUSNUMBER: DWORD = 0x00000015;
3053 pub const SPDRP_ENUMERATOR_NAME: DWORD = 0x00000016;
3054 pub const SPDRP_SECURITY: DWORD = 0x00000017;
3055 pub const SPDRP_SECURITY_SDS: DWORD = 0x00000018;
3056 pub const SPDRP_DEVTYPE: DWORD = 0x00000019;
3057 pub const SPDRP_EXCLUSIVE: DWORD = 0x0000001A;
3058 pub const SPDRP_CHARACTERISTICS: DWORD = 0x0000001B;
3059 pub const SPDRP_ADDRESS: DWORD = 0x0000001C;
3060 pub const SPDRP_UI_NUMBER_DESC_FORMAT: DWORD = 0x0000001D;
3061 pub const SPDRP_DEVICE_POWER_DATA: DWORD = 0x0000001E;
3062 pub const SPDRP_REMOVAL_POLICY: DWORD = 0x0000001F;
3063 pub const SPDRP_REMOVAL_POLICY_HW_DEFAULT: DWORD = 0x00000020;
3064 pub const SPDRP_REMOVAL_POLICY_OVERRIDE: DWORD = 0x00000021;
3065 pub const SPDRP_INSTALL_STATE: DWORD = 0x00000022;
3066 pub const SPDRP_LOCATION_PATHS: DWORD = 0x00000023;
3067 pub const SPDRP_BASE_CONTAINERID: DWORD = 0x00000024;
3068 pub const SPDRP_MAXIMUM_PROPERTY: DWORD = 0x00000025;
3069 pub const SPCRP_UPPERFILTERS: DWORD = 0x00000011;
3070 pub const SPCRP_LOWERFILTERS: DWORD = 0x00000012;
3071 pub const SPCRP_SECURITY: DWORD = 0x00000017;
3072 pub const SPCRP_SECURITY_SDS: DWORD = 0x00000018;
3073 pub const SPCRP_DEVTYPE: DWORD = 0x00000019;
3074 pub const SPCRP_EXCLUSIVE: DWORD = 0x0000001A;
3075 pub const SPCRP_CHARACTERISTICS: DWORD = 0x0000001B;
3076 pub const SPCRP_MAXIMUM_PROPERTY: DWORD = 0x0000001C;
3077 extern "system" {
SetupDiGetDeviceRegistryPropertyA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Property: DWORD, PropertyRegDataType: PDWORD, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3078     pub fn SetupDiGetDeviceRegistryPropertyA(
3079         DeviceInfoSet: HDEVINFO,
3080         DeviceInfoData: PSP_DEVINFO_DATA,
3081         Property: DWORD,
3082         PropertyRegDataType: PDWORD,
3083         PropertyBuffer: PBYTE,
3084         PropertyBufferSize: DWORD,
3085         RequiredSize: PDWORD,
3086     ) -> BOOL;
SetupDiGetDeviceRegistryPropertyW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Property: DWORD, PropertyRegDataType: PDWORD, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3087     pub fn SetupDiGetDeviceRegistryPropertyW(
3088         DeviceInfoSet: HDEVINFO,
3089         DeviceInfoData: PSP_DEVINFO_DATA,
3090         Property: DWORD,
3091         PropertyRegDataType: PDWORD,
3092         PropertyBuffer: PBYTE,
3093         PropertyBufferSize: DWORD,
3094         RequiredSize: PDWORD,
3095     ) -> BOOL;
SetupDiGetClassRegistryPropertyA( ClassGuid: *const GUID, Property: DWORD, PropertyRegDataType: PDWORD, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL3096     pub fn SetupDiGetClassRegistryPropertyA(
3097         ClassGuid: *const GUID,
3098         Property: DWORD,
3099         PropertyRegDataType: PDWORD,
3100         PropertyBuffer: PBYTE,
3101         PropertyBufferSize: DWORD,
3102         RequiredSize: PDWORD,
3103         MachineName: PCSTR,
3104         Reserved: PVOID,
3105     ) -> BOOL;
SetupDiGetClassRegistryPropertyW( ClassGuid: *const GUID, Property: DWORD, PropertyRegDataType: PDWORD, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL3106     pub fn SetupDiGetClassRegistryPropertyW(
3107         ClassGuid: *const GUID,
3108         Property: DWORD,
3109         PropertyRegDataType: PDWORD,
3110         PropertyBuffer: PBYTE,
3111         PropertyBufferSize: DWORD,
3112         RequiredSize: PDWORD,
3113         MachineName: PCWSTR,
3114         Reserved: PVOID,
3115     ) -> BOOL;
SetupDiSetDeviceRegistryPropertyA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Property: DWORD, PropertyBuffer: *const BYTE, PropertyBufferSize: DWORD, ) -> BOOL3116     pub fn SetupDiSetDeviceRegistryPropertyA(
3117         DeviceInfoSet: HDEVINFO,
3118         DeviceInfoData: PSP_DEVINFO_DATA,
3119         Property: DWORD,
3120         PropertyBuffer: *const BYTE,
3121         PropertyBufferSize: DWORD,
3122     ) -> BOOL;
SetupDiSetDeviceRegistryPropertyW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, Property: DWORD, PropertyBuffer: *const BYTE, PropertyBufferSize: DWORD, ) -> BOOL3123     pub fn SetupDiSetDeviceRegistryPropertyW(
3124         DeviceInfoSet: HDEVINFO,
3125         DeviceInfoData: PSP_DEVINFO_DATA,
3126         Property: DWORD,
3127         PropertyBuffer: *const BYTE,
3128         PropertyBufferSize: DWORD,
3129     ) -> BOOL;
SetupDiSetClassRegistryPropertyA( ClassGuid: *const GUID, Property: DWORD, PropertyBuffer: *const BYTE, PropertyBufferSize: DWORD, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL3130     pub fn SetupDiSetClassRegistryPropertyA(
3131         ClassGuid: *const GUID,
3132         Property: DWORD,
3133         PropertyBuffer: *const BYTE,
3134         PropertyBufferSize: DWORD,
3135         MachineName: PCSTR,
3136         Reserved: PVOID,
3137     ) -> BOOL;
SetupDiSetClassRegistryPropertyW( ClassGuid: *const GUID, Property: DWORD, PropertyBuffer: *const BYTE, PropertyBufferSize: DWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL3138     pub fn SetupDiSetClassRegistryPropertyW(
3139         ClassGuid: *const GUID,
3140         Property: DWORD,
3141         PropertyBuffer: *const BYTE,
3142         PropertyBufferSize: DWORD,
3143         MachineName: PCWSTR,
3144         Reserved: PVOID,
3145     ) -> BOOL;
SetupDiGetDeviceInstallParamsA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DeviceInstallParams: PSP_DEVINSTALL_PARAMS_A, ) -> BOOL3146     pub fn SetupDiGetDeviceInstallParamsA(
3147         DeviceInfoSet: HDEVINFO,
3148         DeviceInfoData: PSP_DEVINFO_DATA,
3149         DeviceInstallParams: PSP_DEVINSTALL_PARAMS_A,
3150     ) -> BOOL;
SetupDiGetDeviceInstallParamsW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DeviceInstallParams: PSP_DEVINSTALL_PARAMS_W, ) -> BOOL3151     pub fn SetupDiGetDeviceInstallParamsW(
3152         DeviceInfoSet: HDEVINFO,
3153         DeviceInfoData: PSP_DEVINFO_DATA,
3154         DeviceInstallParams: PSP_DEVINSTALL_PARAMS_W,
3155     ) -> BOOL;
SetupDiGetClassInstallParamsA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ClassInstallParams: PSP_CLASSINSTALL_HEADER, ClassInstallParamsSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3156     pub fn SetupDiGetClassInstallParamsA(
3157         DeviceInfoSet: HDEVINFO,
3158         DeviceInfoData: PSP_DEVINFO_DATA,
3159         ClassInstallParams: PSP_CLASSINSTALL_HEADER,
3160         ClassInstallParamsSize: DWORD,
3161         RequiredSize: PDWORD,
3162     ) -> BOOL;
SetupDiGetClassInstallParamsW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ClassInstallParams: PSP_CLASSINSTALL_HEADER, ClassInstallParamsSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3163     pub fn SetupDiGetClassInstallParamsW(
3164         DeviceInfoSet: HDEVINFO,
3165         DeviceInfoData: PSP_DEVINFO_DATA,
3166         ClassInstallParams: PSP_CLASSINSTALL_HEADER,
3167         ClassInstallParamsSize: DWORD,
3168         RequiredSize: PDWORD,
3169     ) -> BOOL;
SetupDiSetDeviceInstallParamsA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DeviceInstallParams: PSP_DEVINSTALL_PARAMS_A, ) -> BOOL3170     pub fn SetupDiSetDeviceInstallParamsA(
3171         DeviceInfoSet: HDEVINFO,
3172         DeviceInfoData: PSP_DEVINFO_DATA,
3173         DeviceInstallParams: PSP_DEVINSTALL_PARAMS_A,
3174     ) -> BOOL;
SetupDiSetDeviceInstallParamsW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DeviceInstallParams: PSP_DEVINSTALL_PARAMS_W, ) -> BOOL3175     pub fn SetupDiSetDeviceInstallParamsW(
3176         DeviceInfoSet: HDEVINFO,
3177         DeviceInfoData: PSP_DEVINFO_DATA,
3178         DeviceInstallParams: PSP_DEVINSTALL_PARAMS_W,
3179     ) -> BOOL;
SetupDiSetClassInstallParamsA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ClassInstallParams: PSP_CLASSINSTALL_HEADER, ClassInstallParamsSize: DWORD, ) -> BOOL3180     pub fn SetupDiSetClassInstallParamsA(
3181         DeviceInfoSet: HDEVINFO,
3182         DeviceInfoData: PSP_DEVINFO_DATA,
3183         ClassInstallParams: PSP_CLASSINSTALL_HEADER,
3184         ClassInstallParamsSize: DWORD,
3185     ) -> BOOL;
SetupDiSetClassInstallParamsW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ClassInstallParams: PSP_CLASSINSTALL_HEADER, ClassInstallParamsSize: DWORD, ) -> BOOL3186     pub fn SetupDiSetClassInstallParamsW(
3187         DeviceInfoSet: HDEVINFO,
3188         DeviceInfoData: PSP_DEVINFO_DATA,
3189         ClassInstallParams: PSP_CLASSINSTALL_HEADER,
3190         ClassInstallParamsSize: DWORD,
3191     ) -> BOOL;
SetupDiGetDriverInstallParamsA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_A, DriverInstallParams: PSP_DRVINSTALL_PARAMS, ) -> BOOL3192     pub fn SetupDiGetDriverInstallParamsA(
3193         DeviceInfoSet: HDEVINFO,
3194         DeviceInfoData: PSP_DEVINFO_DATA,
3195         DriverInfoData: PSP_DRVINFO_DATA_A,
3196         DriverInstallParams: PSP_DRVINSTALL_PARAMS,
3197     ) -> BOOL;
SetupDiGetDriverInstallParamsW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_W, DriverInstallParams: PSP_DRVINSTALL_PARAMS, ) -> BOOL3198     pub fn SetupDiGetDriverInstallParamsW(
3199         DeviceInfoSet: HDEVINFO,
3200         DeviceInfoData: PSP_DEVINFO_DATA,
3201         DriverInfoData: PSP_DRVINFO_DATA_W,
3202         DriverInstallParams: PSP_DRVINSTALL_PARAMS,
3203     ) -> BOOL;
SetupDiSetDriverInstallParamsA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_A, DriverInstallParams: PSP_DRVINSTALL_PARAMS, ) -> BOOL3204     pub fn SetupDiSetDriverInstallParamsA(
3205         DeviceInfoSet: HDEVINFO,
3206         DeviceInfoData: PSP_DEVINFO_DATA,
3207         DriverInfoData: PSP_DRVINFO_DATA_A,
3208         DriverInstallParams: PSP_DRVINSTALL_PARAMS,
3209     ) -> BOOL;
SetupDiSetDriverInstallParamsW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, DriverInfoData: PSP_DRVINFO_DATA_W, DriverInstallParams: PSP_DRVINSTALL_PARAMS, ) -> BOOL3210     pub fn SetupDiSetDriverInstallParamsW(
3211         DeviceInfoSet: HDEVINFO,
3212         DeviceInfoData: PSP_DEVINFO_DATA,
3213         DriverInfoData: PSP_DRVINFO_DATA_W,
3214         DriverInstallParams: PSP_DRVINSTALL_PARAMS,
3215     ) -> BOOL;
SetupDiLoadClassIcon( ClassGuid: *const GUID, LargeIcon: *mut HICON, MiniIconIndex: PINT, ) -> BOOL3216     pub fn SetupDiLoadClassIcon(
3217         ClassGuid: *const GUID,
3218         LargeIcon: *mut HICON,
3219         MiniIconIndex: PINT,
3220     ) -> BOOL;
SetupDiLoadDeviceIcon( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, cxIcon: UINT, cyIcon: UINT, Flags: DWORD, hIcon: *mut HICON, ) -> BOOL3221     pub fn SetupDiLoadDeviceIcon(
3222         DeviceInfoSet: HDEVINFO,
3223         DeviceInfoData: PSP_DEVINFO_DATA,
3224         cxIcon: UINT,
3225         cyIcon: UINT,
3226         Flags: DWORD,
3227         hIcon: *mut HICON,
3228     ) -> BOOL;
3229 }
3230 pub const DMI_MASK: DWORD = 0x00000001;
3231 pub const DMI_BKCOLOR: DWORD = 0x00000002;
3232 pub const DMI_USERECT: DWORD = 0x00000004;
3233 extern "system" {
SetupDiDrawMiniIcon( hdc: HDC, rc: RECT, MiniIconIndex: INT, Flags: DWORD, ) -> INT3234     pub fn SetupDiDrawMiniIcon(
3235         hdc: HDC,
3236         rc: RECT,
3237         MiniIconIndex: INT,
3238         Flags: DWORD,
3239     ) -> INT;
SetupDiGetClassBitmapIndex( ClassGuid: *const GUID, MiniIconIndex: PINT, ) -> BOOL3240     pub fn SetupDiGetClassBitmapIndex(
3241         ClassGuid: *const GUID,
3242         MiniIconIndex: PINT,
3243     ) -> BOOL;
SetupDiGetClassImageList( ClassImageListData: PSP_CLASSIMAGELIST_DATA, ) -> BOOL3244     pub fn SetupDiGetClassImageList(
3245         ClassImageListData: PSP_CLASSIMAGELIST_DATA,
3246     ) -> BOOL;
SetupDiGetClassImageListExA( ClassImageListData: PSP_CLASSIMAGELIST_DATA, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL3247     pub fn SetupDiGetClassImageListExA(
3248         ClassImageListData: PSP_CLASSIMAGELIST_DATA,
3249         MachineName: PCSTR,
3250         Reserved: PVOID,
3251     ) -> BOOL;
SetupDiGetClassImageListExW( ClassImageListData: PSP_CLASSIMAGELIST_DATA, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL3252     pub fn SetupDiGetClassImageListExW(
3253         ClassImageListData: PSP_CLASSIMAGELIST_DATA,
3254         MachineName: PCWSTR,
3255         Reserved: PVOID,
3256     ) -> BOOL;
SetupDiGetClassImageIndex( ClassImageListData: PSP_CLASSIMAGELIST_DATA, ClassGuid: *const GUID, ImageIndex: PINT, ) -> BOOL3257     pub fn SetupDiGetClassImageIndex(
3258         ClassImageListData: PSP_CLASSIMAGELIST_DATA,
3259         ClassGuid: *const GUID,
3260         ImageIndex: PINT,
3261     ) -> BOOL;
SetupDiDestroyClassImageList( ClassImageListData: PSP_CLASSIMAGELIST_DATA, ) -> BOOL3262     pub fn SetupDiDestroyClassImageList(
3263         ClassImageListData: PSP_CLASSIMAGELIST_DATA,
3264     ) -> BOOL;
3265 }
3266 pub const DIGCDP_FLAG_BASIC: DWORD = 0x00000001;
3267 pub const DIGCDP_FLAG_ADVANCED: DWORD = 0x00000002;
3268 pub const DIGCDP_FLAG_REMOTE_BASIC: DWORD = 0x00000003;
3269 pub const DIGCDP_FLAG_REMOTE_ADVANCED: DWORD = 0x00000004;
3270 extern "system" {
SetupDiGetClassDevPropertySheetsA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, PropertySheetHeader: LPPROPSHEETHEADERA, PropertySheetHeaderPageListSize: DWORD, RequiredSize: PDWORD, PropertySheetType: DWORD, ) -> BOOL3271     pub fn SetupDiGetClassDevPropertySheetsA(
3272         DeviceInfoSet: HDEVINFO,
3273         DeviceInfoData: PSP_DEVINFO_DATA,
3274         PropertySheetHeader: LPPROPSHEETHEADERA,
3275         PropertySheetHeaderPageListSize: DWORD,
3276         RequiredSize: PDWORD,
3277         PropertySheetType: DWORD,
3278     ) -> BOOL;
SetupDiGetClassDevPropertySheetsW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, PropertySheetHeader: LPPROPSHEETHEADERW, PropertySheetHeaderPageListSize: DWORD, RequiredSize: PDWORD, PropertySheetType: DWORD, ) -> BOOL3279     pub fn SetupDiGetClassDevPropertySheetsW(
3280         DeviceInfoSet: HDEVINFO,
3281         DeviceInfoData: PSP_DEVINFO_DATA,
3282         PropertySheetHeader: LPPROPSHEETHEADERW,
3283         PropertySheetHeaderPageListSize: DWORD,
3284         RequiredSize: PDWORD,
3285         PropertySheetType: DWORD,
3286     ) -> BOOL;
3287 }
3288 pub const IDI_RESOURCEFIRST: c_int = 159;
3289 pub const IDI_RESOURCE: c_int = 159;
3290 pub const IDI_RESOURCELAST: c_int = 161;
3291 pub const IDI_RESOURCEOVERLAYFIRST: c_int = 161;
3292 pub const IDI_RESOURCEOVERLAYLAST: c_int = 161;
3293 pub const IDI_CONFLICT: c_int = 161;
3294 pub const IDI_CLASSICON_OVERLAYFIRST: c_int = 500;
3295 pub const IDI_CLASSICON_OVERLAYLAST: c_int = 502;
3296 pub const IDI_PROBLEM_OVL: c_int = 500;
3297 pub const IDI_DISABLED_OVL: c_int = 501;
3298 pub const IDI_FORCED_OVL: c_int = 502;
3299 extern "system" {
SetupDiAskForOEMDisk( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL3300     pub fn SetupDiAskForOEMDisk(
3301         DeviceInfoSet: HDEVINFO,
3302         DeviceInfoData: PSP_DEVINFO_DATA,
3303     ) -> BOOL;
SetupDiSelectOEMDrv( hwndParent: HWND, DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL3304     pub fn SetupDiSelectOEMDrv(
3305         hwndParent: HWND,
3306         DeviceInfoSet: HDEVINFO,
3307         DeviceInfoData: PSP_DEVINFO_DATA,
3308     ) -> BOOL;
SetupDiClassNameFromGuidA( ClassGuid: *const GUID, ClassName: PSTR, ClassNameSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3309     pub fn SetupDiClassNameFromGuidA(
3310         ClassGuid: *const GUID,
3311         ClassName: PSTR,
3312         ClassNameSize: DWORD,
3313         RequiredSize: PDWORD,
3314     ) -> BOOL;
SetupDiClassNameFromGuidW( ClassGuid: *const GUID, ClassName: PWSTR, ClassNameSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3315     pub fn SetupDiClassNameFromGuidW(
3316         ClassGuid: *const GUID,
3317         ClassName: PWSTR,
3318         ClassNameSize: DWORD,
3319         RequiredSize: PDWORD,
3320     ) -> BOOL;
SetupDiClassNameFromGuidExA( ClassGuid: *const GUID, ClassName: PSTR, ClassNameSize: DWORD, RequiredSize: PDWORD, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL3321     pub fn SetupDiClassNameFromGuidExA(
3322         ClassGuid: *const GUID,
3323         ClassName: PSTR,
3324         ClassNameSize: DWORD,
3325         RequiredSize: PDWORD,
3326         MachineName: PCSTR,
3327         Reserved: PVOID,
3328     ) -> BOOL;
SetupDiClassNameFromGuidExW( ClassGuid: *const GUID, ClassName: PWSTR, ClassNameSize: DWORD, RequiredSize: PDWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL3329     pub fn SetupDiClassNameFromGuidExW(
3330         ClassGuid: *const GUID,
3331         ClassName: PWSTR,
3332         ClassNameSize: DWORD,
3333         RequiredSize: PDWORD,
3334         MachineName: PCWSTR,
3335         Reserved: PVOID,
3336     ) -> BOOL;
SetupDiClassGuidsFromNameA( ClassName: PCSTR, ClassGuidList: LPGUID, ClassGuidListSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3337     pub fn SetupDiClassGuidsFromNameA(
3338         ClassName: PCSTR,
3339         ClassGuidList: LPGUID,
3340         ClassGuidListSize: DWORD,
3341         RequiredSize: PDWORD,
3342     ) -> BOOL;
SetupDiClassGuidsFromNameW( ClassName: PCWSTR, ClassGuidList: LPGUID, ClassGuidListSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3343     pub fn SetupDiClassGuidsFromNameW(
3344         ClassName: PCWSTR,
3345         ClassGuidList: LPGUID,
3346         ClassGuidListSize: DWORD,
3347         RequiredSize: PDWORD,
3348     ) -> BOOL;
SetupDiClassGuidsFromNameExA( ClassName: PCSTR, ClassGuidList: LPGUID, ClassGuidListSize: DWORD, RequiredSize: PDWORD, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL3349     pub fn SetupDiClassGuidsFromNameExA(
3350         ClassName: PCSTR,
3351         ClassGuidList: LPGUID,
3352         ClassGuidListSize: DWORD,
3353         RequiredSize: PDWORD,
3354         MachineName: PCSTR,
3355         Reserved: PVOID,
3356     ) -> BOOL;
SetupDiClassGuidsFromNameExW( ClassName: PCWSTR, ClassGuidList: LPGUID, ClassGuidListSize: DWORD, RequiredSize: PDWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL3357     pub fn SetupDiClassGuidsFromNameExW(
3358         ClassName: PCWSTR,
3359         ClassGuidList: LPGUID,
3360         ClassGuidListSize: DWORD,
3361         RequiredSize: PDWORD,
3362         MachineName: PCWSTR,
3363         Reserved: PVOID,
3364     ) -> BOOL;
SetupDiGetHwProfileFriendlyNameA( HwProfile: DWORD, FriendlyName: PSTR, FriendlyNameSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3365     pub fn SetupDiGetHwProfileFriendlyNameA(
3366         HwProfile: DWORD,
3367         FriendlyName: PSTR,
3368         FriendlyNameSize: DWORD,
3369         RequiredSize: PDWORD,
3370     ) -> BOOL;
SetupDiGetHwProfileFriendlyNameW( HwProfile: DWORD, FriendlyName: PWSTR, FriendlyNameSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3371     pub fn SetupDiGetHwProfileFriendlyNameW(
3372         HwProfile: DWORD,
3373         FriendlyName: PWSTR,
3374         FriendlyNameSize: DWORD,
3375         RequiredSize: PDWORD,
3376     ) -> BOOL;
SetupDiGetHwProfileFriendlyNameExA( HwProfile: DWORD, FriendlyName: PSTR, FriendlyNameSize: DWORD, RequiredSize: PDWORD, MachineName: PCSTR, Reserved: PVOID, ) -> BOOL3377     pub fn SetupDiGetHwProfileFriendlyNameExA(
3378         HwProfile: DWORD,
3379         FriendlyName: PSTR,
3380         FriendlyNameSize: DWORD,
3381         RequiredSize: PDWORD,
3382         MachineName: PCSTR,
3383         Reserved: PVOID,
3384     ) -> BOOL;
SetupDiGetHwProfileFriendlyNameExW( HwProfile: DWORD, FriendlyName: PWSTR, FriendlyNameSize: DWORD, RequiredSize: PDWORD, MachineName: PCWSTR, Reserved: PVOID, ) -> BOOL3385     pub fn SetupDiGetHwProfileFriendlyNameExW(
3386         HwProfile: DWORD,
3387         FriendlyName: PWSTR,
3388         FriendlyNameSize: DWORD,
3389         RequiredSize: PDWORD,
3390         MachineName: PCWSTR,
3391         Reserved: PVOID,
3392     ) -> BOOL;
3393 }
3394 pub const SPWPT_SELECTDEVICE: DWORD = 0x00000001;
3395 pub const SPWP_USE_DEVINFO_DATA: DWORD = 0x00000001;
3396 extern "system" {
SetupDiGetWizardPage( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, InstallWizardData: PSP_INSTALLWIZARD_DATA, PageType: DWORD, Flags: DWORD, ) -> HPROPSHEETPAGE3397     pub fn SetupDiGetWizardPage(
3398         DeviceInfoSet: HDEVINFO,
3399         DeviceInfoData: PSP_DEVINFO_DATA,
3400         InstallWizardData: PSP_INSTALLWIZARD_DATA,
3401         PageType: DWORD,
3402         Flags: DWORD,
3403     ) -> HPROPSHEETPAGE;
SetupDiGetSelectedDevice( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL3404     pub fn SetupDiGetSelectedDevice(
3405         DeviceInfoSet: HDEVINFO,
3406         DeviceInfoData: PSP_DEVINFO_DATA,
3407     ) -> BOOL;
SetupDiSetSelectedDevice( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, ) -> BOOL3408     pub fn SetupDiSetSelectedDevice(
3409         DeviceInfoSet: HDEVINFO,
3410         DeviceInfoData: PSP_DEVINFO_DATA,
3411     ) -> BOOL;
SetupDiGetActualModelsSectionA( Context: PINFCONTEXT, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, InfSectionWithExt: PSTR, InfSectionWithExtSize: DWORD, RequiredSize: PDWORD, Reserved: PVOID, ) -> BOOL3412     pub fn SetupDiGetActualModelsSectionA(
3413         Context: PINFCONTEXT,
3414         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
3415         InfSectionWithExt: PSTR,
3416         InfSectionWithExtSize: DWORD,
3417         RequiredSize: PDWORD,
3418         Reserved: PVOID,
3419     ) -> BOOL;
SetupDiGetActualModelsSectionW( Context: PINFCONTEXT, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, InfSectionWithExt: PWSTR, InfSectionWithExtSize: DWORD, RequiredSize: PDWORD, Reserved: PVOID, ) -> BOOL3420     pub fn SetupDiGetActualModelsSectionW(
3421         Context: PINFCONTEXT,
3422         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
3423         InfSectionWithExt: PWSTR,
3424         InfSectionWithExtSize: DWORD,
3425         RequiredSize: PDWORD,
3426         Reserved: PVOID,
3427     ) -> BOOL;
SetupDiGetActualSectionToInstallA( InfHandle: HINF, InfSectionName: PCSTR, InfSectionWithExt: PSTR, InfSectionWithExtSize: DWORD, RequiredSize: PDWORD, Extension: *mut PSTR, ) -> BOOL3428     pub fn SetupDiGetActualSectionToInstallA(
3429         InfHandle: HINF,
3430         InfSectionName: PCSTR,
3431         InfSectionWithExt: PSTR,
3432         InfSectionWithExtSize: DWORD,
3433         RequiredSize: PDWORD,
3434         Extension: *mut PSTR,
3435     ) -> BOOL;
SetupDiGetActualSectionToInstallW( InfHandle: HINF, InfSectionName: PCWSTR, InfSectionWithExt: PWSTR, InfSectionWithExtSize: DWORD, RequiredSize: PDWORD, Extension: *mut PWSTR, ) -> BOOL3436     pub fn SetupDiGetActualSectionToInstallW(
3437         InfHandle: HINF,
3438         InfSectionName: PCWSTR,
3439         InfSectionWithExt: PWSTR,
3440         InfSectionWithExtSize: DWORD,
3441         RequiredSize: PDWORD,
3442         Extension: *mut PWSTR,
3443     ) -> BOOL;
SetupDiGetActualSectionToInstallExA( InfHandle: HINF, InfSectionName: PCSTR, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, InfSectionWithExt: PSTR, InfSectionWithExtSize: DWORD, RequiredSize: PDWORD, Extension: *mut PSTR, Reserved: PVOID, ) -> BOOL3444     pub fn SetupDiGetActualSectionToInstallExA(
3445         InfHandle: HINF,
3446         InfSectionName: PCSTR,
3447         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
3448         InfSectionWithExt: PSTR,
3449         InfSectionWithExtSize: DWORD,
3450         RequiredSize: PDWORD,
3451         Extension: *mut PSTR,
3452         Reserved: PVOID,
3453     ) -> BOOL;
SetupDiGetActualSectionToInstallExW( InfHandle: HINF, InfSectionName: PCWSTR, AlternatePlatformInfo: PSP_ALTPLATFORM_INFO, InfSectionWithExt: PWSTR, InfSectionWithExtSize: DWORD, RequiredSize: PDWORD, Extension: *mut PWSTR, Reserved: PVOID, ) -> BOOL3454     pub fn SetupDiGetActualSectionToInstallExW(
3455         InfHandle: HINF,
3456         InfSectionName: PCWSTR,
3457         AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
3458         InfSectionWithExt: PWSTR,
3459         InfSectionWithExtSize: DWORD,
3460         RequiredSize: PDWORD,
3461         Extension: *mut PWSTR,
3462         Reserved: PVOID,
3463     ) -> BOOL;
SetupEnumInfSectionsA( InfHandle: HINF, Index: UINT, Buffer: PSTR, Size: UINT, SizeNeeded: *mut UINT, ) -> BOOL3464     pub fn SetupEnumInfSectionsA(
3465         InfHandle: HINF,
3466         Index: UINT,
3467         Buffer: PSTR,
3468         Size: UINT,
3469         SizeNeeded: *mut UINT,
3470     ) -> BOOL;
SetupEnumInfSectionsW( InfHandle: HINF, Index: UINT, Buffer: PWSTR, Size: UINT, SizeNeeded: *mut UINT, ) -> BOOL3471     pub fn SetupEnumInfSectionsW(
3472         InfHandle: HINF,
3473         Index: UINT,
3474         Buffer: PWSTR,
3475         Size: UINT,
3476         SizeNeeded: *mut UINT,
3477     ) -> BOOL;
3478 }
3479 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INF_SIGNER_INFO_V1_A {
3480     cbSize: DWORD,
3481     CatalogFile: [CHAR; MAX_PATH],
3482     DigitalSigner: [CHAR; MAX_PATH],
3483     DigitalSignerVersion: [CHAR; MAX_PATH],
3484 }}
3485 pub type PSP_INF_SIGNER_INFO_V1_A = *mut SP_INF_SIGNER_INFO_V1_A;
3486 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INF_SIGNER_INFO_V1_W {
3487     cbSize: DWORD,
3488     CatalogFile: [WCHAR; MAX_PATH],
3489     DigitalSigner: [WCHAR; MAX_PATH],
3490     DigitalSignerVersion: [WCHAR; MAX_PATH],
3491 }}
3492 pub type PSP_INF_SIGNER_INFO_V1_W = *mut SP_INF_SIGNER_INFO_V1_W;
3493 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INF_SIGNER_INFO_V2_A {
3494     cbSize: DWORD,
3495     CatalogFile: [CHAR; MAX_PATH],
3496     DigitalSigner: [CHAR; MAX_PATH],
3497     DigitalSignerVersion: [CHAR; MAX_PATH],
3498     SignerScore: DWORD,
3499 }}
3500 pub type PSP_INF_SIGNER_INFO_V2_A = *mut SP_INF_SIGNER_INFO_V2_A;
3501 STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INF_SIGNER_INFO_V2_W {
3502     cbSize: DWORD,
3503     CatalogFile: [WCHAR; MAX_PATH],
3504     DigitalSigner: [WCHAR; MAX_PATH],
3505     DigitalSignerVersion: [WCHAR; MAX_PATH],
3506     SignerScore: DWORD,
3507 }}
3508 pub type PSP_INF_SIGNER_INFO_V2_W = *mut SP_INF_SIGNER_INFO_V2_W;
3509 pub const SIGNERSCORE_UNKNOWN: DWORD = 0xFF000000;
3510 pub const SIGNERSCORE_W9X_SUSPECT: DWORD = 0xC0000000;
3511 pub const SIGNERSCORE_UNSIGNED: DWORD = 0x80000000;
3512 pub const SIGNERSCORE_AUTHENTICODE: DWORD = 0x0F000000;
3513 pub const SIGNERSCORE_WHQL: DWORD = 0x0D000005;
3514 pub const SIGNERSCORE_UNCLASSIFIED: DWORD = 0x0D000004;
3515 pub const SIGNERSCORE_INBOX: DWORD = 0x0D000003;
3516 pub const SIGNERSCORE_LOGO_STANDARD: DWORD = 0x0D000002;
3517 pub const SIGNERSCORE_LOGO_PREMIUM: DWORD = 0x0D000001;
3518 pub const SIGNERSCORE_MASK: DWORD = 0xFF000000;
3519 pub const SIGNERSCORE_SIGNED_MASK: DWORD = 0xF0000000;
3520 pub type SP_INF_SIGNER_INFO_A = SP_INF_SIGNER_INFO_V2_A;
3521 pub type PSP_INF_SIGNER_INFO_A = PSP_INF_SIGNER_INFO_V2_A;
3522 pub type SP_INF_SIGNER_INFO_W = SP_INF_SIGNER_INFO_V2_W;
3523 pub type PSP_INF_SIGNER_INFO_W = PSP_INF_SIGNER_INFO_V2_W;
3524 extern "system" {
SetupVerifyInfFileA( InfName: PCSTR, AltPlatformInfo: PSP_ALTPLATFORM_INFO, InfSignerInfo: PSP_INF_SIGNER_INFO_A, ) -> BOOL3525     pub fn SetupVerifyInfFileA(
3526         InfName: PCSTR,
3527         AltPlatformInfo: PSP_ALTPLATFORM_INFO,
3528         InfSignerInfo: PSP_INF_SIGNER_INFO_A,
3529     ) -> BOOL;
SetupVerifyInfFileW( InfName: PCWSTR, AltPlatformInfo: PSP_ALTPLATFORM_INFO, InfSignerInfo: PSP_INF_SIGNER_INFO_W, ) -> BOOL3530     pub fn SetupVerifyInfFileW(
3531         InfName: PCWSTR,
3532         AltPlatformInfo: PSP_ALTPLATFORM_INFO,
3533         InfSignerInfo: PSP_INF_SIGNER_INFO_W,
3534     ) -> BOOL;
3535 }
3536 pub const DICUSTOMDEVPROP_MERGE_MULTISZ: DWORD = 0x00000001;
3537 extern "system" {
SetupDiGetCustomDevicePropertyA( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, CustomPropertyName: PCSTR, Flags: DWORD, PropertyRegDataType: PDWORD, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3538     pub fn SetupDiGetCustomDevicePropertyA(
3539         DeviceInfoSet: HDEVINFO,
3540         DeviceInfoData: PSP_DEVINFO_DATA,
3541         CustomPropertyName: PCSTR,
3542         Flags: DWORD,
3543         PropertyRegDataType: PDWORD,
3544         PropertyBuffer: PBYTE,
3545         PropertyBufferSize: DWORD,
3546         RequiredSize: PDWORD,
3547     ) -> BOOL;
SetupDiGetCustomDevicePropertyW( DeviceInfoSet: HDEVINFO, DeviceInfoData: PSP_DEVINFO_DATA, CustomPropertyName: PCWSTR, Flags: DWORD, PropertyRegDataType: PDWORD, PropertyBuffer: PBYTE, PropertyBufferSize: DWORD, RequiredSize: PDWORD, ) -> BOOL3548     pub fn SetupDiGetCustomDevicePropertyW(
3549         DeviceInfoSet: HDEVINFO,
3550         DeviceInfoData: PSP_DEVINFO_DATA,
3551         CustomPropertyName: PCWSTR,
3552         Flags: DWORD,
3553         PropertyRegDataType: PDWORD,
3554         PropertyBuffer: PBYTE,
3555         PropertyBufferSize: DWORD,
3556         RequiredSize: PDWORD,
3557     ) -> BOOL;
3558 }
3559 pub const SCWMI_CLOBBER_SECURITY: DWORD = 0x00000001;
3560 extern "system" {
SetupConfigureWmiFromInfSectionA( InfHandle: HINF, SectionName: PCSTR, Flags: DWORD, ) -> BOOL3561     pub fn SetupConfigureWmiFromInfSectionA(
3562         InfHandle: HINF,
3563         SectionName: PCSTR,
3564         Flags: DWORD,
3565     ) -> BOOL;
SetupConfigureWmiFromInfSectionW( InfHandle: HINF, SectionName: PCWSTR, Flags: DWORD, ) -> BOOL3566     pub fn SetupConfigureWmiFromInfSectionW(
3567         InfHandle: HINF,
3568         SectionName: PCWSTR,
3569         Flags: DWORD,
3570     ) -> BOOL;
3571 }
3572