Etterna 0.74.4
Loading...
Searching...
No Matches
setupapi.h
1/*++
2
3Copyright (c) 1995-1999 Microsoft Corporation
4
5Module Name:
6
7 setupapi.h
8
9Abstract:
10
11 Public header file for Windows NT Setup and Device Installer services Dll.
12
13--*/
14
15#ifndef _INC_SETUPAPI
16#define _INC_SETUPAPI
17
18#if _MSC_VER > 1000
19#pragma once
20#endif
21
22//
23// Define API decoration for direct importing of DLL references.
24//
25#if !defined(_SETUPAPI_)
26#define WINSETUPAPI DECLSPEC_IMPORT
27#else
28#define WINSETUPAPI
29#endif
30
31#ifndef __LPGUID_DEFINED__
32#define __LPGUID_DEFINED__
33typedef GUID* LPGUID;
34#endif
35
36//
37// Include commctrl.h for our use of HIMAGELIST and wizard support.
38//
39#include <commctrl.h>
40
41#include <pshpack1.h> // Assume byte packing throughout
42
43#ifdef __cplusplus
44extern "C" {
45#endif
46
47//
48// Define maximum string length constants as specified by
49// Windows 95.
50//
51#define LINE_LEN \
52 256 // Win95-compatible maximum for displayable
53 // strings coming from a device INF.
54#define MAX_INF_STRING_LENGTH \
55 4096 // Actual maximum size of an INF string
56 // (including string substitutions).
57#define MAX_TITLE_LEN 60
58#define MAX_INSTRUCTION_LEN 256
59#define MAX_LABEL_LEN 30
60#define MAX_SERVICE_NAME_LEN 256
61#define MAX_SUBTITLE_LEN 256
62
63//
64// Define maximum length of a machine name in the format expected by ConfigMgr32
65// CM_Connect_Machine (i.e., "\\\\MachineName\0").
66//
67#define SP_MAX_MACHINENAME_LENGTH (MAX_PATH + 3)
68
69//
70// Define type for reference to loaded inf file
71//
72typedef PVOID HINF;
73
74//
75// Inf context structure. Applications must not interpret or
76// overwrite values in these structures.
77//
78typedef struct _INFCONTEXT
79{
80 PVOID Inf;
81 PVOID CurrentInf;
82 UINT Section;
83 UINT Line;
85
86//
87// Inf file information structure.
88//
89typedef struct _SP_INF_INFORMATION
90{
91 DWORD InfStyle;
92 DWORD InfCount;
93 BYTE VersionData[ANYSIZE_ARRAY];
95
96//
97// Define structure for passing alternate platform info into
98// SetupSetFileQueueAlternatePlatform and SetupQueryInfOriginalFileInformation.
99//
101{
102 DWORD cbSize;
103 //
104 // platform to use (VER_PLATFORM_WIN32_WINDOWS or VER_PLATFORM_WIN32_NT)
105 //
106 DWORD Platform;
107 //
108 // major and minor version numbers to use
109 //
110 DWORD MajorVersion;
111 DWORD MinorVersion;
112 //
113 // processor architecture to use (PROCESSOR_ARCHITECTURE_INTEL,
114 // PROCESSOR_ARCHITECTURE_ALPHA, PROCESSOR_ARCHITECTURE_IA64, or
115 // PROCESSOR_ARCHITECTURE_ALPHA64)
116 //
117 WORD ProcessorArchitecture;
118
119 WORD Reserved; // must be zero.
121
122//
123// Define structure that is filled in by SetupQueryInfOriginalFileInformation
124// to indicate the INF's original name and the original name of the (potentially
125// platform-specific) catalog file specified by that INF.
126//
128{
129 DWORD cbSize;
130 CHAR OriginalInfName[MAX_PATH];
131 CHAR OriginalCatalogName[MAX_PATH];
133
135{
136 DWORD cbSize;
137 WCHAR OriginalInfName[MAX_PATH];
138 WCHAR OriginalCatalogName[MAX_PATH];
140
141#ifdef UNICODE
144#else
147#endif
148
149//
150// SP_INF_INFORMATION.InfStyle values
151//
152#define INF_STYLE_NONE 0x00000000 // unrecognized or non-existent
153#define INF_STYLE_OLDNT 0x00000001 // winnt 3.x
154#define INF_STYLE_WIN4 0x00000002 // Win95
155
156//
157// Additional InfStyle flags that may be specified when calling
158// SetupOpenInfFile.
159//
160//
161#define INF_STYLE_CACHE_ENABLE \
162 0x00000010 // always cache INF, even outside of %windir%\Inf
163#define INF_STYLE_CACHE_DISABLE 0x00000020 // delete cached INF information
164
165//
166// Target directory specs.
167//
168#define DIRID_ABSOLUTE -1 // real 32-bit -1
169#define DIRID_ABSOLUTE_16BIT 0xffff // 16-bit -1 for compat w/setupx
170#define DIRID_NULL 0
171#define DIRID_SRCPATH 1
172#define DIRID_WINDOWS 10
173#define DIRID_SYSTEM 11 // system32
174#define DIRID_DRIVERS 12
175#define DIRID_IOSUBSYS DIRID_DRIVERS
176#define DIRID_INF 17
177#define DIRID_HELP 18
178#define DIRID_FONTS 20
179#define DIRID_VIEWERS 21
180#define DIRID_COLOR 23
181#define DIRID_APPS 24
182#define DIRID_SHARED 25
183#define DIRID_BOOT 30
184
185#define DIRID_SYSTEM16 50
186#define DIRID_SPOOL 51
187#define DIRID_SPOOLDRIVERS 52
188#define DIRID_USERPROFILE 53
189#define DIRID_LOADER 54
190#define DIRID_PRINTPROCESSOR 55
191
192#define DIRID_DEFAULT DIRID_SYSTEM
193
194//
195// The following DIRIDs are for commonly-used shell "special folders". The
196// complete list of such folders is contained in shlobj.h. In that headerfile,
197// each folder is assigned a CSIDL_* value. The DIRID values below are created
198// by taking the CSIDL value in shlobj.h and OR'ing it with 0x4000. Thus, if
199// an INF needs to reference other special folders not defined below, it may
200// generate one using the above mechanism, and setupapi will automatically deal
201// with it and use the corresponding shell's path where appropriate. (Remember
202// that DIRIDs must be specified in decimal, not hex, in an INF when used for
203// string substitution.)
204//
205#define DIRID_COMMON_STARTMENU 16406 // All Users\Start Menu
206#define DIRID_COMMON_PROGRAMS 16407 // All Users\Start Menu\Programs
207#define DIRID_COMMON_STARTUP 16408 // All Users\Start Menu\Programs\Startup
208#define DIRID_COMMON_DESKTOPDIRECTORY 16409 // All Users\Desktop
209#define DIRID_COMMON_FAVORITES 16415 // All Users\Favorites
210#define DIRID_COMMON_APPDATA 16419 // All Users\Application Data
211
212#define DIRID_PROGRAM_FILES 16422 // Program Files
213#define DIRID_SYSTEM_X86 16425 // system32 on RISC
214#define DIRID_PROGRAM_FILES_X86 16426 // Program Files on RISC
215#define DIRID_PROGRAM_FILES_COMMON 16427 // Program Files\Common
216#define DIRID_PROGRAM_FILES_COMMONX86 16428 // x86 Program Files\Common on RISC
217
218#define DIRID_COMMON_TEMPLATES 16429 // All Users\Templates
219#define DIRID_COMMON_DOCUMENTS 16430 // All Users\Documents
220
221//
222// First user-definable dirid. See SetupSetDirectoryId().
223//
224#define DIRID_USER 0x8000
225
226//
227// Setup callback notification routine type
228//
229typedef UINT(CALLBACK* PSP_FILE_CALLBACK_A)(IN PVOID Context,
230 IN UINT Notification,
231 IN UINT_PTR Param1,
232 IN UINT_PTR Param2);
233
234typedef UINT(CALLBACK* PSP_FILE_CALLBACK_W)(IN PVOID Context,
235 IN UINT Notification,
236 IN UINT_PTR Param1,
237 IN UINT_PTR Param2);
238
239#ifdef UNICODE
240#define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_W
241#else
242#define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_A
243#endif
244
245//
246// Operation/queue start/end notification. These are ordinal values.
247//
248#define SPFILENOTIFY_STARTQUEUE 0x00000001
249#define SPFILENOTIFY_ENDQUEUE 0x00000002
250#define SPFILENOTIFY_STARTSUBQUEUE 0x00000003
251#define SPFILENOTIFY_ENDSUBQUEUE 0x00000004
252#define SPFILENOTIFY_STARTDELETE 0x00000005
253#define SPFILENOTIFY_ENDDELETE 0x00000006
254#define SPFILENOTIFY_DELETEERROR 0x00000007
255#define SPFILENOTIFY_STARTRENAME 0x00000008
256#define SPFILENOTIFY_ENDRENAME 0x00000009
257#define SPFILENOTIFY_RENAMEERROR 0x0000000a
258#define SPFILENOTIFY_STARTCOPY 0x0000000b
259#define SPFILENOTIFY_ENDCOPY 0x0000000c
260#define SPFILENOTIFY_COPYERROR 0x0000000d
261#define SPFILENOTIFY_NEEDMEDIA 0x0000000e
262#define SPFILENOTIFY_QUEUESCAN 0x0000000f
263//
264// These are used with SetupIterateCabinet().
265//
266#define SPFILENOTIFY_CABINETINFO 0x00000010
267#define SPFILENOTIFY_FILEINCABINET 0x00000011
268#define SPFILENOTIFY_NEEDNEWCABINET 0x00000012
269#define SPFILENOTIFY_FILEEXTRACTED 0x00000013
270#define SPFILENOTIFY_FILEOPDELAYED 0x00000014
271//
272// These are used for backup operations
273//
274#define SPFILENOTIFY_STARTBACKUP 0x00000015
275#define SPFILENOTIFY_BACKUPERROR 0x00000016
276#define SPFILENOTIFY_ENDBACKUP 0x00000017
277//
278// Extended notification for SetupScanFileQueue(Flags=SPQ_SCAN_USE_CALLBACKEX)
279//
280#define SPFILENOTIFY_QUEUESCAN_EX 0x00000018
281//
282// Copy notification. These are bit flags that may be combined.
283//
284#define SPFILENOTIFY_LANGMISMATCH 0x00010000
285#define SPFILENOTIFY_TARGETEXISTS 0x00020000
286#define SPFILENOTIFY_TARGETNEWER 0x00040000
287
288//
289// File operation codes and callback outcomes.
290//
291#define FILEOP_COPY 0
292#define FILEOP_RENAME 1
293#define FILEOP_DELETE 2
294#define FILEOP_BACKUP 3
295
296#define FILEOP_ABORT 0
297#define FILEOP_DOIT 1
298#define FILEOP_SKIP 2
299#define FILEOP_RETRY FILEOP_DOIT
300#define FILEOP_NEWPATH 4
301
302//
303// Flags in inf copy sections
304//
305#define COPYFLG_WARN_IF_SKIP 0x00000001 // warn if user tries to skip file
306#define COPYFLG_NOSKIP 0x00000002 // disallow skipping this file
307#define COPYFLG_NOVERSIONCHECK \
308 0x00000004 // ignore versions and overwrite target
309#define COPYFLG_FORCE_FILE_IN_USE 0x00000008 // force file-in-use behavior
310#define COPYFLG_NO_OVERWRITE 0x00000010 // do not copy if file exists on target
311#define COPYFLG_NO_VERSION_DIALOG 0x00000020 // do not copy if target is newer
312#define COPYFLG_OVERWRITE_OLDER_ONLY \
313 0x00000040 // leave target alone if version same as source
314#define COPYFLG_REPLACEONLY 0x00000400 // copy only if file exists on target
315#define COPYFLG_NODECOMP \
316 0x00000800 // don't attempt to decompress file; copy as-is
317#define COPYFLG_REPLACE_BOOT_FILE \
318 0x00001000 // file must be present upon reboot (i.e., it's
319 // needed by the loader); this flag implies a reboot
320#define COPYFLG_NOPRUNE 0x00002000 // never prune this file
321
322//
323// Flags in inf delete sections
324// New flags go in high word
325//
326#define DELFLG_IN_USE 0x00000001 // queue in-use file for delete
327#define DELFLG_IN_USE1 0x00010000 // high-word version of DELFLG_IN_USE
328
329//
330// Source and file paths. Used when notifying queue callback
331// of SPFILENOTIFY_STARTxxx, SPFILENOTIFY_ENDxxx, and SPFILENOTIFY_xxxERROR.
332//
333typedef struct _FILEPATHS_A
334{
335 PCSTR Target;
336 PCSTR Source; // not used for delete operations
337 UINT Win32Error;
338 DWORD Flags; // such as SP_COPY_NOSKIP for copy errors
340
341typedef struct _FILEPATHS_W
342{
343 PCWSTR Target;
344 PCWSTR Source; // not used for delete operations
345 UINT Win32Error;
346 DWORD Flags; // such as SP_COPY_NOSKIP for copy errors
348
349#ifdef UNICODE
350typedef FILEPATHS_W FILEPATHS;
352#else
353typedef FILEPATHS_A FILEPATHS;
355#endif
356
357//
358// Structure used with SPFILENOTIFY_NEEDMEDIA
359//
360typedef struct _SOURCE_MEDIA_A
361{
362 PCSTR Reserved;
363 PCSTR Tagfile; // may be NULL
364 PCSTR Description;
365 //
366 // Pathname part and filename part of source file
367 // that caused us to need the media.
368 //
369 PCSTR SourcePath;
370 PCSTR SourceFile;
371 DWORD Flags; // subset of SP_COPY_xxx
373
374typedef struct _SOURCE_MEDIA_W
375{
376 PCWSTR Reserved;
377 PCWSTR Tagfile; // may be NULL
378 PCWSTR Description;
379 //
380 // Pathname part and filename part of source file
381 // that caused us to need the media.
382 //
383 PCWSTR SourcePath;
384 PCWSTR SourceFile;
385 DWORD Flags; // subset of SP_COPY_xxx
387
388#ifdef UNICODE
391#else
394#endif
395
396//
397// Structure used with SPFILENOTIFY_CABINETINFO and
398// SPFILENOTIFY_NEEDNEWCABINET
399//
400typedef struct _CABINET_INFO_A
401{
402 PCSTR CabinetPath;
403 PCSTR CabinetFile;
404 PCSTR DiskName;
405 USHORT SetId;
406 USHORT CabinetNumber;
408
409typedef struct _CABINET_INFO_W
410{
411 PCWSTR CabinetPath;
412 PCWSTR CabinetFile;
413 PCWSTR DiskName;
414 USHORT SetId;
415 USHORT CabinetNumber;
417
418#ifdef UNICODE
421#else
424#endif
425
426//
427// Structure used with SPFILENOTIFY_FILEINCABINET
428//
430{
431 PCSTR NameInCabinet;
432 DWORD FileSize;
433 DWORD Win32Error;
434 WORD DosDate;
435 WORD DosTime;
436 WORD DosAttribs;
437 CHAR FullTargetName[MAX_PATH];
439
441{
442 PCWSTR NameInCabinet;
443 DWORD FileSize;
444 DWORD Win32Error;
445 WORD DosDate;
446 WORD DosTime;
447 WORD DosAttribs;
448 WCHAR FullTargetName[MAX_PATH];
450
451#ifdef UNICODE
454#else
457#endif
458
459//
460// Define type for setup file queue
461//
462typedef PVOID HSPFILEQ;
463
464//
465// Structure used with SetupQueueCopyIndirect
466//
468{
469 DWORD cbSize;
470 HSPFILEQ QueueHandle;
471 PCSTR SourceRootPath;
472 OPTIONAL
473 PCSTR SourcePath;
474 OPTIONAL
475 PCSTR SourceFilename;
476 PCSTR SourceDescription;
477 OPTIONAL
478 PCSTR SourceTagfile;
479 OPTIONAL
480 PCSTR TargetDirectory;
481 PCSTR TargetFilename;
482 OPTIONAL
483 DWORD CopyStyle;
484 HINF LayoutInf;
485 OPTIONAL
486 PCSTR SecurityDescriptor;
487 OPTIONAL
489
491{
492 DWORD cbSize;
493 HSPFILEQ QueueHandle;
494 PCWSTR SourceRootPath;
495 OPTIONAL
496 PCWSTR SourcePath;
497 OPTIONAL
498 PCWSTR SourceFilename;
499 PCWSTR SourceDescription;
500 OPTIONAL
501 PCWSTR SourceTagfile;
502 OPTIONAL
503 PCWSTR TargetDirectory;
504 PCWSTR TargetFilename;
505 OPTIONAL
506 DWORD CopyStyle;
507 HINF LayoutInf;
508 OPTIONAL
509 PCWSTR SecurityDescriptor;
510 OPTIONAL
512
513#ifdef UNICODE
516#else
519#endif
520
521//
522// Define type for setup disk space list
523//
524typedef PVOID HDSKSPC;
525
526//
527// Define type for reference to device information set
528//
529typedef PVOID HDEVINFO;
530
531//
532// Device information structure (references a device instance
533// that is a member of a device information set)
534//
535typedef struct _SP_DEVINFO_DATA
536{
537 DWORD cbSize;
538 GUID ClassGuid;
539 DWORD DevInst; // DEVINST handle
540 ULONG_PTR Reserved;
542
543//
544// Device interface information structure (references a device
545// interface that is associated with the device information
546// element that owns it).
547//
549{
550 DWORD cbSize;
551 GUID InterfaceClassGuid;
552 DWORD Flags;
553 ULONG_PTR Reserved;
555
556//
557// Flags for SP_DEVICE_INTERFACE_DATA.Flags field.
558//
559#define SPINT_ACTIVE 0x00000001
560#define SPINT_DEFAULT 0x00000002
561#define SPINT_REMOVED 0x00000004
562
563//
564// Backward compatibility--do not use.
565//
568#define SPID_ACTIVE SPINT_ACTIVE
569#define SPID_DEFAULT SPINT_DEFAULT
570#define SPID_REMOVED SPINT_REMOVED
571
573{
574 DWORD cbSize;
575 CHAR DevicePath[ANYSIZE_ARRAY];
577
579{
580 DWORD cbSize;
581 WCHAR DevicePath[ANYSIZE_ARRAY];
583
584#ifdef UNICODE
587#else
590#endif
591
592//
593// Backward compatibility--do not use.
594//
599#ifdef UNICODE
602#else
605#endif
606
607//
608// Structure for detailed information on a device information set (used for
609// SetupDiGetDeviceInfoListDetail which supercedes the functionality of
610// SetupDiGetDeviceInfoListClass).
611//
613{
614 DWORD cbSize;
615 GUID ClassGuid;
616 HANDLE RemoteMachineHandle;
617 CHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH];
619
621{
622 DWORD cbSize;
623 GUID ClassGuid;
624 HANDLE RemoteMachineHandle;
625 WCHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH];
627
628#ifdef UNICODE
631#else
634#endif
635
636//
637// Class installer function codes
638//
639#define DIF_SELECTDEVICE 0x00000001
640#define DIF_INSTALLDEVICE 0x00000002
641#define DIF_ASSIGNRESOURCES 0x00000003
642#define DIF_PROPERTIES 0x00000004
643#define DIF_REMOVE 0x00000005
644#define DIF_FIRSTTIMESETUP 0x00000006
645#define DIF_FOUNDDEVICE 0x00000007
646#define DIF_SELECTCLASSDRIVERS 0x00000008
647#define DIF_VALIDATECLASSDRIVERS 0x00000009
648#define DIF_INSTALLCLASSDRIVERS 0x0000000A
649#define DIF_CALCDISKSPACE 0x0000000B
650#define DIF_DESTROYPRIVATEDATA 0x0000000C
651#define DIF_VALIDATEDRIVER 0x0000000D
652#define DIF_MOVEDEVICE 0x0000000E
653#define DIF_DETECT 0x0000000F
654#define DIF_INSTALLWIZARD 0x00000010
655#define DIF_DESTROYWIZARDDATA 0x00000011
656#define DIF_PROPERTYCHANGE 0x00000012
657#define DIF_ENABLECLASS 0x00000013
658#define DIF_DETECTVERIFY 0x00000014
659#define DIF_INSTALLDEVICEFILES 0x00000015
660#define DIF_UNREMOVE 0x00000016
661#define DIF_SELECTBESTCOMPATDRV 0x00000017
662#define DIF_ALLOW_INSTALL 0x00000018
663#define DIF_REGISTERDEVICE 0x00000019
664#define DIF_NEWDEVICEWIZARD_PRESELECT 0x0000001A
665#define DIF_NEWDEVICEWIZARD_SELECT 0x0000001B
666#define DIF_NEWDEVICEWIZARD_PREANALYZE 0x0000001C
667#define DIF_NEWDEVICEWIZARD_POSTANALYZE 0x0000001D
668#define DIF_NEWDEVICEWIZARD_FINISHINSTALL 0x0000001E
669#define DIF_UNUSED1 0x0000001F
670#define DIF_INSTALLINTERFACES 0x00000020
671#define DIF_DETECTCANCEL 0x00000021
672#define DIF_REGISTER_COINSTALLERS 0x00000022
673#define DIF_ADDPROPERTYPAGE_ADVANCED 0x00000023
674#define DIF_ADDPROPERTYPAGE_BASIC 0x00000024
675#define DIF_RESERVED1 0x00000025
676#define DIF_TROUBLESHOOTER 0x00000026
677#define DIF_POWERMESSAGEWAKE 0x00000027
678
679typedef UINT DI_FUNCTION; // Function type for device installer
680
681//
682// Device installation parameters structure (associated with a
683// particular device information element, or globally with a device
684// information set)
685//
687{
688 DWORD cbSize;
689 DWORD Flags;
690 DWORD FlagsEx;
691 HWND hwndParent;
692 PSP_FILE_CALLBACK InstallMsgHandler;
693 PVOID InstallMsgHandlerContext;
694 HSPFILEQ FileQueue;
695 ULONG_PTR ClassInstallReserved;
696 DWORD Reserved;
697 CHAR DriverPath[MAX_PATH];
699
701{
702 DWORD cbSize;
703 DWORD Flags;
704 DWORD FlagsEx;
705 HWND hwndParent;
706 PSP_FILE_CALLBACK InstallMsgHandler;
707 PVOID InstallMsgHandlerContext;
708 HSPFILEQ FileQueue;
709 ULONG_PTR ClassInstallReserved;
710 DWORD Reserved;
711 WCHAR DriverPath[MAX_PATH];
713
714#ifdef UNICODE
717#else
720#endif
721
722//
723// SP_DEVINSTALL_PARAMS.Flags values
724//
725// Flags for choosing a device
726//
727#define DI_SHOWOEM 0x00000001L // support Other... button
728#define DI_SHOWCOMPAT 0x00000002L // show compatibility list
729#define DI_SHOWCLASS 0x00000004L // show class list
730#define DI_SHOWALL 0x00000007L // both class & compat list shown
731#define DI_NOVCP \
732 0x00000008L // don't create a new copy queue--use
733 // caller-supplied FileQueue
734#define DI_DIDCOMPAT 0x00000010L // Searched for compatible devices
735#define DI_DIDCLASS 0x00000020L // Searched for class devices
736#define DI_AUTOASSIGNRES 0x00000040L // No UI for resources if possible
737
738// flags returned by DiInstallDevice to indicate need to reboot/restart
739#define DI_NEEDRESTART 0x00000080L // Reboot required to take effect
740#define DI_NEEDREBOOT 0x00000100L // ""
741
742// flags for device installation
743#define DI_NOBROWSE 0x00000200L // no Browse... in InsertDisk
744
745// Flags set by DiBuildDriverInfoList
746#define DI_MULTMFGS \
747 0x00000400L // Set if multiple manufacturers in
748 // class driver list
749
750// Flag indicates that device is disabled
751#define DI_DISABLED 0x00000800L // Set if device disabled
752
753// Flags for Device/Class Properties
754#define DI_GENERALPAGE_ADDED 0x00001000L
755#define DI_RESOURCEPAGE_ADDED 0x00002000L
756
757// Flag to indicate the setting properties for this Device (or class) caused a
758// change so the Dev Mgr UI probably needs to be updatd.
759#define DI_PROPERTIES_CHANGE 0x00004000L
760
761// Flag to indicate that the sorting from the INF file should be used.
762#define DI_INF_IS_SORTED 0x00008000L
763
764// Flag to indicate that only the the INF specified by
765// SP_DEVINSTALL_PARAMS.DriverPath should be searched.
766#define DI_ENUMSINGLEINF 0x00010000L
767
768// Flag that prevents ConfigMgr from removing/re-enumerating devices during
769// device registration, installation, and deletion.
770#define DI_DONOTCALLCONFIGMG 0x00020000L
771
772// The following flag can be used to install a device disabled
773#define DI_INSTALLDISABLED 0x00040000L
774
775// Flag that causes SetupDiBuildDriverInfoList to build a device's compatible
776// driver list from its existing class driver list, instead of the normal INF
777// search.
778#define DI_COMPAT_FROM_CLASS 0x00080000L
779
780// This flag is set if the Class Install params should be used.
781#define DI_CLASSINSTALLPARAMS 0x00100000L
782
783// This flag is set if the caller of DiCallClassInstaller does NOT
784// want the internal default action performed if the Class installer
785// returns ERROR_DI_DO_DEFAULT.
786#define DI_NODI_DEFAULTACTION 0x00200000L
787
788// The setupx flag, DI_NOSYNCPROCESSING (0x00400000L) is not support in the
789// Setup APIs.
790
791// flags for device installation
792#define DI_QUIETINSTALL \
793 0x00800000L // don't confuse the user with
794 // questions or excess info
795#define DI_NOFILECOPY 0x01000000L // No file Copy necessary
796#define DI_FORCECOPY 0x02000000L // Force files to be copied from install path
797#define DI_DRIVERPAGE_ADDED 0x04000000L // Prop provider added Driver page.
798#define DI_USECI_SELECTSTRINGS \
799 0x08000000L // Use Class Installer Provided strings in the Select Device Dlg
800#define DI_OVERRIDE_INFFLAGS 0x10000000L // Override INF flags
801#define DI_PROPS_NOCHANGEUSAGE 0x20000000L // No Enable/Disable in General Props
802
803#define DI_NOSELECTICONS 0x40000000L // No small icons in select device dialogs
804
805#define DI_NOWRITE_IDS 0x80000000L // Don't write HW & Compat IDs on install
806
807//
808// SP_DEVINSTALL_PARAMS.FlagsEx values
809//
810#define DI_FLAGSEX_USEOLDINFSEARCH \
811 0x00000001L // Inf Search functions should not use Index Search
812#define DI_FLAGSEX_AUTOSELECTRANK0 \
813 0x00000002L // SetupDiSelectDevice doesn't prompt user if rank 0 match
814#define DI_FLAGSEX_CI_FAILED 0x00000004L // Failed to Load/Call class installer
815
816#define DI_FLAGSEX_DIDINFOLIST 0x00000010L // Did the Class Info List
817#define DI_FLAGSEX_DIDCOMPATINFO 0x00000020L // Did the Compat Info List
818
819#define DI_FLAGSEX_FILTERCLASSES 0x00000040L
820#define DI_FLAGSEX_SETFAILEDINSTALL 0x00000080L
821#define DI_FLAGSEX_DEVICECHANGE 0x00000100L
822#define DI_FLAGSEX_ALWAYSWRITEIDS 0x00000200L
823#define DI_FLAGSEX_PROPCHANGE_PENDING \
824 0x00000400L // One or more device property sheets have had changes made
825 // to them, and need to have a DIF_PROPERTYCHANGE occur.
826#define DI_FLAGSEX_ALLOWEXCLUDEDDRVS 0x00000800L
827#define DI_FLAGSEX_NOUIONQUERYREMOVE 0x00001000L
828#define DI_FLAGSEX_USECLASSFORCOMPAT \
829 0x00002000L // Use the device's class when building compat drv list.
830 // (Ignored if DI_COMPAT_FROM_CLASS flag is specified.)
831#define DI_FLAGSEX_OLDINF_IN_CLASSLIST \
832 0x00004000L // Search legacy INFs when building class driver list.
833#define DI_FLAGSEX_NO_DRVREG_MODIFY \
834 0x00008000L // Don't run AddReg and DelReg for device's software (driver)
835 // key.
836#define DI_FLAGSEX_IN_SYSTEM_SETUP \
837 0x00010000L // Installation is occurring during initial system setup.
838#define DI_FLAGSEX_INET_DRIVER 0x00020000L // Driver came from Windows Update
839#define DI_FLAGSEX_APPENDDRIVERLIST \
840 0x00040000L // Cause SetupDiBuildDriverInfoList to append
841 // a new driver list to an existing list.
842#define DI_FLAGSEX_PREINSTALLBACKUP \
843 0x00080000L // backup all files required by old inf before install
844#define DI_FLAGSEX_BACKUPONREPLACE \
845 0x00100000L // backup files required by old inf as they are replaced
846#define DI_FLAGSEX_DRIVERLIST_FROM_URL \
847 0x00200000L // build driver list from INF(s) retrieved from URL specified
848 // in SP_DEVINSTALL_PARAMS.DriverPath (empty string means
849 // Windows Update website)
850#define DI_FLAGSEX_RESERVED1 0x00400000L
851#define DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS \
852 0x00800000L // Don't include old Internet drivers when building
853 // a driver list.
854#define DI_FLAGSEX_POWERPAGE_ADDED \
855 0x01000000L // class installer added their own power page
856
857//
858// Class installation parameters header. This must be the first field of any
859// class install parameter structure. The InstallFunction field must be set to
860// the function code corresponding to the structure, and the cbSize field must
861// be set to the size of the header structure. E.g.,
862//
863// SP_ENABLECLASS_PARAMS EnableClassParams;
864//
865// EnableClassParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
866// EnableClassParams.ClassInstallHeader.InstallFunction = DIF_ENABLECLASS;
867//
869{
870 DWORD cbSize;
871 DI_FUNCTION InstallFunction;
873
874//
875// Structure corresponding to a DIF_ENABLECLASS install function.
876//
878{
879 SP_CLASSINSTALL_HEADER ClassInstallHeader;
880 GUID ClassGuid;
881 DWORD EnableMessage;
883
884#define ENABLECLASS_QUERY 0
885#define ENABLECLASS_SUCCESS 1
886#define ENABLECLASS_FAILURE 2
887
888//
889// Structure corresponding to a DIF_MOVEDEVICE install function.
890//
891typedef struct _SP_MOVEDEV_PARAMS
892{
893 SP_CLASSINSTALL_HEADER ClassInstallHeader;
894 SP_DEVINFO_DATA SourceDeviceInfoData;
896
897//
898// Values indicating a change in a device's state
899//
900#define DICS_ENABLE 0x00000001
901#define DICS_DISABLE 0x00000002
902#define DICS_PROPCHANGE 0x00000003
903#define DICS_START 0x00000004
904#define DICS_STOP 0x00000005
905//
906// Values specifying the scope of a device property change
907//
908#define DICS_FLAG_GLOBAL 0x00000001 // make change in all hardware profiles
909#define DICS_FLAG_CONFIGSPECIFIC \
910 0x00000002 // make change in specified profile only
911#define DICS_FLAG_CONFIGGENERAL \
912 0x00000004 // 1 or more hardware profile-specific
913 // changes to follow.
914//
915// Structure corresponding to a DIF_PROPERTYCHANGE install function.
916//
918{
919 SP_CLASSINSTALL_HEADER ClassInstallHeader;
920 DWORD StateChange;
921 DWORD Scope;
922 DWORD HwProfile;
924
925//
926// Structure corresponding to a DIF_REMOVE install function.
927//
929{
930 SP_CLASSINSTALL_HEADER ClassInstallHeader;
931 DWORD Scope;
932 DWORD HwProfile;
934
935#define DI_REMOVEDEVICE_GLOBAL 0x00000001
936#define DI_REMOVEDEVICE_CONFIGSPECIFIC 0x00000002
937
938//
939// Structure corresponding to a DIF_UNREMOVE install function.
940//
942{
943 SP_CLASSINSTALL_HEADER ClassInstallHeader;
944 DWORD Scope;
945 DWORD HwProfile;
947
948#define DI_UNREMOVEDEVICE_CONFIGSPECIFIC 0x00000002
949
950//
951// Structure corresponding to a DIF_SELECTDEVICE install function.
952//
954{
955 SP_CLASSINSTALL_HEADER ClassInstallHeader;
956 CHAR Title[MAX_TITLE_LEN];
957 CHAR Instructions[MAX_INSTRUCTION_LEN];
958 CHAR ListLabel[MAX_LABEL_LEN];
959 CHAR SubTitle[MAX_SUBTITLE_LEN];
960 BYTE Reserved[2]; // DWORD size alignment
962
964{
965 SP_CLASSINSTALL_HEADER ClassInstallHeader;
966 WCHAR Title[MAX_TITLE_LEN];
967 WCHAR Instructions[MAX_INSTRUCTION_LEN];
968 WCHAR ListLabel[MAX_LABEL_LEN];
969 WCHAR SubTitle[MAX_SUBTITLE_LEN];
971
972#ifdef UNICODE
975#else
978#endif
979
980//
981// Callback routine for giving progress notification during detection
982//
983typedef BOOL(CALLBACK* PDETECT_PROGRESS_NOTIFY)(IN PVOID ProgressNotifyParam,
984 IN DWORD DetectComplete);
985
986// where:
987// ProgressNotifyParam - value supplied by caller requesting detection.
988// DetectComplete - Percent completion, to be incremented by class
989// installer, as it steps thru its detection.
990//
991// Return Value - If TRUE, then detection is cancelled. Allows caller
992// requesting detection to stop detection asap.
993//
994
995//
996// Structure corresponding to a DIF_DETECT install function.
997//
999{
1000 SP_CLASSINSTALL_HEADER ClassInstallHeader;
1001 PDETECT_PROGRESS_NOTIFY DetectProgressNotify;
1002 PVOID ProgressNotifyParam;
1004
1005//
1006// 'Add New Device' installation wizard structure (backward-compatibility
1007// only--respond to DIF_NEWDEVICEWIZARD_* requests instead).
1008//
1009// Structure corresponding to a DIF_INSTALLWIZARD install function.
1010// (NOTE: This structure is also applicable for DIF_DESTROYWIZARDDATA,
1011// but DIF_INSTALLWIZARD is the associated function code in the class
1012// installation parameter structure in both cases.)
1013//
1014// Define maximum number of dynamic wizard pages that can be added to
1015// hardware install wizard.
1016//
1017#define MAX_INSTALLWIZARD_DYNAPAGES 20
1018
1020{
1021 SP_CLASSINSTALL_HEADER ClassInstallHeader;
1022 DWORD Flags;
1023 HPROPSHEETPAGE DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES];
1024 DWORD NumDynamicPages;
1025 DWORD DynamicPageFlags;
1026 DWORD PrivateFlags;
1027 LPARAM PrivateData;
1028 HWND hwndWizardDlg;
1030
1031//
1032// SP_INSTALLWIZARD_DATA.Flags values
1033//
1034#define NDW_INSTALLFLAG_DIDFACTDEFS 0x00000001
1035#define NDW_INSTALLFLAG_HARDWAREALLREADYIN 0x00000002
1036#define NDW_INSTALLFLAG_NEEDRESTART DI_NEEDRESTART
1037#define NDW_INSTALLFLAG_NEEDREBOOT DI_NEEDREBOOT
1038#define NDW_INSTALLFLAG_NEEDSHUTDOWN 0x00000200
1039#define NDW_INSTALLFLAG_EXPRESSINTRO 0x00000400
1040#define NDW_INSTALLFLAG_SKIPISDEVINSTALLED 0x00000800
1041#define NDW_INSTALLFLAG_NODETECTEDDEVS 0x00001000
1042#define NDW_INSTALLFLAG_INSTALLSPECIFIC 0x00002000
1043#define NDW_INSTALLFLAG_SKIPCLASSLIST 0x00004000
1044#define NDW_INSTALLFLAG_CI_PICKED_OEM 0x00008000
1045#define NDW_INSTALLFLAG_PCMCIAMODE 0x00010000
1046#define NDW_INSTALLFLAG_PCMCIADEVICE 0x00020000
1047#define NDW_INSTALLFLAG_USERCANCEL 0x00040000
1048#define NDW_INSTALLFLAG_KNOWNCLASS 0x00080000
1049
1050//
1051// SP_INSTALLWIZARD_DATA.DynamicPageFlags values
1052//
1053// This flag is set if a Class installer has added pages to the install wizard.
1054//
1055#define DYNAWIZ_FLAG_PAGESADDED 0x00000001
1056
1057//
1058// Set this flag if you jump to the analyze page, and want it to
1059// handle conflicts for you. NOTE. You will not get control back
1060// in the event of a conflict if you set this flag.
1061//
1062#define DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT 0x00000008
1063
1064//
1065// The following flags are not used by the Windows NT hardware wizard.
1066//
1067#define DYNAWIZ_FLAG_INSTALLDET_NEXT 0x00000002
1068#define DYNAWIZ_FLAG_INSTALLDET_PREV 0x00000004
1069
1070//
1071// Reserve a range of wizard page resource IDs for internal use. Some of
1072// these IDs are for use by class installers that respond to the obsolete
1073// DIF_INSTALLWIZARD/DIF_DESTROYWIZARDDATA messages. These IDs are listed
1074// below.
1075//
1076#define MIN_IDD_DYNAWIZ_RESOURCE_ID 10000
1077#define MAX_IDD_DYNAWIZ_RESOURCE_ID 11000
1078
1079//
1080// Define wizard page resource IDs to be used when adding custom pages to the
1081// hardware install wizard via DIF_INSTALLWIZARD. Pages marked with
1082// (CLASS INSTALLER PROVIDED) _must_ be supplied by the class installer if it
1083// responds to the DIF_INSTALLWIZARD request.
1084//
1085
1086//
1087// Resource ID for the first page that the install wizard will go to after
1088// adding the class installer pages. (CLASS INSTALLER PROVIDED)
1089//
1090#define IDD_DYNAWIZ_FIRSTPAGE 10000
1091
1092//
1093// Resource ID for the page that the Select Device page will go back to.
1094// (CLASS INSTALLER PROVIDED)
1095//
1096#define IDD_DYNAWIZ_SELECT_PREVPAGE 10001
1097
1098//
1099// Resource ID for the page that the Select Device page will go forward to.
1100// (CLASS INSTALLER PROVIDED)
1101//
1102#define IDD_DYNAWIZ_SELECT_NEXTPAGE 10002
1103
1104//
1105// Resource ID for the page that the Analyze dialog should go back to
1106// This will only be used in the event that there is a problem, and the user
1107// selects Back from the analyze proc. (CLASS INSTALLER PROVIDED)
1108//
1109#define IDD_DYNAWIZ_ANALYZE_PREVPAGE 10003
1110
1111//
1112// Resource ID for the page that the Analyze dialog should go to if it
1113// continues from the analyze proc. (CLASS INSTALLER PROVIDED)
1114//
1115#define IDD_DYNAWIZ_ANALYZE_NEXTPAGE 10004
1116
1117//
1118// Resource ID of the hardware install wizard's select device page.
1119// This ID can be used to go directly to the hardware install wizard's select
1120// device page. (This is the resource ID of the Select Device wizard page
1121// retrieved via SetupDiGetWizardPage when SPWPT_SELECTDEVICE is the requested
1122// PageType.)
1123//
1124#define IDD_DYNAWIZ_SELECTDEV_PAGE 10009
1125
1126//
1127// Resource ID of the hardware install wizard's device analysis page.
1128// This ID can be use to go directly to the hardware install wizard's analysis
1129// page.
1130//
1131#define IDD_DYNAWIZ_ANALYZEDEV_PAGE 10010
1132
1133//
1134// Resource ID of the hardware install wizard's install detected devices page.
1135// This ID can be use to go directly to the hardware install wizard's install
1136// detected devices page.
1137//
1138#define IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE 10011
1139
1140//
1141// Resource ID of the hardware install wizard's select class page.
1142// This ID can be use to go directly to the hardware install wizard's select
1143// class page.
1144//
1145#define IDD_DYNAWIZ_SELECTCLASS_PAGE 10012
1146
1147//
1148// The following class installer-provided wizard page resource IDs are not used
1149// by the Windows NT hardware wizard.
1150//
1151#define IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE 10006
1152#define IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE 10007
1153#define IDD_DYNAWIZ_INSTALLDETECTED_NODEVS 10008
1154
1155//
1156// Structure corresponding to the following DIF_NEWDEVICEWIZARD_* install
1157// functions:
1158//
1159// DIF_NEWDEVICEWIZARD_PRESELECT
1160// DIF_NEWDEVICEWIZARD_SELECT
1161// DIF_NEWDEVICEWIZARD_PREANALYZE
1162// DIF_NEWDEVICEWIZARD_POSTANALYZE
1163// DIF_NEWDEVICEWIZARD_FINISHINSTALL
1164//
1166{
1167 SP_CLASSINSTALL_HEADER ClassInstallHeader;
1168 DWORD Flags; // presently unused--must be zero.
1169 HPROPSHEETPAGE DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES];
1170 DWORD NumDynamicPages;
1171 HWND hwndWizardDlg;
1173
1176
1177//
1178// Structure corresponding to the DIF_TROUBLESHOOTER install function
1179//
1181{
1182 SP_CLASSINSTALL_HEADER ClassInstallHeader;
1183 CHAR ChmFile[MAX_PATH];
1184 CHAR HtmlTroubleShooter[MAX_PATH];
1186
1188{
1189 SP_CLASSINSTALL_HEADER ClassInstallHeader;
1190 WCHAR ChmFile[MAX_PATH];
1191 WCHAR HtmlTroubleShooter[MAX_PATH];
1193
1194#ifdef UNICODE
1197#else
1200#endif
1201
1202//
1203// Structure corresponding to the DIF_POWERMESSAGEWAKE install function
1204//
1206{
1207 SP_CLASSINSTALL_HEADER ClassInstallHeader;
1208 CHAR PowerMessageWake[LINE_LEN * 2];
1210
1212{
1213 SP_CLASSINSTALL_HEADER ClassInstallHeader;
1214 WCHAR PowerMessageWake[LINE_LEN * 2];
1216
1217#ifdef UNICODE
1220#else
1223#endif
1224
1225//
1226// Driver information structure (member of a driver info list that may be
1227// associated with a particular device instance, or (globally) with a device
1228// information set)
1229//
1231{
1232 DWORD cbSize;
1233 DWORD DriverType;
1234 ULONG_PTR Reserved;
1235 CHAR Description[LINE_LEN];
1236 CHAR MfgName[LINE_LEN];
1237 CHAR ProviderName[LINE_LEN];
1238 FILETIME DriverDate;
1239 DWORDLONG DriverVersion;
1241
1243{
1244 DWORD cbSize;
1245 DWORD DriverType;
1246 ULONG_PTR Reserved;
1247 WCHAR Description[LINE_LEN];
1248 WCHAR MfgName[LINE_LEN];
1249 WCHAR ProviderName[LINE_LEN];
1250 FILETIME DriverDate;
1251 DWORDLONG DriverVersion;
1253
1254//
1255// Version 1 of the SP_DRVINFO_DATA structures, used only for compatibility
1256// with Windows NT 4.0/Windows 95/98 SETUPAPI.DLL
1257//
1259{
1260 DWORD cbSize;
1261 DWORD DriverType;
1262 ULONG_PTR Reserved;
1263 CHAR Description[LINE_LEN];
1264 CHAR MfgName[LINE_LEN];
1265 CHAR ProviderName[LINE_LEN];
1267
1269{
1270 DWORD cbSize;
1271 DWORD DriverType;
1272 ULONG_PTR Reserved;
1273 WCHAR Description[LINE_LEN];
1274 WCHAR MfgName[LINE_LEN];
1275 WCHAR ProviderName[LINE_LEN];
1277
1278#ifdef UNICODE
1283#else
1288#endif
1289
1290#if USE_SP_DRVINFO_DATA_V1 // use version 1 driver info data structure
1291
1298
1299#else // use version 2 driver info data structure
1300
1307
1308#endif // use current version of driver info data structure
1309
1310//
1311// Driver information details structure (provides detailed information about a
1312// particular driver information structure)
1313//
1315{
1316 DWORD cbSize;
1317 FILETIME InfDate;
1318 DWORD CompatIDsOffset;
1319 DWORD CompatIDsLength;
1320 ULONG_PTR Reserved;
1321 CHAR SectionName[LINE_LEN];
1322 CHAR InfFileName[MAX_PATH];
1323 CHAR DrvDescription[LINE_LEN];
1324 CHAR HardwareID[ANYSIZE_ARRAY];
1326
1328{
1329 DWORD cbSize;
1330 FILETIME InfDate;
1331 DWORD CompatIDsOffset;
1332 DWORD CompatIDsLength;
1333 ULONG_PTR Reserved;
1334 WCHAR SectionName[LINE_LEN];
1335 WCHAR InfFileName[MAX_PATH];
1336 WCHAR DrvDescription[LINE_LEN];
1337 WCHAR HardwareID[ANYSIZE_ARRAY];
1339
1340#ifdef UNICODE
1343#else
1346#endif
1347
1348//
1349// Driver installation parameters (associated with a particular driver
1350// information element)
1351//
1353{
1354 DWORD cbSize;
1355 DWORD Rank;
1356 DWORD Flags;
1357 DWORD_PTR PrivateData;
1358 DWORD Reserved;
1360
1361//
1362// SP_DRVINSTALL_PARAMS.Flags values
1363//
1364#define DNF_DUPDESC 0x00000001 // Multiple providers have same desc
1365#define DNF_OLDDRIVER 0x00000002 // Driver node specifies old/current driver
1366#define DNF_EXCLUDEFROMLIST \
1367 0x00000004 // If set, this driver node will not be
1368 // displayed in any driver select dialogs.
1369#define DNF_NODRIVER \
1370 0x00000008 // if we want to install no driver
1371 // (e.g no mouse drv)
1372#define DNF_LEGACYINF 0x00000010 // this driver node comes from an old-style INF
1373#define DNF_CLASS_DRIVER 0x00000020 // Driver node represents a class driver
1374#define DNF_COMPATIBLE_DRIVER \
1375 0x00000040 // Driver node represents a compatible driver
1376#define DNF_INET_DRIVER 0x00000080 // Driver comes from an internet source
1377#define DNF_UNUSED1 0x00000100
1378#define DNF_INDEXED_DRIVER \
1379 0x00000200 // Driver is contained in the Windows Driver Index
1380#define DNF_OLD_INET_DRIVER \
1381 0x00000400 // Driver came from the Internet, but we don't currently
1382 // have access to it's source files. Never attempt to
1383 // install a driver with this flag!
1384#define DNF_BAD_DRIVER 0x00000800 // Driver node should not be used at all
1385#define DNF_DUPPROVIDER \
1386 0x00001000 // Multiple drivers have the same provider and desc
1387
1388//
1389// Rank values (the lower the Rank number, the better the Rank)
1390//
1391#define DRIVER_HARDWAREID_RANK \
1392 0x00000FFF // Any rank less than or equal to
1393 // this value is a HardwareID match
1394
1395//
1396// Setup callback routine for comparing detection signatures
1397//
1398typedef DWORD(CALLBACK* PSP_DETSIG_CMPPROC)(IN HDEVINFO DeviceInfoSet,
1399 IN PSP_DEVINFO_DATA NewDeviceData,
1401 ExistingDeviceData,
1402 IN PVOID CompareContext OPTIONAL);
1403
1404//
1405// Define context structure handed to co-installers
1406//
1408{
1409 BOOL PostProcessing;
1410 DWORD InstallResult;
1411 PVOID PrivateData;
1413
1414//
1415// Structure containing class image list information.
1416//
1418{
1419 DWORD cbSize;
1420 HIMAGELIST ImageList;
1421 ULONG_PTR Reserved;
1423
1424//
1425// Structure to be passed as first parameter (LPVOID lpv) to
1426// ExtensionPropSheetPageProc entry point in setupapi.dll or to
1427// "EnumPropPages32" or "BasicProperties32" entry points provided by
1428// class/device property page providers. Used to retrieve a handle (or,
1429// potentially, multiple handles) to property pages for a specified property
1430// page type.
1431//
1433{
1434 DWORD cbSize;
1435 DWORD PageRequested;
1436 HDEVINFO DeviceInfoSet;
1437 PSP_DEVINFO_DATA DeviceInfoData;
1439
1440//
1441// Property sheet codes used in SP_PROPSHEETPAGE_REQUEST.PageRequested
1442//
1443#define SPPSR_SELECT_DEVICE_RESOURCES 1 // supplied by setupapi.dll
1444#define SPPSR_ENUM_BASIC_DEVICE_PROPERTIES \
1445 2 // supplied by device's BasicProperties32 provider
1446#define SPPSR_ENUM_ADV_DEVICE_PROPERTIES \
1447 3 // supplied by class and/or device's EnumPropPages32 provider
1448
1449//
1450// Structure used with SetupGetBackupQueue
1451//
1453{
1454 DWORD cbSize;
1455 CHAR FullInfPath[MAX_PATH]; // buffer to hold ANSI pathname of INF file
1456 INT FilenameOffset; // offset in CHAR's of filename part (after '\')
1458
1460{
1461 DWORD cbSize;
1462 WCHAR FullInfPath[MAX_PATH]; // buffer to hold UNICODE pathname of INF file
1463 INT FilenameOffset; // offset in WCHAR's of filename part (after '\')
1465
1466#ifdef UNICODE
1469#else
1472#endif
1473
1474//
1475// Setupapi-specific error codes
1476//
1477// Inf parse outcomes
1478//
1479#define ERROR_EXPECTED_SECTION_NAME \
1480 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0)
1481#define ERROR_BAD_SECTION_NAME_LINE \
1482 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 1)
1483#define ERROR_SECTION_NAME_TOO_LONG \
1484 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 2)
1485#define ERROR_GENERAL_SYNTAX (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 3)
1486//
1487// Inf runtime errors
1488//
1489#define ERROR_WRONG_INF_STYLE \
1490 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x100)
1491#define ERROR_SECTION_NOT_FOUND \
1492 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x101)
1493#define ERROR_LINE_NOT_FOUND \
1494 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x102)
1495#define ERROR_NO_BACKUP (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x103)
1496//
1497// Device Installer/other errors
1498//
1499#define ERROR_NO_ASSOCIATED_CLASS \
1500 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x200)
1501#define ERROR_CLASS_MISMATCH \
1502 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x201)
1503#define ERROR_DUPLICATE_FOUND \
1504 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x202)
1505#define ERROR_NO_DRIVER_SELECTED \
1506 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x203)
1507#define ERROR_KEY_DOES_NOT_EXIST \
1508 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x204)
1509#define ERROR_INVALID_DEVINST_NAME \
1510 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x205)
1511#define ERROR_INVALID_CLASS \
1512 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x206)
1513#define ERROR_DEVINST_ALREADY_EXISTS \
1514 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x207)
1515#define ERROR_DEVINFO_NOT_REGISTERED \
1516 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x208)
1517#define ERROR_INVALID_REG_PROPERTY \
1518 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x209)
1519#define ERROR_NO_INF (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20A)
1520#define ERROR_NO_SUCH_DEVINST \
1521 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20B)
1522#define ERROR_CANT_LOAD_CLASS_ICON \
1523 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20C)
1524#define ERROR_INVALID_CLASS_INSTALLER \
1525 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20D)
1526#define ERROR_DI_DO_DEFAULT \
1527 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20E)
1528#define ERROR_DI_NOFILECOPY \
1529 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20F)
1530#define ERROR_INVALID_HWPROFILE \
1531 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x210)
1532#define ERROR_NO_DEVICE_SELECTED \
1533 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x211)
1534#define ERROR_DEVINFO_LIST_LOCKED \
1535 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x212)
1536#define ERROR_DEVINFO_DATA_LOCKED \
1537 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x213)
1538#define ERROR_DI_BAD_PATH \
1539 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x214)
1540#define ERROR_NO_CLASSINSTALL_PARAMS \
1541 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x215)
1542#define ERROR_FILEQUEUE_LOCKED \
1543 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x216)
1544#define ERROR_BAD_SERVICE_INSTALLSECT \
1545 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x217)
1546#define ERROR_NO_CLASS_DRIVER_LIST \
1547 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x218)
1548#define ERROR_NO_ASSOCIATED_SERVICE \
1549 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x219)
1550#define ERROR_NO_DEFAULT_DEVICE_INTERFACE \
1551 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21A)
1552#define ERROR_DEVICE_INTERFACE_ACTIVE \
1553 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21B)
1554#define ERROR_DEVICE_INTERFACE_REMOVED \
1555 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21C)
1556#define ERROR_BAD_INTERFACE_INSTALLSECT \
1557 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21D)
1558#define ERROR_NO_SUCH_INTERFACE_CLASS \
1559 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21E)
1560#define ERROR_INVALID_REFERENCE_STRING \
1561 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21F)
1562#define ERROR_INVALID_MACHINENAME \
1563 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x220)
1564#define ERROR_REMOTE_COMM_FAILURE \
1565 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x221)
1566#define ERROR_MACHINE_UNAVAILABLE \
1567 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x222)
1568#define ERROR_NO_CONFIGMGR_SERVICES \
1569 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x223)
1570#define ERROR_INVALID_PROPPAGE_PROVIDER \
1571 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x224)
1572#define ERROR_NO_SUCH_DEVICE_INTERFACE \
1573 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x225)
1574#define ERROR_DI_POSTPROCESSING_REQUIRED \
1575 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x226)
1576#define ERROR_INVALID_COINSTALLER \
1577 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x227)
1578#define ERROR_NO_COMPAT_DRIVERS \
1579 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x228)
1580#define ERROR_NO_DEVICE_ICON \
1581 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x229)
1582#define ERROR_INVALID_INF_LOGCONFIG \
1583 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22A)
1584#define ERROR_DI_DONT_INSTALL \
1585 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22B)
1586#define ERROR_INVALID_FILTER_DRIVER \
1587 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22C)
1588#define ERROR_NON_WINDOWS_NT_DRIVER \
1589 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22D)
1590#define ERROR_NON_WINDOWS_DRIVER \
1591 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22E)
1592#define ERROR_NO_CATALOG_FOR_OEM_INF \
1593 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22F)
1594#define ERROR_DEVINSTALL_QUEUE_NONNATIVE \
1595 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x230)
1596#define ERROR_NOT_DISABLEABLE \
1597 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x231)
1598#define ERROR_CANT_REMOVE_DEVINST \
1599 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x232)
1600
1601//
1602// Backward compatibility--do not use.
1603//
1604#define ERROR_NO_DEFAULT_INTERFACE_DEVICE ERROR_NO_DEFAULT_DEVICE_INTERFACE
1605#define ERROR_INTERFACE_DEVICE_ACTIVE ERROR_DEVICE_INTERFACE_ACTIVE
1606#define ERROR_INTERFACE_DEVICE_REMOVED ERROR_DEVICE_INTERFACE_REMOVED
1607#define ERROR_NO_SUCH_INTERFACE_DEVICE ERROR_NO_SUCH_DEVICE_INTERFACE
1608
1609//
1610// Win9x migration DLL error code
1611//
1612#define ERROR_NOT_INSTALLED \
1613 (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x1000)
1614
1615WINSETUPAPI
1616BOOL WINAPI
1617SetupGetInfInformationA(IN LPCVOID InfSpec,
1618 IN DWORD SearchControl,
1619 OUT PSP_INF_INFORMATION ReturnBuffer,
1620 OPTIONAL IN DWORD ReturnBufferSize,
1621 OUT PDWORD RequiredSize OPTIONAL);
1622
1623WINSETUPAPI
1624BOOL WINAPI
1625SetupGetInfInformationW(IN LPCVOID InfSpec,
1626 IN DWORD SearchControl,
1627 OUT PSP_INF_INFORMATION ReturnBuffer,
1628 OPTIONAL IN DWORD ReturnBufferSize,
1629 OUT PDWORD RequiredSize OPTIONAL);
1630
1631//
1632// SearchControl flags for SetupGetInfInformation
1633//
1634#define INFINFO_INF_SPEC_IS_HINF 1
1635#define INFINFO_INF_NAME_IS_ABSOLUTE 2
1636#define INFINFO_DEFAULT_SEARCH 3
1637#define INFINFO_REVERSE_DEFAULT_SEARCH 4
1638#define INFINFO_INF_PATH_LIST_SEARCH 5
1639
1640#ifdef UNICODE
1641#define SetupGetInfInformation SetupGetInfInformationW
1642#else
1643#define SetupGetInfInformation SetupGetInfInformationA
1644#endif
1645
1646WINSETUPAPI
1647BOOL WINAPI
1648SetupQueryInfFileInformationA(IN PSP_INF_INFORMATION InfInformation,
1649 IN UINT InfIndex,
1650 OUT PSTR ReturnBuffer,
1651 OPTIONAL IN DWORD ReturnBufferSize,
1652 OUT PDWORD RequiredSize OPTIONAL);
1653
1654WINSETUPAPI
1655BOOL WINAPI
1656SetupQueryInfFileInformationW(IN PSP_INF_INFORMATION InfInformation,
1657 IN UINT InfIndex,
1658 OUT PWSTR ReturnBuffer,
1659 OPTIONAL IN DWORD ReturnBufferSize,
1660 OUT PDWORD RequiredSize OPTIONAL);
1661
1662#ifdef UNICODE
1663#define SetupQueryInfFileInformation SetupQueryInfFileInformationW
1664#else
1665#define SetupQueryInfFileInformation SetupQueryInfFileInformationA
1666#endif
1667
1668WINSETUPAPI
1669BOOL WINAPI
1670SetupQueryInfOriginalFileInformationA(
1671 IN PSP_INF_INFORMATION InfInformation,
1672 IN UINT InfIndex,
1673 IN PSP_ALTPLATFORM_INFO AlternatePlatformInfo,
1674 OPTIONAL OUT PSP_ORIGINAL_FILE_INFO_A OriginalFileInfo);
1675
1676WINSETUPAPI
1677BOOL WINAPI
1678SetupQueryInfOriginalFileInformationW(
1679 IN PSP_INF_INFORMATION InfInformation,
1680 IN UINT InfIndex,
1681 IN PSP_ALTPLATFORM_INFO AlternatePlatformInfo,
1682 OPTIONAL OUT PSP_ORIGINAL_FILE_INFO_W OriginalFileInfo);
1683
1684#ifdef UNICODE
1685#define SetupQueryInfOriginalFileInformation \
1686 SetupQueryInfOriginalFileInformationW
1687#else
1688#define SetupQueryInfOriginalFileInformation \
1689 SetupQueryInfOriginalFileInformationA
1690#endif
1691
1692WINSETUPAPI
1693BOOL WINAPI
1694SetupQueryInfVersionInformationA(IN PSP_INF_INFORMATION InfInformation,
1695 IN UINT InfIndex,
1696 IN PCSTR Key,
1697 OPTIONAL OUT PSTR ReturnBuffer,
1698 OPTIONAL IN DWORD ReturnBufferSize,
1699 OUT PDWORD RequiredSize OPTIONAL);
1700
1701WINSETUPAPI
1702BOOL WINAPI
1703SetupQueryInfVersionInformationW(IN PSP_INF_INFORMATION InfInformation,
1704 IN UINT InfIndex,
1705 IN PCWSTR Key,
1706 OPTIONAL OUT PWSTR ReturnBuffer,
1707 OPTIONAL IN DWORD ReturnBufferSize,
1708 OUT PDWORD RequiredSize OPTIONAL);
1709
1710#ifdef UNICODE
1711#define SetupQueryInfVersionInformation SetupQueryInfVersionInformationW
1712#else
1713#define SetupQueryInfVersionInformation SetupQueryInfVersionInformationA
1714#endif
1715
1716WINSETUPAPI
1717BOOL WINAPI
1718SetupGetInfFileListA(IN PCSTR DirectoryPath,
1719 OPTIONAL IN DWORD InfStyle,
1720 OUT PSTR ReturnBuffer,
1721 OPTIONAL IN DWORD ReturnBufferSize,
1722 OUT PDWORD RequiredSize OPTIONAL);
1723
1724WINSETUPAPI
1725BOOL WINAPI
1726SetupGetInfFileListW(IN PCWSTR DirectoryPath,
1727 OPTIONAL IN DWORD InfStyle,
1728 OUT PWSTR ReturnBuffer,
1729 OPTIONAL IN DWORD ReturnBufferSize,
1730 OUT PDWORD RequiredSize OPTIONAL);
1731
1732#ifdef UNICODE
1733#define SetupGetInfFileList SetupGetInfFileListW
1734#else
1735#define SetupGetInfFileList SetupGetInfFileListA
1736#endif
1737
1738WINSETUPAPI
1739HINF WINAPI
1740SetupOpenInfFileW(IN PCWSTR FileName,
1741 IN PCWSTR InfClass,
1742 OPTIONAL IN DWORD InfStyle,
1743 OUT PUINT ErrorLine OPTIONAL);
1744
1745WINSETUPAPI
1746HINF WINAPI
1747SetupOpenInfFileA(IN PCSTR FileName,
1748 IN PCSTR InfClass,
1749 OPTIONAL IN DWORD InfStyle,
1750 OUT PUINT ErrorLine OPTIONAL);
1751
1752#ifdef UNICODE
1753#define SetupOpenInfFile SetupOpenInfFileW
1754#else
1755#define SetupOpenInfFile SetupOpenInfFileA
1756#endif
1757
1758WINSETUPAPI
1759HINF WINAPI SetupOpenMasterInf(VOID);
1760
1761WINSETUPAPI
1762BOOL WINAPI
1763SetupOpenAppendInfFileW(IN PCWSTR FileName,
1764 OPTIONAL IN HINF InfHandle,
1765 OUT PUINT ErrorLine OPTIONAL);
1766
1767WINSETUPAPI
1768BOOL WINAPI
1769SetupOpenAppendInfFileA(IN PCSTR FileName,
1770 OPTIONAL IN HINF InfHandle,
1771 OUT PUINT ErrorLine OPTIONAL);
1772
1773#ifdef UNICODE
1774#define SetupOpenAppendInfFile SetupOpenAppendInfFileW
1775#else
1776#define SetupOpenAppendInfFile SetupOpenAppendInfFileA
1777#endif
1778
1779WINSETUPAPI
1780VOID WINAPI
1781SetupCloseInfFile(IN HINF InfHandle);
1782
1783WINSETUPAPI
1784BOOL WINAPI
1785SetupFindFirstLineA(IN HINF InfHandle,
1786 IN PCSTR Section,
1787 IN PCSTR Key,
1788 OPTIONAL OUT PINFCONTEXT Context);
1789
1790WINSETUPAPI
1791BOOL WINAPI
1792SetupFindFirstLineW(IN HINF InfHandle,
1793 IN PCWSTR Section,
1794 IN PCWSTR Key,
1795 OPTIONAL OUT PINFCONTEXT Context);
1796
1797#ifdef UNICODE
1798#define SetupFindFirstLine SetupFindFirstLineW
1799#else
1800#define SetupFindFirstLine SetupFindFirstLineA
1801#endif
1802
1803WINSETUPAPI
1804BOOL WINAPI
1805SetupFindNextLine(IN PINFCONTEXT ContextIn, OUT PINFCONTEXT ContextOut);
1806
1807WINSETUPAPI
1808BOOL WINAPI
1809SetupFindNextMatchLineA(IN PINFCONTEXT ContextIn,
1810 IN PCSTR Key,
1811 OPTIONAL OUT PINFCONTEXT ContextOut);
1812
1813WINSETUPAPI
1814BOOL WINAPI
1815SetupFindNextMatchLineW(IN PINFCONTEXT ContextIn,
1816 IN PCWSTR Key,
1817 OPTIONAL OUT PINFCONTEXT ContextOut);
1818
1819#ifdef UNICODE
1820#define SetupFindNextMatchLine SetupFindNextMatchLineW
1821#else
1822#define SetupFindNextMatchLine SetupFindNextMatchLineA
1823#endif
1824
1825WINSETUPAPI
1826BOOL WINAPI
1827SetupGetLineByIndexA(IN HINF InfHandle,
1828 IN PCSTR Section,
1829 IN DWORD Index,
1830 OUT PINFCONTEXT Context);
1831
1832WINSETUPAPI
1833BOOL WINAPI
1834SetupGetLineByIndexW(IN HINF InfHandle,
1835 IN PCWSTR Section,
1836 IN DWORD Index,
1837 OUT PINFCONTEXT Context);
1838
1839#ifdef UNICODE
1840#define SetupGetLineByIndex SetupGetLineByIndexW
1841#else
1842#define SetupGetLineByIndex SetupGetLineByIndexA
1843#endif
1844
1845WINSETUPAPI
1846LONG WINAPI
1847SetupGetLineCountA(IN HINF InfHandle, IN PCSTR Section);
1848
1849WINSETUPAPI
1850LONG WINAPI
1851SetupGetLineCountW(IN HINF InfHandle, IN PCWSTR Section);
1852
1853#ifdef UNICODE
1854#define SetupGetLineCount SetupGetLineCountW
1855#else
1856#define SetupGetLineCount SetupGetLineCountA
1857#endif
1858
1859WINSETUPAPI
1860BOOL WINAPI
1861SetupGetLineTextA(IN PINFCONTEXT Context,
1862 OPTIONAL IN HINF InfHandle,
1863 OPTIONAL IN PCSTR Section,
1864 OPTIONAL IN PCSTR Key,
1865 OPTIONAL OUT PSTR ReturnBuffer,
1866 OPTIONAL IN DWORD ReturnBufferSize,
1867 OUT PDWORD RequiredSize OPTIONAL);
1868
1869WINSETUPAPI
1870BOOL WINAPI
1871SetupGetLineTextW(IN PINFCONTEXT Context,
1872 OPTIONAL IN HINF InfHandle,
1873 OPTIONAL IN PCWSTR Section,
1874 OPTIONAL IN PCWSTR Key,
1875 OPTIONAL OUT PWSTR ReturnBuffer,
1876 OPTIONAL IN DWORD ReturnBufferSize,
1877 OUT PDWORD RequiredSize OPTIONAL);
1878
1879#ifdef UNICODE
1880#define SetupGetLineText SetupGetLineTextW
1881#else
1882#define SetupGetLineText SetupGetLineTextA
1883#endif
1884
1885WINSETUPAPI
1886DWORD
1887WINAPI
1888SetupGetFieldCount(IN PINFCONTEXT Context);
1889
1890WINSETUPAPI
1891BOOL WINAPI
1892SetupGetStringFieldA(IN PINFCONTEXT Context,
1893 IN DWORD FieldIndex,
1894 OUT PSTR ReturnBuffer,
1895 OPTIONAL IN DWORD ReturnBufferSize,
1896 OUT PDWORD RequiredSize OPTIONAL);
1897
1898WINSETUPAPI
1899BOOL WINAPI
1900SetupGetStringFieldW(IN PINFCONTEXT Context,
1901 IN DWORD FieldIndex,
1902 OUT PWSTR ReturnBuffer,
1903 OPTIONAL IN DWORD ReturnBufferSize,
1904 OUT PDWORD RequiredSize OPTIONAL);
1905
1906#ifdef UNICODE
1907#define SetupGetStringField SetupGetStringFieldW
1908#else
1909#define SetupGetStringField SetupGetStringFieldA
1910#endif
1911
1912WINSETUPAPI
1913BOOL WINAPI
1914SetupGetIntField(IN PINFCONTEXT Context,
1915 IN DWORD FieldIndex,
1916 OUT PINT IntegerValue);
1917
1918WINSETUPAPI
1919BOOL WINAPI
1920SetupGetMultiSzFieldA(IN PINFCONTEXT Context,
1921 IN DWORD FieldIndex,
1922 OUT PSTR ReturnBuffer,
1923 OPTIONAL IN DWORD ReturnBufferSize,
1924 OUT LPDWORD RequiredSize OPTIONAL);
1925
1926WINSETUPAPI
1927BOOL WINAPI
1928SetupGetMultiSzFieldW(IN PINFCONTEXT Context,
1929 IN DWORD FieldIndex,
1930 OUT PWSTR ReturnBuffer,
1931 OPTIONAL IN DWORD ReturnBufferSize,
1932 OUT LPDWORD RequiredSize OPTIONAL);
1933
1934#ifdef UNICODE
1935#define SetupGetMultiSzField SetupGetMultiSzFieldW
1936#else
1937#define SetupGetMultiSzField SetupGetMultiSzFieldA
1938#endif
1939
1940WINSETUPAPI
1941BOOL WINAPI
1942SetupGetBinaryField(IN PINFCONTEXT Context,
1943 IN DWORD FieldIndex,
1944 OUT PBYTE ReturnBuffer,
1945 OPTIONAL IN DWORD ReturnBufferSize,
1946 OUT LPDWORD RequiredSize OPTIONAL);
1947
1948WINSETUPAPI
1949DWORD
1950WINAPI
1951SetupGetFileCompressionInfoA(IN PCSTR SourceFileName,
1952 OUT PSTR* ActualSourceFileName,
1953 OUT PDWORD SourceFileSize,
1954 OUT PDWORD TargetFileSize,
1955 OUT PUINT CompressionType);
1956
1957WINSETUPAPI
1958DWORD
1959WINAPI
1960SetupGetFileCompressionInfoW(IN PCWSTR SourceFileName,
1961 OUT PWSTR* ActualSourceFileName,
1962 OUT PDWORD SourceFileSize,
1963 OUT PDWORD TargetFileSize,
1964 OUT PUINT CompressionType);
1965
1966#ifdef UNICODE
1967#define SetupGetFileCompressionInfo SetupGetFileCompressionInfoW
1968#else
1969#define SetupGetFileCompressionInfo SetupGetFileCompressionInfoA
1970#endif
1971
1972//
1973// Compression types
1974//
1975#define FILE_COMPRESSION_NONE 0
1976#define FILE_COMPRESSION_WINLZA 1
1977#define FILE_COMPRESSION_MSZIP 2
1978#define FILE_COMPRESSION_NTCAB 3
1979
1980WINSETUPAPI
1981DWORD
1982WINAPI
1983SetupDecompressOrCopyFileA(IN PCSTR SourceFileName,
1984 IN PCSTR TargetFileName,
1985 IN PUINT CompressionType OPTIONAL);
1986
1987WINSETUPAPI
1988DWORD
1989WINAPI
1990SetupDecompressOrCopyFileW(IN PCWSTR SourceFileName,
1991 IN PCWSTR TargetFileName,
1992 IN PUINT CompressionType OPTIONAL);
1993
1994#ifdef UNICODE
1995#define SetupDecompressOrCopyFile SetupDecompressOrCopyFileW
1996#else
1997#define SetupDecompressOrCopyFile SetupDecompressOrCopyFileA
1998#endif
1999
2000WINSETUPAPI
2001BOOL WINAPI
2002SetupGetSourceFileLocationA(IN HINF InfHandle,
2003 IN PINFCONTEXT InfContext,
2004 OPTIONAL IN PCSTR FileName,
2005 OPTIONAL OUT PUINT SourceId,
2006 OUT PSTR ReturnBuffer,
2007 OPTIONAL IN DWORD ReturnBufferSize,
2008 OUT PDWORD RequiredSize OPTIONAL);
2009
2010WINSETUPAPI
2011BOOL WINAPI
2012SetupGetSourceFileLocationW(IN HINF InfHandle,
2013 IN PINFCONTEXT InfContext,
2014 OPTIONAL IN PCWSTR FileName,
2015 OPTIONAL OUT PUINT SourceId,
2016 OUT PWSTR ReturnBuffer,
2017 OPTIONAL IN DWORD ReturnBufferSize,
2018 OUT PDWORD RequiredSize OPTIONAL);
2019
2020#ifdef UNICODE
2021#define SetupGetSourceFileLocation SetupGetSourceFileLocationW
2022#else
2023#define SetupGetSourceFileLocation SetupGetSourceFileLocationA
2024#endif
2025
2026WINSETUPAPI
2027BOOL WINAPI
2028SetupGetSourceFileSizeA(IN HINF InfHandle,
2029 IN PINFCONTEXT InfContext,
2030 OPTIONAL IN PCSTR FileName,
2031 OPTIONAL IN PCSTR Section,
2032 OPTIONAL OUT PDWORD FileSize,
2033 IN UINT RoundingFactor OPTIONAL);
2034
2035WINSETUPAPI
2036BOOL WINAPI
2037SetupGetSourceFileSizeW(IN HINF InfHandle,
2038 IN PINFCONTEXT InfContext,
2039 OPTIONAL IN PCWSTR FileName,
2040 OPTIONAL IN PCWSTR Section,
2041 OPTIONAL OUT PDWORD FileSize,
2042 IN UINT RoundingFactor OPTIONAL);
2043
2044#ifdef UNICODE
2045#define SetupGetSourceFileSize SetupGetSourceFileSizeW
2046#else
2047#define SetupGetSourceFileSize SetupGetSourceFileSizeA
2048#endif
2049
2050WINSETUPAPI
2051BOOL WINAPI
2052SetupGetTargetPathA(IN HINF InfHandle,
2053 IN PINFCONTEXT InfContext,
2054 OPTIONAL IN PCSTR Section,
2055 OPTIONAL OUT PSTR ReturnBuffer,
2056 OPTIONAL IN DWORD ReturnBufferSize,
2057 OUT PDWORD RequiredSize OPTIONAL);
2058
2059WINSETUPAPI
2060BOOL WINAPI
2061SetupGetTargetPathW(IN HINF InfHandle,
2062 IN PINFCONTEXT InfContext,
2063 OPTIONAL IN PCWSTR Section,
2064 OPTIONAL OUT PWSTR ReturnBuffer,
2065 OPTIONAL IN DWORD ReturnBufferSize,
2066 OUT PDWORD RequiredSize OPTIONAL);
2067
2068#ifdef UNICODE
2069#define SetupGetTargetPath SetupGetTargetPathW
2070#else
2071#define SetupGetTargetPath SetupGetTargetPathA
2072#endif
2073
2074//
2075// Define flags for SourceList APIs.
2076//
2077#define SRCLIST_TEMPORARY 0x00000001
2078#define SRCLIST_NOBROWSE 0x00000002
2079#define SRCLIST_SYSTEM 0x00000010
2080#define SRCLIST_USER 0x00000020
2081#define SRCLIST_SYSIFADMIN 0x00000040
2082#define SRCLIST_SUBDIRS 0x00000100
2083#define SRCLIST_APPEND 0x00000200
2084#define SRCLIST_NOSTRIPPLATFORM 0x00000400
2085
2086WINSETUPAPI
2087BOOL WINAPI
2088SetupSetSourceListA(IN DWORD Flags, IN PCSTR* SourceList, IN UINT SourceCount);
2089
2090WINSETUPAPI
2091BOOL WINAPI
2092SetupSetSourceListW(IN DWORD Flags, IN PCWSTR* SourceList, IN UINT SourceCount);
2093
2094#ifdef UNICODE
2095#define SetupSetSourceList SetupSetSourceListW
2096#else
2097#define SetupSetSourceList SetupSetSourceListA
2098#endif
2099
2100WINSETUPAPI
2101BOOL WINAPI SetupCancelTemporarySourceList(VOID);
2102
2103WINSETUPAPI
2104BOOL WINAPI
2105SetupAddToSourceListA(IN DWORD Flags, IN PCSTR Source);
2106
2107WINSETUPAPI
2108BOOL WINAPI
2109SetupAddToSourceListW(IN DWORD Flags, IN PCWSTR Source);
2110
2111#ifdef UNICODE
2112#define SetupAddToSourceList SetupAddToSourceListW
2113#else
2114#define SetupAddToSourceList SetupAddToSourceListA
2115#endif
2116
2117WINSETUPAPI
2118BOOL WINAPI
2119SetupRemoveFromSourceListA(IN DWORD Flags, IN PCSTR Source);
2120
2121WINSETUPAPI
2122BOOL WINAPI
2123SetupRemoveFromSourceListW(IN DWORD Flags, IN PCWSTR Source);
2124
2125#ifdef UNICODE
2126#define SetupRemoveFromSourceList SetupRemoveFromSourceListW
2127#else
2128#define SetupRemoveFromSourceList SetupRemoveFromSourceListA
2129#endif
2130
2131WINSETUPAPI
2132BOOL WINAPI
2133SetupQuerySourceListA(IN DWORD Flags, OUT PCSTR** List, OUT PUINT Count);
2134
2135WINSETUPAPI
2136BOOL WINAPI
2137SetupQuerySourceListW(IN DWORD Flags, OUT PCWSTR** List, OUT PUINT Count);
2138
2139#ifdef UNICODE
2140#define SetupQuerySourceList SetupQuerySourceListW
2141#else
2142#define SetupQuerySourceList SetupQuerySourceListA
2143#endif
2144
2145WINSETUPAPI
2146BOOL WINAPI
2147SetupFreeSourceListA(IN OUT PCSTR** List, IN UINT Count);
2148
2149WINSETUPAPI
2150BOOL WINAPI
2151SetupFreeSourceListW(IN OUT PCWSTR** List, IN UINT Count);
2152
2153#ifdef UNICODE
2154#define SetupFreeSourceList SetupFreeSourceListW
2155#else
2156#define SetupFreeSourceList SetupFreeSourceListA
2157#endif
2158
2159WINSETUPAPI
2160UINT WINAPI
2161SetupPromptForDiskA(IN HWND hwndParent,
2162 IN PCSTR DialogTitle,
2163 OPTIONAL IN PCSTR DiskName,
2164 OPTIONAL IN PCSTR PathToSource,
2165 OPTIONAL IN PCSTR FileSought,
2166 IN PCSTR TagFile,
2167 OPTIONAL IN DWORD DiskPromptStyle,
2168 OUT PSTR PathBuffer,
2169 IN DWORD PathBufferSize,
2170 OUT PDWORD PathRequiredSize);
2171
2172WINSETUPAPI
2173UINT WINAPI
2174SetupPromptForDiskW(IN HWND hwndParent,
2175 IN PCWSTR DialogTitle,
2176 OPTIONAL IN PCWSTR DiskName,
2177 OPTIONAL IN PCWSTR PathToSource,
2178 OPTIONAL IN PCWSTR FileSought,
2179 IN PCWSTR TagFile,
2180 OPTIONAL IN DWORD DiskPromptStyle,
2181 OUT PWSTR PathBuffer,
2182 IN DWORD PathBufferSize,
2183 OUT PDWORD PathRequiredSize);
2184
2185#ifdef UNICODE
2186#define SetupPromptForDisk SetupPromptForDiskW
2187#else
2188#define SetupPromptForDisk SetupPromptForDiskA
2189#endif
2190
2191WINSETUPAPI
2192UINT WINAPI
2193SetupCopyErrorA(IN HWND hwndParent,
2194 IN PCSTR DialogTitle,
2195 OPTIONAL IN PCSTR DiskName,
2196 OPTIONAL IN PCSTR PathToSource,
2197 IN PCSTR SourceFile,
2198 IN PCSTR TargetPathFile,
2199 OPTIONAL IN UINT Win32ErrorCode,
2200 IN DWORD Style,
2201 OUT PSTR PathBuffer,
2202 OPTIONAL IN DWORD PathBufferSize,
2203 OUT PDWORD PathRequiredSize OPTIONAL);
2204
2205WINSETUPAPI
2206UINT WINAPI
2207SetupCopyErrorW(IN HWND hwndParent,
2208 IN PCWSTR DialogTitle,
2209 OPTIONAL IN PCWSTR DiskName,
2210 OPTIONAL IN PCWSTR PathToSource,
2211 IN PCWSTR SourceFile,
2212 IN PCWSTR TargetPathFile,
2213 OPTIONAL IN UINT Win32ErrorCode,
2214 IN DWORD Style,
2215 OUT PWSTR PathBuffer,
2216 OPTIONAL IN DWORD PathBufferSize,
2217 OUT PDWORD PathRequiredSize OPTIONAL);
2218
2219#ifdef UNICODE
2220#define SetupCopyError SetupCopyErrorW
2221#else
2222#define SetupCopyError SetupCopyErrorA
2223#endif
2224
2225WINSETUPAPI
2226UINT WINAPI
2227SetupRenameErrorA(IN HWND hwndParent,
2228 IN PCSTR DialogTitle,
2229 OPTIONAL IN PCSTR SourceFile,
2230 IN PCSTR TargetFile,
2231 IN UINT Win32ErrorCode,
2232 IN DWORD Style);
2233
2234WINSETUPAPI
2235UINT WINAPI
2236SetupRenameErrorW(IN HWND hwndParent,
2237 IN PCWSTR DialogTitle,
2238 OPTIONAL IN PCWSTR SourceFile,
2239 IN PCWSTR TargetFile,
2240 IN UINT Win32ErrorCode,
2241 IN DWORD Style);
2242
2243#ifdef UNICODE
2244#define SetupRenameError SetupRenameErrorW
2245#else
2246#define SetupRenameError SetupRenameErrorA
2247#endif
2248
2249WINSETUPAPI
2250UINT WINAPI
2251SetupDeleteErrorA(IN HWND hwndParent,
2252 IN PCSTR DialogTitle,
2253 OPTIONAL IN PCSTR File,
2254 IN UINT Win32ErrorCode,
2255 IN DWORD Style);
2256
2257WINSETUPAPI
2258UINT WINAPI
2259SetupDeleteErrorW(IN HWND hwndParent,
2260 IN PCWSTR DialogTitle,
2261 OPTIONAL IN PCWSTR File,
2262 IN UINT Win32ErrorCode,
2263 IN DWORD Style);
2264
2265#ifdef UNICODE
2266#define SetupDeleteError SetupDeleteErrorW
2267#else
2268#define SetupDeleteError SetupDeleteErrorA
2269#endif
2270
2271WINSETUPAPI
2272UINT WINAPI
2273SetupBackupErrorA(IN HWND hwndParent,
2274 IN PCSTR DialogTitle,
2275 OPTIONAL IN PCSTR BackupFile,
2276 IN PCSTR TargetFile,
2277 IN UINT Win32ErrorCode,
2278 IN DWORD Style);
2279
2280WINSETUPAPI
2281UINT WINAPI
2282SetupBackupErrorW(IN HWND hwndParent,
2283 IN PCWSTR DialogTitle,
2284 OPTIONAL IN PCWSTR BackupFile,
2285 IN PCWSTR TargetFile,
2286 IN UINT Win32ErrorCode,
2287 IN DWORD Style);
2288
2289#ifdef UNICODE
2290#define SetupBackupError SetupBackupErrorW
2291#else
2292#define SetupBackupError SetupBackupErrorA
2293#endif
2294
2295//
2296// Styles for SetupPromptForDisk, SetupCopyError,
2297// SetupRenameError, SetupDeleteError
2298//
2299#define IDF_NOBROWSE 0x00000001
2300#define IDF_NOSKIP 0x00000002
2301#define IDF_NODETAILS 0x00000004
2302#define IDF_NOCOMPRESSED 0x00000008
2303#define IDF_CHECKFIRST 0x00000100
2304#define IDF_NOBEEP 0x00000200
2305#define IDF_NOFOREGROUND 0x00000400
2306#define IDF_WARNIFSKIP 0x00000800
2307#define IDF_OEMDISK 0x80000000
2308
2309//
2310// Return values for SetupPromptForDisk, SetupCopyError,
2311// SetupRenameError, SetupDeleteError, SetupBackupError
2312//
2313#define DPROMPT_SUCCESS 0
2314#define DPROMPT_CANCEL 1
2315#define DPROMPT_SKIPFILE 2
2316#define DPROMPT_BUFFERTOOSMALL 3
2317#define DPROMPT_OUTOFMEMORY 4
2318
2319WINSETUPAPI
2320BOOL WINAPI
2321SetupSetDirectoryIdA(IN HINF InfHandle,
2322 IN DWORD Id,
2323 OPTIONAL IN PCSTR Directory OPTIONAL);
2324
2325WINSETUPAPI
2326BOOL WINAPI
2327SetupSetDirectoryIdW(IN HINF InfHandle,
2328 IN DWORD Id,
2329 OPTIONAL IN PCWSTR Directory OPTIONAL);
2330
2331#ifdef UNICODE
2332#define SetupSetDirectoryId SetupSetDirectoryIdW
2333#else
2334#define SetupSetDirectoryId SetupSetDirectoryIdA
2335#endif
2336
2337WINSETUPAPI
2338BOOL WINAPI
2339SetupSetDirectoryIdExA(IN HINF InfHandle,
2340 IN DWORD Id,
2341 OPTIONAL IN PCSTR Directory,
2342 OPTIONAL IN DWORD Flags,
2343 IN DWORD Reserved1,
2344 IN PVOID Reserved2);
2345
2346WINSETUPAPI
2347BOOL WINAPI
2348SetupSetDirectoryIdExW(IN HINF InfHandle,
2349 IN DWORD Id,
2350 OPTIONAL IN PCWSTR Directory,
2351 OPTIONAL IN DWORD Flags,
2352 IN DWORD Reserved1,
2353 IN PVOID Reserved2);
2354
2355#ifdef UNICODE
2356#define SetupSetDirectoryIdEx SetupSetDirectoryIdExW
2357#else
2358#define SetupSetDirectoryIdEx SetupSetDirectoryIdExA
2359#endif
2360
2361//
2362// Flags for SetupSetDirectoryIdEx
2363//
2364#define SETDIRID_NOT_FULL_PATH 0x00000001
2365
2366WINSETUPAPI
2367BOOL WINAPI
2368SetupGetSourceInfoA(IN HINF InfHandle,
2369 IN UINT SourceId,
2370 IN UINT InfoDesired,
2371 OUT PSTR ReturnBuffer,
2372 OPTIONAL IN DWORD ReturnBufferSize,
2373 OUT PDWORD RequiredSize OPTIONAL);
2374
2375WINSETUPAPI
2376BOOL WINAPI
2377SetupGetSourceInfoW(IN HINF InfHandle,
2378 IN UINT SourceId,
2379 IN UINT InfoDesired,
2380 OUT PWSTR ReturnBuffer,
2381 OPTIONAL IN DWORD ReturnBufferSize,
2382 OUT PDWORD RequiredSize OPTIONAL);
2383
2384#ifdef UNICODE
2385#define SetupGetSourceInfo SetupGetSourceInfoW
2386#else
2387#define SetupGetSourceInfo SetupGetSourceInfoA
2388#endif
2389
2390//
2391// InfoDesired values for SetupGetSourceInfo
2392//
2393
2394#define SRCINFO_PATH 1
2395#define SRCINFO_TAGFILE 2
2396#define SRCINFO_DESCRIPTION 3
2397#define SRCINFO_FLAGS 4
2398
2399WINSETUPAPI
2400BOOL WINAPI
2401SetupInstallFileA(IN HINF InfHandle,
2402 OPTIONAL IN PINFCONTEXT InfContext,
2403 OPTIONAL IN PCSTR SourceFile,
2404 OPTIONAL IN PCSTR SourcePathRoot,
2405 OPTIONAL IN PCSTR DestinationName,
2406 OPTIONAL IN DWORD CopyStyle,
2407 IN PSP_FILE_CALLBACK_A CopyMsgHandler,
2408 OPTIONAL IN PVOID Context OPTIONAL);
2409
2410WINSETUPAPI
2411BOOL WINAPI
2412SetupInstallFileW(IN HINF InfHandle,
2413 OPTIONAL IN PINFCONTEXT InfContext,
2414 OPTIONAL IN PCWSTR SourceFile,
2415 OPTIONAL IN PCWSTR SourcePathRoot,
2416 OPTIONAL IN PCWSTR DestinationName,
2417 OPTIONAL IN DWORD CopyStyle,
2418 IN PSP_FILE_CALLBACK_W CopyMsgHandler,
2419 OPTIONAL IN PVOID Context OPTIONAL);
2420
2421#ifdef UNICODE
2422#define SetupInstallFile SetupInstallFileW
2423#else
2424#define SetupInstallFile SetupInstallFileA
2425#endif
2426
2427WINSETUPAPI
2428BOOL WINAPI
2429SetupInstallFileExA(IN HINF InfHandle,
2430 OPTIONAL IN PINFCONTEXT InfContext,
2431 OPTIONAL IN PCSTR SourceFile,
2432 OPTIONAL IN PCSTR SourcePathRoot,
2433 OPTIONAL IN PCSTR DestinationName,
2434 OPTIONAL IN DWORD CopyStyle,
2435 IN PSP_FILE_CALLBACK_A CopyMsgHandler,
2436 OPTIONAL IN PVOID Context,
2437 OPTIONAL OUT PBOOL FileWasInUse);
2438
2439WINSETUPAPI
2440BOOL WINAPI
2441SetupInstallFileExW(IN HINF InfHandle,
2442 OPTIONAL IN PINFCONTEXT InfContext,
2443 OPTIONAL IN PCWSTR SourceFile,
2444 OPTIONAL IN PCWSTR SourcePathRoot,
2445 OPTIONAL IN PCWSTR DestinationName,
2446 OPTIONAL IN DWORD CopyStyle,
2447 IN PSP_FILE_CALLBACK_W CopyMsgHandler,
2448 OPTIONAL IN PVOID Context,
2449 OPTIONAL OUT PBOOL FileWasInUse);
2450
2451#ifdef UNICODE
2452#define SetupInstallFileEx SetupInstallFileExW
2453#else
2454#define SetupInstallFileEx SetupInstallFileExA
2455#endif
2456
2457//
2458// CopyStyle values for copy and queue-related APIs
2459//
2460#define SP_COPY_DELETESOURCE 0x0000001 // delete source file on successful copy
2461#define SP_COPY_REPLACEONLY \
2462 0x0000002 // copy only if target file already present
2463#define SP_COPY_NEWER \
2464 0x0000004 // copy only if source newer than or same as target
2465#define SP_COPY_NEWER_OR_SAME SP_COPY_NEWER
2466#define SP_COPY_NOOVERWRITE 0x0000008 // copy only if target doesn't exist
2467#define SP_COPY_NODECOMP 0x0000010 // don't decompress source file while copying
2468#define SP_COPY_LANGUAGEAWARE \
2469 0x0000020 // don't overwrite file of different language
2470#define SP_COPY_SOURCE_ABSOLUTE 0x0000040 // SourceFile is a full source path
2471#define SP_COPY_SOURCEPATH_ABSOLUTE 0x0000080 // SourcePathRoot is the full path
2472#define SP_COPY_IN_USE_NEEDS_REBOOT \
2473 0x0000100 // System needs reboot if file in use
2474#define SP_COPY_FORCE_IN_USE 0x0000200 // Force target-in-use behavior
2475#define SP_COPY_NOSKIP 0x0000400 // Skip is disallowed for this file or section
2476#define SP_FLAG_CABINETCONTINUATION \
2477 0x0000800 // Used with need media notification
2478#define SP_COPY_FORCE_NOOVERWRITE \
2479 0x0001000 // like NOOVERWRITE but no callback nofitication
2480#define SP_COPY_FORCE_NEWER 0x0002000 // like NEWER but no callback nofitication
2481#define SP_COPY_WARNIFSKIP \
2482 0x0004000 // system critical file: warn if user tries to skip
2483#define SP_COPY_NOBROWSE \
2484 0x0008000 // Browsing is disallowed for this file or section
2485#define SP_COPY_NEWER_ONLY \
2486 0x0010000 // copy only if source file newer than target
2487#define SP_COPY_SOURCE_SIS_MASTER \
2488 0x0020000 // source is single-instance store master
2489#define SP_COPY_OEMINF_CATALOG_ONLY \
2490 0x0040000 // (SetupCopyOEMInf only) don't copy INF--just catalog
2491#define SP_COPY_REPLACE_BOOT_FILE \
2492 0x0080000 // file must be present upon reboot (i.e., it's
2493 // needed by the loader); this flag implies a reboot
2494#define SP_COPY_NOPRUNE 0x0100000 // never prune this file
2495
2496WINSETUPAPI
2497HSPFILEQ
2498WINAPI
2499SetupOpenFileQueue(VOID);
2500
2501WINSETUPAPI
2502BOOL WINAPI
2503SetupCloseFileQueue(IN HSPFILEQ QueueHandle);
2504
2505WINSETUPAPI
2506BOOL WINAPI
2507SetupSetFileQueueAlternatePlatformA(
2508 IN HSPFILEQ QueueHandle,
2509 IN PSP_ALTPLATFORM_INFO AlternatePlatformInfo,
2510 OPTIONAL IN PCSTR AlternateDefaultCatalogFile OPTIONAL);
2511
2512WINSETUPAPI
2513BOOL WINAPI
2514SetupSetFileQueueAlternatePlatformW(
2515 IN HSPFILEQ QueueHandle,
2516 IN PSP_ALTPLATFORM_INFO AlternatePlatformInfo,
2517 OPTIONAL IN PCWSTR AlternateDefaultCatalogFile OPTIONAL);
2518
2519#ifdef UNICODE
2520#define SetupSetFileQueueAlternatePlatform SetupSetFileQueueAlternatePlatformW
2521#else
2522#define SetupSetFileQueueAlternatePlatform SetupSetFileQueueAlternatePlatformA
2523#endif
2524
2525WINSETUPAPI
2526BOOL WINAPI
2527SetupSetPlatformPathOverrideA(IN PCSTR Override OPTIONAL);
2528
2529WINSETUPAPI
2530BOOL WINAPI
2531SetupSetPlatformPathOverrideW(IN PCWSTR Override OPTIONAL);
2532
2533#ifdef UNICODE
2534#define SetupSetPlatformPathOverride SetupSetPlatformPathOverrideW
2535#else
2536#define SetupSetPlatformPathOverride SetupSetPlatformPathOverrideA
2537#endif
2538
2539WINSETUPAPI
2540BOOL WINAPI
2541SetupQueueCopyA(IN HSPFILEQ QueueHandle,
2542 IN PCSTR SourceRootPath,
2543 OPTIONAL IN PCSTR SourcePath,
2544 OPTIONAL IN PCSTR SourceFilename,
2545 IN PCSTR SourceDescription,
2546 OPTIONAL IN PCSTR SourceTagfile,
2547 OPTIONAL IN PCSTR TargetDirectory,
2548 IN PCSTR TargetFilename,
2549 OPTIONAL IN DWORD CopyStyle);
2550
2551WINSETUPAPI
2552BOOL WINAPI
2553SetupQueueCopyW(IN HSPFILEQ QueueHandle,
2554 IN PCWSTR SourceRootPath,
2555 OPTIONAL IN PCWSTR SourcePath,
2556 OPTIONAL IN PCWSTR SourceFilename,
2557 IN PCWSTR SourceDescription,
2558 OPTIONAL IN PCWSTR SourceTagfile,
2559 OPTIONAL IN PCWSTR TargetDirectory,
2560 IN PCWSTR TargetFilename,
2561 OPTIONAL IN DWORD CopyStyle);
2562
2563#ifdef UNICODE
2564#define SetupQueueCopy SetupQueueCopyW
2565#else
2566#define SetupQueueCopy SetupQueueCopyA
2567#endif
2568
2569WINSETUPAPI
2570BOOL WINAPI
2571SetupQueueCopyIndirectA(IN PSP_FILE_COPY_PARAMS_A CopyParams);
2572
2573WINSETUPAPI
2574BOOL WINAPI
2575SetupQueueCopyIndirectW(IN PSP_FILE_COPY_PARAMS_W CopyParams);
2576
2577#ifdef UNICODE
2578#define SetupQueueCopyIndirect SetupQueueCopyIndirectW
2579#else
2580#define SetupQueueCopyIndirect SetupQueueCopyIndirectA
2581#endif
2582
2583WINSETUPAPI
2584BOOL WINAPI
2585SetupQueueDefaultCopyA(IN HSPFILEQ QueueHandle,
2586 IN HINF InfHandle,
2587 IN PCSTR SourceRootPath,
2588 IN PCSTR SourceFilename,
2589 IN PCSTR TargetFilename,
2590 IN DWORD CopyStyle);
2591
2592WINSETUPAPI
2593BOOL WINAPI
2594SetupQueueDefaultCopyW(IN HSPFILEQ QueueHandle,
2595 IN HINF InfHandle,
2596 IN PCWSTR SourceRootPath,
2597 IN PCWSTR SourceFilename,
2598 IN PCWSTR TargetFilename,
2599 IN DWORD CopyStyle);
2600
2601#ifdef UNICODE
2602#define SetupQueueDefaultCopy SetupQueueDefaultCopyW
2603#else
2604#define SetupQueueDefaultCopy SetupQueueDefaultCopyA
2605#endif
2606
2607WINSETUPAPI
2608BOOL WINAPI
2609SetupQueueCopySectionA(IN HSPFILEQ QueueHandle,
2610 IN PCSTR SourceRootPath,
2611 IN HINF InfHandle,
2612 IN HINF ListInfHandle,
2613 OPTIONAL IN PCSTR Section,
2614 IN DWORD CopyStyle);
2615
2616WINSETUPAPI
2617BOOL WINAPI
2618SetupQueueCopySectionW(IN HSPFILEQ QueueHandle,
2619 IN PCWSTR SourceRootPath,
2620 IN HINF InfHandle,
2621 IN HINF ListInfHandle,
2622 OPTIONAL IN PCWSTR Section,
2623 IN DWORD CopyStyle);
2624
2625#ifdef UNICODE
2626#define SetupQueueCopySection SetupQueueCopySectionW
2627#else
2628#define SetupQueueCopySection SetupQueueCopySectionA
2629#endif
2630
2631WINSETUPAPI
2632BOOL WINAPI
2633SetupQueueDeleteA(IN HSPFILEQ QueueHandle,
2634 IN PCSTR PathPart1,
2635 IN PCSTR PathPart2 OPTIONAL);
2636
2637WINSETUPAPI
2638BOOL WINAPI
2639SetupQueueDeleteW(IN HSPFILEQ QueueHandle,
2640 IN PCWSTR PathPart1,
2641 IN PCWSTR PathPart2 OPTIONAL);
2642
2643#ifdef UNICODE
2644#define SetupQueueDelete SetupQueueDeleteW
2645#else
2646#define SetupQueueDelete SetupQueueDeleteA
2647#endif
2648
2649WINSETUPAPI
2650BOOL WINAPI
2651SetupQueueDeleteSectionA(IN HSPFILEQ QueueHandle,
2652 IN HINF InfHandle,
2653 IN HINF ListInfHandle,
2654 OPTIONAL IN PCSTR Section);
2655
2656WINSETUPAPI
2657BOOL WINAPI
2658SetupQueueDeleteSectionW(IN HSPFILEQ QueueHandle,
2659 IN HINF InfHandle,
2660 IN HINF ListInfHandle,
2661 OPTIONAL IN PCWSTR Section);
2662
2663#ifdef UNICODE
2664#define SetupQueueDeleteSection SetupQueueDeleteSectionW
2665#else
2666#define SetupQueueDeleteSection SetupQueueDeleteSectionA
2667#endif
2668
2669WINSETUPAPI
2670BOOL WINAPI
2671SetupQueueRenameA(IN HSPFILEQ QueueHandle,
2672 IN PCSTR SourcePath,
2673 IN PCSTR SourceFilename,
2674 OPTIONAL IN PCSTR TargetPath,
2675 OPTIONAL IN PCSTR TargetFilename);
2676
2677WINSETUPAPI
2678BOOL WINAPI
2679SetupQueueRenameW(IN HSPFILEQ QueueHandle,
2680 IN PCWSTR SourcePath,
2681 IN PCWSTR SourceFilename,
2682 OPTIONAL IN PCWSTR TargetPath,
2683 OPTIONAL IN PCWSTR TargetFilename);
2684
2685#ifdef UNICODE
2686#define SetupQueueRename SetupQueueRenameW
2687#else
2688#define SetupQueueRename SetupQueueRenameA
2689#endif
2690
2691WINSETUPAPI
2692BOOL WINAPI
2693SetupQueueRenameSectionA(IN HSPFILEQ QueueHandle,
2694 IN HINF InfHandle,
2695 IN HINF ListInfHandle,
2696 OPTIONAL IN PCSTR Section);
2697
2698WINSETUPAPI
2699BOOL WINAPI
2700SetupQueueRenameSectionW(IN HSPFILEQ QueueHandle,
2701 IN HINF InfHandle,
2702 IN HINF ListInfHandle,
2703 OPTIONAL IN PCWSTR Section);
2704
2705#ifdef UNICODE
2706#define SetupQueueRenameSection SetupQueueRenameSectionW
2707#else
2708#define SetupQueueRenameSection SetupQueueRenameSectionA
2709#endif
2710
2711WINSETUPAPI
2712BOOL WINAPI
2713SetupCommitFileQueueA(IN HWND Owner,
2714 OPTIONAL IN HSPFILEQ QueueHandle,
2715 IN PSP_FILE_CALLBACK_A MsgHandler,
2716 IN PVOID Context);
2717
2718WINSETUPAPI
2719BOOL WINAPI
2720SetupCommitFileQueueW(IN HWND Owner,
2721 OPTIONAL IN HSPFILEQ QueueHandle,
2722 IN PSP_FILE_CALLBACK_W MsgHandler,
2723 IN PVOID Context);
2724
2725#ifdef UNICODE
2726#define SetupCommitFileQueue SetupCommitFileQueueW
2727#else
2728#define SetupCommitFileQueue SetupCommitFileQueueA
2729#endif
2730
2731WINSETUPAPI
2732BOOL WINAPI
2733SetupScanFileQueueA(IN HSPFILEQ FileQueue,
2734 IN DWORD Flags,
2735 IN HWND Window,
2736 OPTIONAL IN PSP_FILE_CALLBACK_A CallbackRoutine,
2737 OPTIONAL IN PVOID CallbackContext,
2738 OPTIONAL OUT PDWORD Result);
2739
2740WINSETUPAPI
2741BOOL WINAPI
2742SetupScanFileQueueW(IN HSPFILEQ FileQueue,
2743 IN DWORD Flags,
2744 IN HWND Window,
2745 OPTIONAL IN PSP_FILE_CALLBACK_W CallbackRoutine,
2746 OPTIONAL IN PVOID CallbackContext,
2747 OPTIONAL OUT PDWORD Result);
2748
2749#ifdef UNICODE
2750#define SetupScanFileQueue SetupScanFileQueueW
2751#else
2752#define SetupScanFileQueue SetupScanFileQueueA
2753#endif
2754
2755//
2756// Define flags for SetupScanFileQueue.
2757//
2758#define SPQ_SCAN_FILE_PRESENCE 0x00000001
2759#define SPQ_SCAN_FILE_VALIDITY 0x00000002
2760#define SPQ_SCAN_USE_CALLBACK 0x00000004
2761#define SPQ_SCAN_USE_CALLBACKEX 0x00000008
2762#define SPQ_SCAN_INFORM_USER 0x00000010
2763#define SPQ_SCAN_PRUNE_COPY_QUEUE 0x00000020
2764
2765//
2766// Define flags used with Param2 for SPFILENOTIFY_QUEUESCAN
2767//
2768#define SPQ_DELAYED_COPY \
2769 0x00000001 // file was in use; registered for delayed copy
2770
2771//
2772// Define OEM Source Type values for use in SetupCopyOEMInf.
2773//
2774#define SPOST_NONE 0
2775#define SPOST_PATH 1
2776#define SPOST_URL 2
2777#define SPOST_MAX 3
2778
2779WINSETUPAPI
2780BOOL WINAPI
2781SetupCopyOEMInfA(IN PCSTR SourceInfFileName,
2782 IN PCSTR OEMSourceMediaLocation,
2783 OPTIONAL IN DWORD OEMSourceMediaType,
2784 IN DWORD CopyStyle,
2785 OUT PSTR DestinationInfFileName,
2786 OPTIONAL IN DWORD DestinationInfFileNameSize,
2787 OUT PDWORD RequiredSize,
2788 OPTIONAL OUT PSTR* DestinationInfFileNameComponent OPTIONAL);
2789
2790WINSETUPAPI
2791BOOL WINAPI
2792SetupCopyOEMInfW(IN PCWSTR SourceInfFileName,
2793 IN PCWSTR OEMSourceMediaLocation,
2794 OPTIONAL IN DWORD OEMSourceMediaType,
2795 IN DWORD CopyStyle,
2796 OUT PWSTR DestinationInfFileName,
2797 OPTIONAL IN DWORD DestinationInfFileNameSize,
2798 OUT PDWORD RequiredSize,
2799 OPTIONAL OUT PWSTR* DestinationInfFileNameComponent OPTIONAL);
2800
2801#ifdef UNICODE
2802#define SetupCopyOEMInf SetupCopyOEMInfW
2803#else
2804#define SetupCopyOEMInf SetupCopyOEMInfA
2805#endif
2806
2807//
2808// Disk space list APIs
2809//
2810WINSETUPAPI
2811HDSKSPC
2812WINAPI
2813SetupCreateDiskSpaceListA(IN PVOID Reserved1,
2814 IN DWORD Reserved2,
2815 IN UINT Flags);
2816
2817WINSETUPAPI
2818HDSKSPC
2819WINAPI
2820SetupCreateDiskSpaceListW(IN PVOID Reserved1,
2821 IN DWORD Reserved2,
2822 IN UINT Flags);
2823
2824#ifdef UNICODE
2825#define SetupCreateDiskSpaceList SetupCreateDiskSpaceListW
2826#else
2827#define SetupCreateDiskSpaceList SetupCreateDiskSpaceListA
2828#endif
2829
2830//
2831// Flags for SetupCreateDiskSpaceList
2832//
2833#define SPDSL_IGNORE_DISK \
2834 0x00000001 // ignore deletes and on-disk files in copies
2835#define SPDSL_DISALLOW_NEGATIVE_ADJUST 0x00000002
2836
2837WINSETUPAPI
2838HDSKSPC
2839WINAPI
2840SetupDuplicateDiskSpaceListA(IN HDSKSPC DiskSpace,
2841 IN PVOID Reserved1,
2842 IN DWORD Reserved2,
2843 IN UINT Flags);
2844
2845WINSETUPAPI
2846HDSKSPC
2847WINAPI
2848SetupDuplicateDiskSpaceListW(IN HDSKSPC DiskSpace,
2849 IN PVOID Reserved1,
2850 IN DWORD Reserved2,
2851 IN UINT Flags);
2852
2853#ifdef UNICODE
2854#define SetupDuplicateDiskSpaceList SetupDuplicateDiskSpaceListW
2855#else
2856#define SetupDuplicateDiskSpaceList SetupDuplicateDiskSpaceListA
2857#endif
2858
2859WINSETUPAPI
2860BOOL WINAPI
2861SetupDestroyDiskSpaceList(IN OUT HDSKSPC DiskSpace);
2862
2863WINSETUPAPI
2864BOOL WINAPI
2865SetupQueryDrivesInDiskSpaceListA(IN HDSKSPC DiskSpace,
2866 OUT PSTR ReturnBuffer,
2867 OPTIONAL IN DWORD ReturnBufferSize,
2868 OUT PDWORD RequiredSize OPTIONAL);
2869
2870WINSETUPAPI
2871BOOL WINAPI
2872SetupQueryDrivesInDiskSpaceListW(IN HDSKSPC DiskSpace,
2873 OUT PWSTR ReturnBuffer,
2874 OPTIONAL IN DWORD ReturnBufferSize,
2875 OUT PDWORD RequiredSize OPTIONAL);
2876
2877#ifdef UNICODE
2878#define SetupQueryDrivesInDiskSpaceList SetupQueryDrivesInDiskSpaceListW
2879#else
2880#define SetupQueryDrivesInDiskSpaceList SetupQueryDrivesInDiskSpaceListA
2881#endif
2882
2883WINSETUPAPI
2884BOOL WINAPI
2885SetupQuerySpaceRequiredOnDriveA(IN HDSKSPC DiskSpace,
2886 IN PCSTR DriveSpec,
2887 OUT LONGLONG* SpaceRequired,
2888 IN PVOID Reserved1,
2889 IN UINT Reserved2);
2890
2891WINSETUPAPI
2892BOOL WINAPI
2893SetupQuerySpaceRequiredOnDriveW(IN HDSKSPC DiskSpace,
2894 IN PCWSTR DriveSpec,
2895 OUT LONGLONG* SpaceRequired,
2896 IN PVOID Reserved1,
2897 IN UINT Reserved2);
2898
2899#ifdef UNICODE
2900#define SetupQuerySpaceRequiredOnDrive SetupQuerySpaceRequiredOnDriveW
2901#else
2902#define SetupQuerySpaceRequiredOnDrive SetupQuerySpaceRequiredOnDriveA
2903#endif
2904
2905WINSETUPAPI
2906BOOL WINAPI
2907SetupAdjustDiskSpaceListA(IN HDSKSPC DiskSpace,
2908 IN LPCSTR DriveRoot,
2909 IN LONGLONG Amount,
2910 IN PVOID Reserved1,
2911 IN UINT Reserved2);
2912
2913WINSETUPAPI
2914BOOL WINAPI
2915SetupAdjustDiskSpaceListW(IN HDSKSPC DiskSpace,
2916 IN LPCWSTR DriveRoot,
2917 IN LONGLONG Amount,
2918 IN PVOID Reserved1,
2919 IN UINT Reserved2);
2920
2921#ifdef UNICODE
2922#define SetupAdjustDiskSpaceList SetupAdjustDiskSpaceListW
2923#else
2924#define SetupAdjustDiskSpaceList SetupAdjustDiskSpaceListA
2925#endif
2926
2927WINSETUPAPI
2928BOOL WINAPI
2929SetupAddToDiskSpaceListA(IN HDSKSPC DiskSpace,
2930 IN PCSTR TargetFilespec,
2931 IN LONGLONG FileSize,
2932 IN UINT Operation,
2933 IN PVOID Reserved1,
2934 IN UINT Reserved2);
2935
2936WINSETUPAPI
2937BOOL WINAPI
2938SetupAddToDiskSpaceListW(IN HDSKSPC DiskSpace,
2939 IN PCWSTR TargetFilespec,
2940 IN LONGLONG FileSize,
2941 IN UINT Operation,
2942 IN PVOID Reserved1,
2943 IN UINT Reserved2);
2944
2945#ifdef UNICODE
2946#define SetupAddToDiskSpaceList SetupAddToDiskSpaceListW
2947#else
2948#define SetupAddToDiskSpaceList SetupAddToDiskSpaceListA
2949#endif
2950
2951WINSETUPAPI
2952BOOL WINAPI
2953SetupAddSectionToDiskSpaceListA(IN HDSKSPC DiskSpace,
2954 IN HINF InfHandle,
2955 IN HINF ListInfHandle,
2956 OPTIONAL IN PCSTR SectionName,
2957 IN UINT Operation,
2958 IN PVOID Reserved1,
2959 IN UINT Reserved2);
2960
2961WINSETUPAPI
2962BOOL WINAPI
2963SetupAddSectionToDiskSpaceListW(IN HDSKSPC DiskSpace,
2964 IN HINF InfHandle,
2965 IN HINF ListInfHandle,
2966 OPTIONAL IN PCWSTR SectionName,
2967 IN UINT Operation,
2968 IN PVOID Reserved1,
2969 IN UINT Reserved2);
2970
2971#ifdef UNICODE
2972#define SetupAddSectionToDiskSpaceList SetupAddSectionToDiskSpaceListW
2973#else
2974#define SetupAddSectionToDiskSpaceList SetupAddSectionToDiskSpaceListA
2975#endif
2976
2977WINSETUPAPI
2978BOOL WINAPI
2979SetupAddInstallSectionToDiskSpaceListA(IN HDSKSPC DiskSpace,
2980 IN HINF InfHandle,
2981 IN HINF LayoutInfHandle,
2982 OPTIONAL IN PCSTR SectionName,
2983 IN PVOID Reserved1,
2984 IN UINT Reserved2);
2985
2986WINSETUPAPI
2987BOOL WINAPI
2988SetupAddInstallSectionToDiskSpaceListW(IN HDSKSPC DiskSpace,
2989 IN HINF InfHandle,
2990 IN HINF LayoutInfHandle,
2991 OPTIONAL IN PCWSTR SectionName,
2992 IN PVOID Reserved1,
2993 IN UINT Reserved2);
2994
2995#ifdef UNICODE
2996#define SetupAddInstallSectionToDiskSpaceList \
2997 SetupAddInstallSectionToDiskSpaceListW
2998#else
2999#define SetupAddInstallSectionToDiskSpaceList \
3000 SetupAddInstallSectionToDiskSpaceListA
3001#endif
3002
3003WINSETUPAPI
3004BOOL WINAPI
3005SetupRemoveFromDiskSpaceListA(IN HDSKSPC DiskSpace,
3006 IN PCSTR TargetFilespec,
3007 IN UINT Operation,
3008 IN PVOID Reserved1,
3009 IN UINT Reserved2);
3010
3011WINSETUPAPI
3012BOOL WINAPI
3013SetupRemoveFromDiskSpaceListW(IN HDSKSPC DiskSpace,
3014 IN PCWSTR TargetFilespec,
3015 IN UINT Operation,
3016 IN PVOID Reserved1,
3017 IN UINT Reserved2);
3018
3019#ifdef UNICODE
3020#define SetupRemoveFromDiskSpaceList SetupRemoveFromDiskSpaceListW
3021#else
3022#define SetupRemoveFromDiskSpaceList SetupRemoveFromDiskSpaceListA
3023#endif
3024
3025WINSETUPAPI
3026BOOL WINAPI
3027SetupRemoveSectionFromDiskSpaceListA(IN HDSKSPC DiskSpace,
3028 IN HINF InfHandle,
3029 IN HINF ListInfHandle,
3030 OPTIONAL IN PCSTR SectionName,
3031 IN UINT Operation,
3032 IN PVOID Reserved1,
3033 IN UINT Reserved2);
3034
3035WINSETUPAPI
3036BOOL WINAPI
3037SetupRemoveSectionFromDiskSpaceListW(IN HDSKSPC DiskSpace,
3038 IN HINF InfHandle,
3039 IN HINF ListInfHandle,
3040 OPTIONAL IN PCWSTR SectionName,
3041 IN UINT Operation,
3042 IN PVOID Reserved1,
3043 IN UINT Reserved2);
3044
3045#ifdef UNICODE
3046#define SetupRemoveSectionFromDiskSpaceList SetupRemoveSectionFromDiskSpaceListW
3047#else
3048#define SetupRemoveSectionFromDiskSpaceList SetupRemoveSectionFromDiskSpaceListA
3049#endif
3050
3051WINSETUPAPI
3052BOOL WINAPI
3053SetupRemoveInstallSectionFromDiskSpaceListA(IN HDSKSPC DiskSpace,
3054 IN HINF InfHandle,
3055 IN HINF LayoutInfHandle,
3056 OPTIONAL IN PCSTR SectionName,
3057 IN PVOID Reserved1,
3058 IN UINT Reserved2);
3059
3060WINSETUPAPI
3061BOOL WINAPI
3062SetupRemoveInstallSectionFromDiskSpaceListW(IN HDSKSPC DiskSpace,
3063 IN HINF InfHandle,
3064 IN HINF LayoutInfHandle,
3065 OPTIONAL IN PCWSTR SectionName,
3066 IN PVOID Reserved1,
3067 IN UINT Reserved2);
3068
3069#ifdef UNICODE
3070#define SetupRemoveInstallSectionFromDiskSpaceList \
3071 SetupRemoveInstallSectionFromDiskSpaceListW
3072#else
3073#define SetupRemoveInstallSectionFromDiskSpaceList \
3074 SetupRemoveInstallSectionFromDiskSpaceListA
3075#endif
3076
3077//
3078// Cabinet APIs
3079//
3080
3081WINSETUPAPI
3082BOOL WINAPI
3083SetupIterateCabinetA(IN PCSTR CabinetFile,
3084 IN DWORD Reserved,
3085 IN PSP_FILE_CALLBACK_A MsgHandler,
3086 IN PVOID Context);
3087
3088WINSETUPAPI
3089BOOL WINAPI
3090SetupIterateCabinetW(IN PCWSTR CabinetFile,
3091 IN DWORD Reserved,
3092 IN PSP_FILE_CALLBACK_W MsgHandler,
3093 IN PVOID Context);
3094
3095#ifdef UNICODE
3096#define SetupIterateCabinet SetupIterateCabinetW
3097#else
3098#define SetupIterateCabinet SetupIterateCabinetA
3099#endif
3100
3101WINSETUPAPI
3102INT WINAPI
3103SetupPromptReboot(IN HSPFILEQ FileQueue,
3104 OPTIONAL IN HWND Owner,
3105 IN BOOL ScanOnly);
3106
3107//
3108// Define flags that are returned by SetupPromptReboot
3109//
3110#define SPFILEQ_FILE_IN_USE 0x00000001
3111#define SPFILEQ_REBOOT_RECOMMENDED 0x00000002
3112#define SPFILEQ_REBOOT_IN_PROGRESS 0x00000004
3113
3114WINSETUPAPI
3115PVOID
3116WINAPI
3117SetupInitDefaultQueueCallback(IN HWND OwnerWindow);
3118
3119WINSETUPAPI
3120PVOID
3121WINAPI
3122SetupInitDefaultQueueCallbackEx(IN HWND OwnerWindow,
3123 IN HWND AlternateProgressWindow,
3124 OPTIONAL IN UINT ProgressMessage,
3125 IN DWORD Reserved1,
3126 IN PVOID Reserved2);
3127
3128WINSETUPAPI
3129VOID WINAPI
3130SetupTermDefaultQueueCallback(IN PVOID Context);
3131
3132WINSETUPAPI
3133UINT WINAPI
3134SetupDefaultQueueCallbackA(IN PVOID Context,
3135 IN UINT Notification,
3136 IN UINT_PTR Param1,
3137 IN UINT_PTR Param2);
3138
3139WINSETUPAPI
3140UINT WINAPI
3141SetupDefaultQueueCallbackW(IN PVOID Context,
3142 IN UINT Notification,
3143 IN UINT_PTR Param1,
3144 IN UINT_PTR Param2);
3145
3146#ifdef UNICODE
3147#define SetupDefaultQueueCallback SetupDefaultQueueCallbackW
3148#else
3149#define SetupDefaultQueueCallback SetupDefaultQueueCallbackA
3150#endif
3151
3152//
3153// Flags for AddReg section lines in INF. The corresponding value
3154// is <ValueType> in the AddReg line format given below:
3155//
3156// <RegRootString>,<SubKey>,<ValueName>,<ValueType>,<Value>...
3157//
3158// The low word contains basic flags concerning the general data type
3159// and AddReg action. The high word contains values that more specifically
3160// identify the data type of the registry value. The high word is ignored
3161// by the 16-bit Windows 95 SETUPX APIs.
3162//
3163#define FLG_ADDREG_BINVALUETYPE (0x00000001)
3164#define FLG_ADDREG_NOCLOBBER (0x00000002)
3165#define FLG_ADDREG_DELVAL (0x00000004)
3166#define FLG_ADDREG_APPEND \
3167 (0x00000008) // Currently supported only
3168 // for REG_MULTI_SZ values.
3169#define FLG_ADDREG_KEYONLY (0x00000010) // Just create the key, ignore value
3170#define FLG_ADDREG_OVERWRITEONLY \
3171 (0x00000020) // Set only if value already exists
3172
3173#define FLG_ADDREG_TYPE_MASK (0xFFFF0000 | FLG_ADDREG_BINVALUETYPE)
3174#define FLG_ADDREG_TYPE_SZ (0x00000000)
3175#define FLG_ADDREG_TYPE_MULTI_SZ (0x00010000)
3176#define FLG_ADDREG_TYPE_EXPAND_SZ (0x00020000)
3177#define FLG_ADDREG_TYPE_BINARY (0x00000000 | FLG_ADDREG_BINVALUETYPE)
3178#define FLG_ADDREG_TYPE_DWORD (0x00010000 | FLG_ADDREG_BINVALUETYPE)
3179#define FLG_ADDREG_TYPE_NONE (0x00020000 | FLG_ADDREG_BINVALUETYPE)
3180
3181//
3182// Flags for BitReg section lines in INF.
3183//
3184#define FLG_BITREG_CLEARBITS (0x00000000)
3185#define FLG_BITREG_SETBITS (0x00000001)
3186
3187//
3188// Flags for RegSvr section lines in INF
3189//
3190#define FLG_REGSVR_DLLREGISTER (0x00000001)
3191#define FLG_REGSVR_DLLINSTALL (0x00000002)
3192
3193// Flags for RegSvr section lines in INF
3194//
3195
3196#define FLG_PROFITEM_CURRENTUSER (0x00000001)
3197#define FLG_PROFITEM_DELETE (0x00000002)
3198#define FLG_PROFITEM_GROUP (0x00000004)
3199#define FLG_PROFITEM_CSIDL (0x00000008)
3200
3201//
3202// The INF may supply any arbitrary data type ordinal in the highword except
3203// for the following: REG_NONE, REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ. If this
3204// technique is used, then the data is given in binary format, one byte per
3205// field.
3206//
3207
3208WINSETUPAPI
3209BOOL WINAPI
3210SetupInstallFromInfSectionA(IN HWND Owner,
3211 IN HINF InfHandle,
3212 IN PCSTR SectionName,
3213 IN UINT Flags,
3214 IN HKEY RelativeKeyRoot,
3215 OPTIONAL IN PCSTR SourceRootPath,
3216 OPTIONAL IN UINT CopyFlags,
3217 OPTIONAL IN PSP_FILE_CALLBACK_A MsgHandler,
3218 OPTIONAL IN PVOID Context,
3219 OPTIONAL IN HDEVINFO DeviceInfoSet,
3220 OPTIONAL IN PSP_DEVINFO_DATA DeviceInfoData
3221 OPTIONAL);
3222
3223WINSETUPAPI
3224BOOL WINAPI
3225SetupInstallFromInfSectionW(IN HWND Owner,
3226 IN HINF InfHandle,
3227 IN PCWSTR SectionName,
3228 IN UINT Flags,
3229 IN HKEY RelativeKeyRoot,
3230 OPTIONAL IN PCWSTR SourceRootPath,
3231 OPTIONAL IN UINT CopyFlags,
3232 OPTIONAL IN PSP_FILE_CALLBACK_W MsgHandler,
3233 OPTIONAL IN PVOID Context,
3234 OPTIONAL IN HDEVINFO DeviceInfoSet,
3235 OPTIONAL IN PSP_DEVINFO_DATA DeviceInfoData
3236 OPTIONAL);
3237
3238#ifdef UNICODE
3239#define SetupInstallFromInfSection SetupInstallFromInfSectionW
3240#else
3241#define SetupInstallFromInfSection SetupInstallFromInfSectionA
3242#endif
3243
3244//
3245// Flags for SetupInstallFromInfSection
3246//
3247#define SPINST_LOGCONFIG 0x00000001
3248#define SPINST_INIFILES 0x00000002
3249#define SPINST_REGISTRY 0x00000004
3250#define SPINST_INI2REG 0x00000008
3251#define SPINST_FILES 0x00000010
3252#define SPINST_BITREG 0x00000020
3253#define SPINST_REGSVR 0x00000040
3254#define SPINST_UNREGSVR 0x00000080
3255#define SPINST_PROFILEITEMS 0x00000100
3256#define SPINST_ALL 0x000001ff
3257#define SPINST_SINGLESECTION 0x00010000
3258#define SPINST_LOGCONFIG_IS_FORCED 0x00020000
3259#define SPINST_LOGCONFIGS_ARE_OVERRIDES 0x00040000
3260
3261WINSETUPAPI
3262BOOL WINAPI
3263SetupInstallFilesFromInfSectionA(IN HINF InfHandle,
3264 IN HINF LayoutInfHandle,
3265 OPTIONAL IN HSPFILEQ FileQueue,
3266 IN PCSTR SectionName,
3267 IN PCSTR SourceRootPath,
3268 OPTIONAL IN UINT CopyFlags);
3269
3270WINSETUPAPI
3271BOOL WINAPI
3272SetupInstallFilesFromInfSectionW(IN HINF InfHandle,
3273 IN HINF LayoutInfHandle,
3274 OPTIONAL IN HSPFILEQ FileQueue,
3275 IN PCWSTR SectionName,
3276 IN PCWSTR SourceRootPath,
3277 OPTIONAL IN UINT CopyFlags);
3278
3279#ifdef UNICODE
3280#define SetupInstallFilesFromInfSection SetupInstallFilesFromInfSectionW
3281#else
3282#define SetupInstallFilesFromInfSection SetupInstallFilesFromInfSectionA
3283#endif
3284
3285//
3286// Flags for SetupInstallServicesFromInfSection(Ex). These flags are also used
3287// in the flags field of AddService or DelService lines in a device INF. Some
3288// of these flags are not permitted in the non-Ex API. These flags are marked
3289// as such below.
3290//
3291
3292//
3293// (AddService) move service's tag to front of its group order list
3294//
3295#define SPSVCINST_TAGTOFRONT (0x00000001)
3296
3297//
3298// (AddService) **Ex API only** mark this service as the function driver for the
3299// device being installed
3300//
3301#define SPSVCINST_ASSOCSERVICE (0x00000002)
3302
3303//
3304// (DelService) delete the associated event log entry for a service specified in
3305// a DelService entry
3306//
3307#define SPSVCINST_DELETEEVENTLOGENTRY (0x00000004)
3308
3309//
3310// (AddService) don't overwrite display name if it already exists
3311//
3312#define SPSVCINST_NOCLOBBER_DISPLAYNAME (0x00000008)
3313
3314//
3315// (AddService) don't overwrite start type value if service already exists
3316//
3317#define SPSVCINST_NOCLOBBER_STARTTYPE (0x00000010)
3318
3319//
3320// (AddService) don't overwrite error control value if service already exists
3321//
3322#define SPSVCINST_NOCLOBBER_ERRORCONTROL (0x00000020)
3323
3324//
3325// (AddService) don't overwrite load order group if it already exists
3326//
3327#define SPSVCINST_NOCLOBBER_LOADORDERGROUP (0x00000040)
3328
3329//
3330// (AddService) don't overwrite dependencies list if it already exists
3331//
3332#define SPSVCINST_NOCLOBBER_DEPENDENCIES (0x00000080)
3333
3334//
3335// (AddService) don't overwrite description if it already exists
3336//
3337#define SPSVCINST_NOCLOBBER_DESCRIPTION (0x00000100)
3338//
3339// (DelService) stop the associated service specified in
3340// a DelService entry before deleting the service
3341//
3342#define SPSVCINST_STOPSERVICE (0x00000200)
3343
3344WINSETUPAPI
3345BOOL WINAPI
3346SetupInstallServicesFromInfSectionA(IN HINF InfHandle,
3347 IN PCSTR SectionName,
3348 IN DWORD Flags);
3349
3350WINSETUPAPI
3351BOOL WINAPI
3352SetupInstallServicesFromInfSectionW(IN HINF InfHandle,
3353 IN PCWSTR SectionName,
3354 IN DWORD Flags);
3355
3356#ifdef UNICODE
3357#define SetupInstallServicesFromInfSection SetupInstallServicesFromInfSectionW
3358#else
3359#define SetupInstallServicesFromInfSection SetupInstallServicesFromInfSectionA
3360#endif
3361
3362WINSETUPAPI
3363BOOL WINAPI
3364SetupInstallServicesFromInfSectionExA(IN HINF InfHandle,
3365 IN PCSTR SectionName,
3366 IN DWORD Flags,
3367 IN HDEVINFO DeviceInfoSet,
3368 OPTIONAL IN PSP_DEVINFO_DATA
3369 DeviceInfoData,
3370 OPTIONAL IN PVOID Reserved1,
3371 IN PVOID Reserved2);
3372
3373WINSETUPAPI
3374BOOL WINAPI
3375SetupInstallServicesFromInfSectionExW(IN HINF InfHandle,
3376 IN PCWSTR SectionName,
3377 IN DWORD Flags,
3378 IN HDEVINFO DeviceInfoSet,
3379 OPTIONAL IN PSP_DEVINFO_DATA
3380 DeviceInfoData,
3381 OPTIONAL IN PVOID Reserved1,
3382 IN PVOID Reserved2);
3383
3384#ifdef UNICODE
3385#define SetupInstallServicesFromInfSectionEx \
3386 SetupInstallServicesFromInfSectionExW
3387#else
3388#define SetupInstallServicesFromInfSectionEx \
3389 SetupInstallServicesFromInfSectionExA
3390#endif
3391
3392//
3393// Define handle type for Setup file log.
3394//
3395typedef PVOID HSPFILELOG;
3396
3397WINSETUPAPI
3398HSPFILELOG
3399WINAPI
3400SetupInitializeFileLogA(IN PCSTR LogFileName, OPTIONAL IN DWORD Flags);
3401
3402WINSETUPAPI
3403HSPFILELOG
3404WINAPI
3405SetupInitializeFileLogW(IN PCWSTR LogFileName, OPTIONAL IN DWORD Flags);
3406
3407#ifdef UNICODE
3408#define SetupInitializeFileLog SetupInitializeFileLogW
3409#else
3410#define SetupInitializeFileLog SetupInitializeFileLogA
3411#endif
3412
3413//
3414// Flags for SetupInitializeFileLog
3415//
3416#define SPFILELOG_SYSTEMLOG \
3417 0x00000001 // use system log -- must be Administrator
3418#define SPFILELOG_FORCENEW 0x00000002 // not valid with SPFILELOG_SYSTEMLOG
3419#define SPFILELOG_QUERYONLY \
3420 0x00000004 // allows non-administrators to read system log
3421
3422WINSETUPAPI
3423BOOL WINAPI
3424SetupTerminateFileLog(IN HSPFILELOG FileLogHandle);
3425
3426WINSETUPAPI
3427BOOL WINAPI
3428SetupLogFileA(IN HSPFILELOG FileLogHandle,
3429 IN PCSTR LogSectionName,
3430 OPTIONAL IN PCSTR SourceFilename,
3431 IN PCSTR TargetFilename,
3432 IN DWORD Checksum,
3433 OPTIONAL IN PCSTR DiskTagfile,
3434 OPTIONAL IN PCSTR DiskDescription,
3435 OPTIONAL IN PCSTR OtherInfo,
3436 OPTIONAL IN DWORD Flags);
3437
3438WINSETUPAPI
3439BOOL WINAPI
3440SetupLogFileW(IN HSPFILELOG FileLogHandle,
3441 IN PCWSTR LogSectionName,
3442 OPTIONAL IN PCWSTR SourceFilename,
3443 IN PCWSTR TargetFilename,
3444 IN DWORD Checksum,
3445 OPTIONAL IN PCWSTR DiskTagfile,
3446 OPTIONAL IN PCWSTR DiskDescription,
3447 OPTIONAL IN PCWSTR OtherInfo,
3448 OPTIONAL IN DWORD Flags);
3449
3450#ifdef UNICODE
3451#define SetupLogFile SetupLogFileW
3452#else
3453#define SetupLogFile SetupLogFileA
3454#endif
3455
3456//
3457// Flags for SetupLogFile
3458//
3459#define SPFILELOG_OEMFILE 0x00000001
3460
3461WINSETUPAPI
3462BOOL WINAPI
3463SetupRemoveFileLogEntryA(IN HSPFILELOG FileLogHandle,
3464 IN PCSTR LogSectionName,
3465 OPTIONAL IN PCSTR TargetFilename OPTIONAL);
3466
3467WINSETUPAPI
3468BOOL WINAPI
3469SetupRemoveFileLogEntryW(IN HSPFILELOG FileLogHandle,
3470 IN PCWSTR LogSectionName,
3471 OPTIONAL IN PCWSTR TargetFilename OPTIONAL);
3472
3473#ifdef UNICODE
3474#define SetupRemoveFileLogEntry SetupRemoveFileLogEntryW
3475#else
3476#define SetupRemoveFileLogEntry SetupRemoveFileLogEntryA
3477#endif
3478
3479//
3480// Items retrievable from SetupQueryFileLog()
3481//
3482typedef enum
3483{
3484 SetupFileLogSourceFilename,
3485 SetupFileLogChecksum,
3486 SetupFileLogDiskTagfile,
3487 SetupFileLogDiskDescription,
3488 SetupFileLogOtherInfo,
3489 SetupFileLogMax
3490} SetupFileLogInfo;
3491
3492WINSETUPAPI
3493BOOL WINAPI
3494SetupQueryFileLogA(IN HSPFILELOG FileLogHandle,
3495 IN PCSTR LogSectionName,
3496 OPTIONAL IN PCSTR TargetFilename,
3497 IN SetupFileLogInfo DesiredInfo,
3498 OUT PSTR DataOut,
3499 OPTIONAL IN DWORD ReturnBufferSize,
3500 OUT PDWORD RequiredSize OPTIONAL);
3501
3502WINSETUPAPI
3503BOOL WINAPI
3504SetupQueryFileLogW(IN HSPFILELOG FileLogHandle,
3505 IN PCWSTR LogSectionName,
3506 OPTIONAL IN PCWSTR TargetFilename,
3507 IN SetupFileLogInfo DesiredInfo,
3508 OUT PWSTR DataOut,
3509 OPTIONAL IN DWORD ReturnBufferSize,
3510 OUT PDWORD RequiredSize OPTIONAL);
3511
3512#ifdef UNICODE
3513#define SetupQueryFileLog SetupQueryFileLogW
3514#else
3515#define SetupQueryFileLog SetupQueryFileLogA
3516#endif
3517
3518//
3519// Text logging APIs
3520//
3521#define LogSeverity DWORD
3522#define LogSevInformation 0x00000000
3523#define LogSevWarning 0x00000001
3524#define LogSevError 0x00000002
3525#define LogSevFatalError 0x00000003
3526#define LogSevMaximum 0x00000004
3527
3528WINSETUPAPI
3529BOOL WINAPI
3530SetupOpenLog(BOOL Erase);
3531
3532WINSETUPAPI
3533BOOL WINAPI
3534SetupLogErrorA(IN LPCSTR MessageString, IN LogSeverity Severity);
3535
3536WINSETUPAPI
3537BOOL WINAPI
3538SetupLogErrorW(IN LPCWSTR MessageString, IN LogSeverity Severity);
3539
3540#ifdef UNICODE
3541#define SetupLogError SetupLogErrorW
3542#else
3543#define SetupLogError SetupLogErrorA
3544#endif
3545
3546WINSETUPAPI
3547VOID WINAPI SetupCloseLog(VOID);
3548
3549//
3550// Backup Information API
3551//
3552
3553WINSETUPAPI
3554BOOL WINAPI
3555SetupGetBackupInformationA(IN HSPFILEQ QueueHandle,
3556 OUT PSP_BACKUP_QUEUE_PARAMS_A BackupParams);
3557
3558WINSETUPAPI
3559BOOL WINAPI
3560SetupGetBackupInformationW(IN HSPFILEQ QueueHandle,
3561 OUT PSP_BACKUP_QUEUE_PARAMS_W BackupParams);
3562
3563#ifdef UNICODE
3564#define SetupGetBackupInformation SetupGetBackupInformationW
3565#else
3566#define SetupGetBackupInformation SetupGetBackupInformationA
3567#endif
3568
3569//
3570// Device Installer APIs
3571//
3572
3573WINSETUPAPI
3574HDEVINFO
3575WINAPI
3576SetupDiCreateDeviceInfoList(IN CONST GUID* ClassGuid,
3577 OPTIONAL IN HWND hwndParent OPTIONAL);
3578
3579WINSETUPAPI
3580HDEVINFO
3581WINAPI
3582SetupDiCreateDeviceInfoListExA(IN CONST GUID* ClassGuid,
3583 OPTIONAL IN HWND hwndParent,
3584 OPTIONAL IN PCSTR MachineName,
3585 OPTIONAL IN PVOID Reserved);
3586
3587WINSETUPAPI
3588HDEVINFO
3589WINAPI
3590SetupDiCreateDeviceInfoListExW(IN CONST GUID* ClassGuid,
3591 OPTIONAL IN HWND hwndParent,
3592 OPTIONAL IN PCWSTR MachineName,
3593 OPTIONAL IN PVOID Reserved);
3594
3595#ifdef UNICODE
3596#define SetupDiCreateDeviceInfoListEx SetupDiCreateDeviceInfoListExW
3597#else
3598#define SetupDiCreateDeviceInfoListEx SetupDiCreateDeviceInfoListExA
3599#endif
3600
3601WINSETUPAPI
3602BOOL WINAPI
3603SetupDiGetDeviceInfoListClass(IN HDEVINFO DeviceInfoSet, OUT LPGUID ClassGuid);
3604
3605WINSETUPAPI
3606BOOL WINAPI
3607SetupDiGetDeviceInfoListDetailA(IN HDEVINFO DeviceInfoSet,
3609 DeviceInfoSetDetailData);
3610
3611WINSETUPAPI
3612BOOL WINAPI
3613SetupDiGetDeviceInfoListDetailW(IN HDEVINFO DeviceInfoSet,
3615 DeviceInfoSetDetailData);
3616
3617#ifdef UNICODE
3618#define SetupDiGetDeviceInfoListDetail SetupDiGetDeviceInfoListDetailW
3619#else
3620#define SetupDiGetDeviceInfoListDetail SetupDiGetDeviceInfoListDetailA
3621#endif
3622
3623//
3624// Flags for SetupDiCreateDeviceInfo
3625//
3626#define DICD_GENERATE_ID 0x00000001
3627#define DICD_INHERIT_CLASSDRVS 0x00000002
3628
3629WINSETUPAPI
3630BOOL WINAPI
3631SetupDiCreateDeviceInfoA(IN HDEVINFO DeviceInfoSet,
3632 IN PCSTR DeviceName,
3633 IN CONST GUID* ClassGuid,
3634 IN PCSTR DeviceDescription,
3635 OPTIONAL IN HWND hwndParent,
3636 OPTIONAL IN DWORD CreationFlags,
3637 OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL);
3638
3639WINSETUPAPI
3640BOOL WINAPI
3641SetupDiCreateDeviceInfoW(IN HDEVINFO DeviceInfoSet,
3642 IN PCWSTR DeviceName,
3643 IN CONST GUID* ClassGuid,
3644 IN PCWSTR DeviceDescription,
3645 OPTIONAL IN HWND hwndParent,
3646 OPTIONAL IN DWORD CreationFlags,
3647 OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL);
3648
3649#ifdef UNICODE
3650#define SetupDiCreateDeviceInfo SetupDiCreateDeviceInfoW
3651#else
3652#define SetupDiCreateDeviceInfo SetupDiCreateDeviceInfoA
3653#endif
3654
3655//
3656// Flags for SetupDiOpenDeviceInfo
3657//
3658#define DIOD_INHERIT_CLASSDRVS 0x00000002
3659#define DIOD_CANCEL_REMOVE 0x00000004
3660
3661WINSETUPAPI
3662BOOL WINAPI
3663SetupDiOpenDeviceInfoA(IN HDEVINFO DeviceInfoSet,
3664 IN PCSTR DeviceInstanceId,
3665 IN HWND hwndParent,
3666 OPTIONAL IN DWORD OpenFlags,
3667 OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL);
3668
3669WINSETUPAPI
3670BOOL WINAPI
3671SetupDiOpenDeviceInfoW(IN HDEVINFO DeviceInfoSet,
3672 IN PCWSTR DeviceInstanceId,
3673 IN HWND hwndParent,
3674 OPTIONAL IN DWORD OpenFlags,
3675 OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL);
3676
3677#ifdef UNICODE
3678#define SetupDiOpenDeviceInfo SetupDiOpenDeviceInfoW
3679#else
3680#define SetupDiOpenDeviceInfo SetupDiOpenDeviceInfoA
3681#endif
3682
3683WINSETUPAPI
3684BOOL WINAPI
3685SetupDiGetDeviceInstanceIdA(IN HDEVINFO DeviceInfoSet,
3686 IN PSP_DEVINFO_DATA DeviceInfoData,
3687 OUT PSTR DeviceInstanceId,
3688 IN DWORD DeviceInstanceIdSize,
3689 OUT PDWORD RequiredSize OPTIONAL);
3690
3691WINSETUPAPI
3692BOOL WINAPI
3693SetupDiGetDeviceInstanceIdW(IN HDEVINFO DeviceInfoSet,
3694 IN PSP_DEVINFO_DATA DeviceInfoData,
3695 OUT PWSTR DeviceInstanceId,
3696 IN DWORD DeviceInstanceIdSize,
3697 OUT PDWORD RequiredSize OPTIONAL);
3698
3699#ifdef UNICODE
3700#define SetupDiGetDeviceInstanceId SetupDiGetDeviceInstanceIdW
3701#else
3702#define SetupDiGetDeviceInstanceId SetupDiGetDeviceInstanceIdA
3703#endif
3704
3705WINSETUPAPI
3706BOOL WINAPI
3707SetupDiDeleteDeviceInfo(IN HDEVINFO DeviceInfoSet,
3708 IN PSP_DEVINFO_DATA DeviceInfoData);
3709
3710WINSETUPAPI
3711BOOL WINAPI
3712SetupDiEnumDeviceInfo(IN HDEVINFO DeviceInfoSet,
3713 IN DWORD MemberIndex,
3714 OUT PSP_DEVINFO_DATA DeviceInfoData);
3715
3716WINSETUPAPI
3717BOOL WINAPI
3718SetupDiDestroyDeviceInfoList(IN HDEVINFO DeviceInfoSet);
3719
3720WINSETUPAPI
3721BOOL WINAPI
3722SetupDiEnumDeviceInterfaces(IN HDEVINFO DeviceInfoSet,
3723 IN PSP_DEVINFO_DATA DeviceInfoData,
3724 OPTIONAL IN CONST GUID* InterfaceClassGuid,
3725 IN DWORD MemberIndex,
3726 OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData);
3727
3728//
3729// Backward compatibility--do not use
3730//
3731#define SetupDiEnumInterfaceDevice SetupDiEnumDeviceInterfaces
3732
3733WINSETUPAPI
3734BOOL WINAPI
3735SetupDiCreateDeviceInterfaceA(IN HDEVINFO DeviceInfoSet,
3736 IN PSP_DEVINFO_DATA DeviceInfoData,
3737 IN CONST GUID* InterfaceClassGuid,
3738 IN PCSTR ReferenceString,
3739 OPTIONAL IN DWORD CreationFlags,
3740 OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData
3741 OPTIONAL);
3742
3743WINSETUPAPI
3744BOOL WINAPI
3745SetupDiCreateDeviceInterfaceW(IN HDEVINFO DeviceInfoSet,
3746 IN PSP_DEVINFO_DATA DeviceInfoData,
3747 IN CONST GUID* InterfaceClassGuid,
3748 IN PCWSTR ReferenceString,
3749 OPTIONAL IN DWORD CreationFlags,
3750 OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData
3751 OPTIONAL);
3752
3753#ifdef UNICODE
3754#define SetupDiCreateDeviceInterface SetupDiCreateDeviceInterfaceW
3755#else
3756#define SetupDiCreateDeviceInterface SetupDiCreateDeviceInterfaceA
3757#endif
3758
3759//
3760// Backward compatibility--do not use.
3761//
3762#define SetupDiCreateInterfaceDeviceW SetupDiCreateDeviceInterfaceW
3763#define SetupDiCreateInterfaceDeviceA SetupDiCreateDeviceInterfaceA
3764#ifdef UNICODE
3765#define SetupDiCreateInterfaceDevice SetupDiCreateDeviceInterfaceW
3766#else
3767#define SetupDiCreateInterfaceDevice SetupDiCreateDeviceInterfaceA
3768#endif
3769
3770//
3771// Flags for SetupDiOpenDeviceInterface
3772//
3773#define DIODI_NO_ADD 0x00000001
3774
3775WINSETUPAPI
3776BOOL WINAPI
3777SetupDiOpenDeviceInterfaceA(IN HDEVINFO DeviceInfoSet,
3778 IN PCSTR DevicePath,
3779 IN DWORD OpenFlags,
3780 OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData
3781 OPTIONAL);
3782
3783WINSETUPAPI
3784BOOL WINAPI
3785SetupDiOpenDeviceInterfaceW(IN HDEVINFO DeviceInfoSet,
3786 IN PCWSTR DevicePath,
3787 IN DWORD OpenFlags,
3788 OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData
3789 OPTIONAL);
3790
3791#ifdef UNICODE
3792#define SetupDiOpenDeviceInterface SetupDiOpenDeviceInterfaceW
3793#else
3794#define SetupDiOpenDeviceInterface SetupDiOpenDeviceInterfaceA
3795#endif
3796
3797//
3798// Backward compatibility--do not use
3799//
3800#define SetupDiOpenInterfaceDeviceW SetupDiOpenDeviceInterfaceW
3801#define SetupDiOpenInterfaceDeviceA SetupDiOpenDeviceInterfaceA
3802#ifdef UNICODE
3803#define SetupDiOpenInterfaceDevice SetupDiOpenDeviceInterfaceW
3804#else
3805#define SetupDiOpenInterfaceDevice SetupDiOpenDeviceInterfaceA
3806#endif
3807
3808WINSETUPAPI
3809BOOL WINAPI
3810SetupDiGetDeviceInterfaceAlias(IN HDEVINFO DeviceInfoSet,
3811 IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,
3812 IN CONST GUID* AliasInterfaceClassGuid,
3814 AliasDeviceInterfaceData);
3815
3816//
3817// Backward compatibility--do not use.
3818//
3819#define SetupDiGetInterfaceDeviceAlias SetupDiGetDeviceInterfaceAlias
3820
3821WINSETUPAPI
3822BOOL WINAPI
3823SetupDiDeleteDeviceInterfaceData(IN HDEVINFO DeviceInfoSet,
3825 DeviceInterfaceData);
3826
3827//
3828// Backward compatibility--do not use.
3829//
3830#define SetupDiDeleteInterfaceDeviceData SetupDiDeleteDeviceInterfaceData
3831
3832WINSETUPAPI
3833BOOL WINAPI
3834SetupDiRemoveDeviceInterface(IN HDEVINFO DeviceInfoSet,
3836 DeviceInterfaceData);
3837
3838//
3839// Backward compatibility--do not use.
3840//
3841#define SetupDiRemoveInterfaceDevice SetupDiRemoveDeviceInterface
3842
3843WINSETUPAPI
3844BOOL WINAPI
3845SetupDiGetDeviceInterfaceDetailA(
3846 IN HDEVINFO DeviceInfoSet,
3847 IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,
3848 OUT PSP_DEVICE_INTERFACE_DETAIL_DATA_A DeviceInterfaceDetailData,
3849 OPTIONAL IN DWORD DeviceInterfaceDetailDataSize,
3850 OUT PDWORD RequiredSize,
3851 OPTIONAL OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL);
3852
3853WINSETUPAPI
3854BOOL WINAPI
3855SetupDiGetDeviceInterfaceDetailW(
3856 IN HDEVINFO DeviceInfoSet,
3857 IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,
3858 OUT PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData,
3859 OPTIONAL IN DWORD DeviceInterfaceDetailDataSize,
3860 OUT PDWORD RequiredSize,
3861 OPTIONAL OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL);
3862
3863#ifdef UNICODE
3864#define SetupDiGetDeviceInterfaceDetail SetupDiGetDeviceInterfaceDetailW
3865#else
3866#define SetupDiGetDeviceInterfaceDetail SetupDiGetDeviceInterfaceDetailA
3867#endif
3868
3869//
3870// Backward compatibility--do not use.
3871//
3872#define SetupDiGetInterfaceDeviceDetailW SetupDiGetDeviceInterfaceDetailW
3873#define SetupDiGetInterfaceDeviceDetailA SetupDiGetDeviceInterfaceDetailA
3874#ifdef UNICODE
3875#define SetupDiGetInterfaceDeviceDetail SetupDiGetDeviceInterfaceDetailW
3876#else
3877#define SetupDiGetInterfaceDeviceDetail SetupDiGetDeviceInterfaceDetailA
3878#endif
3879
3880//
3881// Default install handler for DIF_INSTALLINTERFACES.
3882//
3883WINSETUPAPI
3884BOOL WINAPI
3885SetupDiInstallDeviceInterfaces(IN HDEVINFO DeviceInfoSet,
3886 IN PSP_DEVINFO_DATA DeviceInfoData);
3887
3888//
3889// Backward compatibility--do not use.
3890//
3891#define SetupDiInstallInterfaceDevices SetupDiInstallDeviceInterfaces
3892
3893//
3894// Default install handler for DIF_REGISTERDEVICE
3895//
3896
3897//
3898// Flags for SetupDiRegisterDeviceInfo
3899//
3900#define SPRDI_FIND_DUPS 0x00000001
3901
3902WINSETUPAPI
3903BOOL WINAPI
3904SetupDiRegisterDeviceInfo(IN HDEVINFO DeviceInfoSet,
3905 IN OUT PSP_DEVINFO_DATA DeviceInfoData,
3906 IN DWORD Flags,
3907 IN PSP_DETSIG_CMPPROC CompareProc,
3908 OPTIONAL IN PVOID CompareContext,
3909 OPTIONAL OUT PSP_DEVINFO_DATA DupDeviceInfoData
3910 OPTIONAL);
3911
3912//
3913// Ordinal values distinguishing between class drivers and
3914// device drivers.
3915// (Passed in 'DriverType' parameter of driver information list APIs)
3916//
3917#define SPDIT_NODRIVER 0x00000000
3918#define SPDIT_CLASSDRIVER 0x00000001
3919#define SPDIT_COMPATDRIVER 0x00000002
3920
3921WINSETUPAPI
3922BOOL WINAPI
3923SetupDiBuildDriverInfoList(IN HDEVINFO DeviceInfoSet,
3924 IN OUT PSP_DEVINFO_DATA DeviceInfoData,
3925 OPTIONAL IN DWORD DriverType);
3926
3927WINSETUPAPI
3928BOOL WINAPI
3929SetupDiCancelDriverInfoSearch(IN HDEVINFO DeviceInfoSet);
3930
3931WINSETUPAPI
3932BOOL WINAPI
3933SetupDiEnumDriverInfoA(IN HDEVINFO DeviceInfoSet,
3934 IN PSP_DEVINFO_DATA DeviceInfoData,
3935 OPTIONAL IN DWORD DriverType,
3936 IN DWORD MemberIndex,
3937 OUT PSP_DRVINFO_DATA_A DriverInfoData);
3938
3939WINSETUPAPI
3940BOOL WINAPI
3941SetupDiEnumDriverInfoW(IN HDEVINFO DeviceInfoSet,
3942 IN PSP_DEVINFO_DATA DeviceInfoData,
3943 OPTIONAL IN DWORD DriverType,
3944 IN DWORD MemberIndex,
3945 OUT PSP_DRVINFO_DATA_W DriverInfoData);
3946
3947#ifdef UNICODE
3948#define SetupDiEnumDriverInfo SetupDiEnumDriverInfoW
3949#else
3950#define SetupDiEnumDriverInfo SetupDiEnumDriverInfoA
3951#endif
3952
3953WINSETUPAPI
3954BOOL WINAPI
3955SetupDiGetSelectedDriverA(IN HDEVINFO DeviceInfoSet,
3956 IN PSP_DEVINFO_DATA DeviceInfoData,
3957 OPTIONAL OUT PSP_DRVINFO_DATA_A DriverInfoData);
3958
3959WINSETUPAPI
3960BOOL WINAPI
3961SetupDiGetSelectedDriverW(IN HDEVINFO DeviceInfoSet,
3962 IN PSP_DEVINFO_DATA DeviceInfoData,
3963 OPTIONAL OUT PSP_DRVINFO_DATA_W DriverInfoData);
3964
3965#ifdef UNICODE
3966#define SetupDiGetSelectedDriver SetupDiGetSelectedDriverW
3967#else
3968#define SetupDiGetSelectedDriver SetupDiGetSelectedDriverA
3969#endif
3970
3971WINSETUPAPI
3972BOOL WINAPI
3973SetupDiSetSelectedDriverA(IN HDEVINFO DeviceInfoSet,
3974 IN PSP_DEVINFO_DATA DeviceInfoData,
3975 OPTIONAL IN OUT PSP_DRVINFO_DATA_A DriverInfoData
3976 OPTIONAL);
3977
3978WINSETUPAPI
3979BOOL WINAPI
3980SetupDiSetSelectedDriverW(IN HDEVINFO DeviceInfoSet,
3981 IN PSP_DEVINFO_DATA DeviceInfoData,
3982 OPTIONAL IN OUT PSP_DRVINFO_DATA_W DriverInfoData
3983 OPTIONAL);
3984
3985#ifdef UNICODE
3986#define SetupDiSetSelectedDriver SetupDiSetSelectedDriverW
3987#else
3988#define SetupDiSetSelectedDriver SetupDiSetSelectedDriverA
3989#endif
3990
3991WINSETUPAPI
3992BOOL WINAPI
3993SetupDiGetDriverInfoDetailA(IN HDEVINFO DeviceInfoSet,
3994 IN PSP_DEVINFO_DATA DeviceInfoData,
3995 OPTIONAL IN PSP_DRVINFO_DATA_A DriverInfoData,
3996 OUT PSP_DRVINFO_DETAIL_DATA_A DriverInfoDetailData,
3997 OPTIONAL IN DWORD DriverInfoDetailDataSize,
3998 OUT PDWORD RequiredSize OPTIONAL);
3999
4000WINSETUPAPI
4001BOOL WINAPI
4002SetupDiGetDriverInfoDetailW(IN HDEVINFO DeviceInfoSet,
4003 IN PSP_DEVINFO_DATA DeviceInfoData,
4004 OPTIONAL IN PSP_DRVINFO_DATA_W DriverInfoData,
4005 OUT PSP_DRVINFO_DETAIL_DATA_W DriverInfoDetailData,
4006 OPTIONAL IN DWORD DriverInfoDetailDataSize,
4007 OUT PDWORD RequiredSize OPTIONAL);
4008
4009#ifdef UNICODE
4010#define SetupDiGetDriverInfoDetail SetupDiGetDriverInfoDetailW
4011#else
4012#define SetupDiGetDriverInfoDetail SetupDiGetDriverInfoDetailA
4013#endif
4014
4015WINSETUPAPI
4016BOOL WINAPI
4017SetupDiDestroyDriverInfoList(IN HDEVINFO DeviceInfoSet,
4018 IN PSP_DEVINFO_DATA DeviceInfoData,
4019 OPTIONAL IN DWORD DriverType);
4020
4021//
4022// Flags controlling what is included in the device information set built
4023// by SetupDiGetClassDevs
4024//
4025#define DIGCF_DEFAULT 0x00000001 // only valid with DIGCF_DEVICEINTERFACE
4026#define DIGCF_PRESENT 0x00000002
4027#define DIGCF_ALLCLASSES 0x00000004
4028#define DIGCF_PROFILE 0x00000008
4029#define DIGCF_DEVICEINTERFACE 0x00000010
4030
4031//
4032// Backward compatibility--do not use.
4033//
4034#define DIGCF_INTERFACEDEVICE DIGCF_DEVICEINTERFACE
4035
4036WINSETUPAPI
4037HDEVINFO
4038WINAPI
4039SetupDiGetClassDevsA(IN CONST GUID* ClassGuid,
4040 OPTIONAL IN PCSTR Enumerator,
4041 OPTIONAL IN HWND hwndParent,
4042 OPTIONAL IN DWORD Flags);
4043
4044WINSETUPAPI
4045HDEVINFO
4046WINAPI
4047SetupDiGetClassDevsW(IN CONST GUID* ClassGuid,
4048 OPTIONAL IN PCWSTR Enumerator,
4049 OPTIONAL IN HWND hwndParent,
4050 OPTIONAL IN DWORD Flags);
4051
4052#ifdef UNICODE
4053#define SetupDiGetClassDevs SetupDiGetClassDevsW
4054#else
4055#define SetupDiGetClassDevs SetupDiGetClassDevsA
4056#endif
4057
4058WINSETUPAPI
4059HDEVINFO
4060WINAPI
4061SetupDiGetClassDevsExA(IN CONST GUID* ClassGuid,
4062 OPTIONAL IN PCSTR Enumerator,
4063 OPTIONAL IN HWND hwndParent,
4064 OPTIONAL IN DWORD Flags,
4065 IN HDEVINFO DeviceInfoSet,
4066 OPTIONAL IN PCSTR MachineName,
4067 OPTIONAL IN PVOID Reserved);
4068
4069WINSETUPAPI
4070HDEVINFO
4071WINAPI
4072SetupDiGetClassDevsExW(IN CONST GUID* ClassGuid,
4073 OPTIONAL IN PCWSTR Enumerator,
4074 OPTIONAL IN HWND hwndParent,
4075 OPTIONAL IN DWORD Flags,
4076 IN HDEVINFO DeviceInfoSet,
4077 OPTIONAL IN PCWSTR MachineName,
4078 OPTIONAL IN PVOID Reserved);
4079
4080#ifdef UNICODE
4081#define SetupDiGetClassDevsEx SetupDiGetClassDevsExW
4082#else
4083#define SetupDiGetClassDevsEx SetupDiGetClassDevsExA
4084#endif
4085
4086WINSETUPAPI
4087BOOL WINAPI
4088SetupDiGetINFClassA(IN PCSTR InfName,
4089 OUT LPGUID ClassGuid,
4090 OUT PSTR ClassName,
4091 IN DWORD ClassNameSize,
4092 OUT PDWORD RequiredSize OPTIONAL);
4093
4094WINSETUPAPI
4095BOOL WINAPI
4096SetupDiGetINFClassW(IN PCWSTR InfName,
4097 OUT LPGUID ClassGuid,
4098 OUT PWSTR ClassName,
4099 IN DWORD ClassNameSize,
4100 OUT PDWORD RequiredSize OPTIONAL);
4101
4102#ifdef UNICODE
4103#define SetupDiGetINFClass SetupDiGetINFClassW
4104#else
4105#define SetupDiGetINFClass SetupDiGetINFClassA
4106#endif
4107
4108//
4109// Flags controlling exclusion from the class information list built
4110// by SetupDiBuildClassInfoList(Ex)
4111//
4112#define DIBCI_NOINSTALLCLASS 0x00000001
4113#define DIBCI_NODISPLAYCLASS 0x00000002
4114
4115WINSETUPAPI
4116BOOL WINAPI
4117SetupDiBuildClassInfoList(IN DWORD Flags,
4118 OUT LPGUID ClassGuidList,
4119 IN DWORD ClassGuidListSize,
4120 OUT PDWORD RequiredSize);
4121
4122WINSETUPAPI
4123BOOL WINAPI
4124SetupDiBuildClassInfoListExA(IN DWORD Flags,
4125 OUT LPGUID ClassGuidList,
4126 IN DWORD ClassGuidListSize,
4127 OUT PDWORD RequiredSize,
4128 IN PCSTR MachineName,
4129 OPTIONAL IN PVOID Reserved);
4130
4131WINSETUPAPI
4132BOOL WINAPI
4133SetupDiBuildClassInfoListExW(IN DWORD Flags,
4134 OUT LPGUID ClassGuidList,
4135 IN DWORD ClassGuidListSize,
4136 OUT PDWORD RequiredSize,
4137 IN PCWSTR MachineName,
4138 OPTIONAL IN PVOID Reserved);
4139
4140#ifdef UNICODE
4141#define SetupDiBuildClassInfoListEx SetupDiBuildClassInfoListExW
4142#else
4143#define SetupDiBuildClassInfoListEx SetupDiBuildClassInfoListExA
4144#endif
4145
4146WINSETUPAPI
4147BOOL WINAPI
4148SetupDiGetClassDescriptionA(IN CONST GUID* ClassGuid,
4149 OUT PSTR ClassDescription,
4150 IN DWORD ClassDescriptionSize,
4151 OUT PDWORD RequiredSize OPTIONAL);
4152
4153WINSETUPAPI
4154BOOL WINAPI
4155SetupDiGetClassDescriptionW(IN CONST GUID* ClassGuid,
4156 OUT PWSTR ClassDescription,
4157 IN DWORD ClassDescriptionSize,
4158 OUT PDWORD RequiredSize OPTIONAL);
4159
4160#ifdef UNICODE
4161#define SetupDiGetClassDescription SetupDiGetClassDescriptionW
4162#else
4163#define SetupDiGetClassDescription SetupDiGetClassDescriptionA
4164#endif
4165
4166WINSETUPAPI
4167BOOL WINAPI
4168SetupDiGetClassDescriptionExA(IN CONST GUID* ClassGuid,
4169 OUT PSTR ClassDescription,
4170 IN DWORD ClassDescriptionSize,
4171 OUT PDWORD RequiredSize,
4172 OPTIONAL IN PCSTR MachineName,
4173 OPTIONAL IN PVOID Reserved);
4174
4175WINSETUPAPI
4176BOOL WINAPI
4177SetupDiGetClassDescriptionExW(IN CONST GUID* ClassGuid,
4178 OUT PWSTR ClassDescription,
4179 IN DWORD ClassDescriptionSize,
4180 OUT PDWORD RequiredSize,
4181 OPTIONAL IN PCWSTR MachineName,
4182 OPTIONAL IN PVOID Reserved);
4183
4184#ifdef UNICODE
4185#define SetupDiGetClassDescriptionEx SetupDiGetClassDescriptionExW
4186#else
4187#define SetupDiGetClassDescriptionEx SetupDiGetClassDescriptionExA
4188#endif
4189
4190WINSETUPAPI
4191BOOL WINAPI
4192SetupDiCallClassInstaller(IN DI_FUNCTION InstallFunction,
4193 IN HDEVINFO DeviceInfoSet,
4194 IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL);
4195
4196//
4197// Default install handler for DIF_SELECTDEVICE
4198//
4199WINSETUPAPI
4200BOOL WINAPI
4201SetupDiSelectDevice(IN HDEVINFO DeviceInfoSet,
4202 IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL);
4203
4204//
4205// Default install handler for DIF_SELECTBESTCOMPATDRV
4206//
4207WINSETUPAPI
4208BOOL WINAPI
4209SetupDiSelectBestCompatDrv(IN HDEVINFO DeviceInfoSet,
4210 IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL);
4211
4212//
4213// Default install handler for DIF_INSTALLDEVICE
4214//
4215WINSETUPAPI
4216BOOL WINAPI
4217SetupDiInstallDevice(IN HDEVINFO DeviceInfoSet,
4218 IN OUT PSP_DEVINFO_DATA DeviceInfoData);
4219
4220//
4221// Default install handler for DIF_INSTALLDEVICEFILES
4222//
4223WINSETUPAPI
4224BOOL WINAPI
4225SetupDiInstallDriverFiles(IN HDEVINFO DeviceInfoSet,
4226 IN PSP_DEVINFO_DATA DeviceInfoData);
4227
4228//
4229// Default install handler for DIF_REGISTER_COINSTALLERS
4230//
4231WINSETUPAPI
4232BOOL WINAPI
4233SetupDiRegisterCoDeviceInstallers(IN HDEVINFO DeviceInfoSet,
4234 IN PSP_DEVINFO_DATA DeviceInfoData);
4235
4236//
4237// Default install handler for DIF_REMOVE
4238//
4239WINSETUPAPI
4240BOOL WINAPI
4241SetupDiRemoveDevice(IN HDEVINFO DeviceInfoSet,
4242 IN OUT PSP_DEVINFO_DATA DeviceInfoData);
4243
4244//
4245// Default install handler for DIF_UNREMOVE
4246//
4247WINSETUPAPI
4248BOOL WINAPI
4249SetupDiUnremoveDevice(IN HDEVINFO DeviceInfoSet,
4250 IN OUT PSP_DEVINFO_DATA DeviceInfoData);
4251
4252//
4253// Default install handler for DIF_MOVEDEVICE
4254//
4255WINSETUPAPI
4256BOOL WINAPI
4257SetupDiMoveDuplicateDevice(IN HDEVINFO DeviceInfoSet,
4258 IN PSP_DEVINFO_DATA DestinationDeviceInfoData);
4259
4260//
4261// Default install handler for DIF_PROPERTYCHANGE
4262//
4263WINSETUPAPI
4264BOOL WINAPI
4265SetupDiChangeState(IN HDEVINFO DeviceInfoSet,
4266 IN OUT PSP_DEVINFO_DATA DeviceInfoData);
4267
4268WINSETUPAPI
4269BOOL WINAPI
4270SetupDiInstallClassA(IN HWND hwndParent,
4271 OPTIONAL IN PCSTR InfFileName,
4272 IN DWORD Flags,
4273 IN HSPFILEQ FileQueue OPTIONAL);
4274
4275WINSETUPAPI
4276BOOL WINAPI
4277SetupDiInstallClassW(IN HWND hwndParent,
4278 OPTIONAL IN PCWSTR InfFileName,
4279 IN DWORD Flags,
4280 IN HSPFILEQ FileQueue OPTIONAL);
4281
4282#ifdef UNICODE
4283#define SetupDiInstallClass SetupDiInstallClassW
4284#else
4285#define SetupDiInstallClass SetupDiInstallClassA
4286#endif
4287
4288WINSETUPAPI
4289BOOL WINAPI
4290SetupDiInstallClassExA(IN HWND hwndParent,
4291 OPTIONAL IN PCSTR InfFileName,
4292 OPTIONAL IN DWORD Flags,
4293 IN HSPFILEQ FileQueue,
4294 OPTIONAL IN CONST GUID* InterfaceClassGuid,
4295 OPTIONAL IN PVOID Reserved1,
4296 IN PVOID Reserved2);
4297
4298WINSETUPAPI
4299BOOL WINAPI
4300SetupDiInstallClassExW(IN HWND hwndParent,
4301 OPTIONAL IN PCWSTR InfFileName,
4302 OPTIONAL IN DWORD Flags,
4303 IN HSPFILEQ FileQueue,
4304 OPTIONAL IN CONST GUID* InterfaceClassGuid,
4305 OPTIONAL IN PVOID Reserved1,
4306 IN PVOID Reserved2);
4307
4308#ifdef UNICODE
4309#define SetupDiInstallClassEx SetupDiInstallClassExW
4310#else
4311#define SetupDiInstallClassEx SetupDiInstallClassExA
4312#endif
4313
4314WINSETUPAPI
4315HKEY WINAPI
4316SetupDiOpenClassRegKey(IN CONST GUID* ClassGuid, OPTIONAL IN REGSAM samDesired);
4317
4318//
4319// Flags for SetupDiOpenClassRegKeyEx
4320//
4321#define DIOCR_INSTALLER 0x00000001 // class installer registry branch
4322#define DIOCR_INTERFACE 0x00000002 // interface class registry branch
4323
4324WINSETUPAPI
4325HKEY WINAPI
4326SetupDiOpenClassRegKeyExA(IN CONST GUID* ClassGuid,
4327 OPTIONAL IN REGSAM samDesired,
4328 IN DWORD Flags,
4329 IN PCSTR MachineName,
4330 OPTIONAL IN PVOID Reserved);
4331
4332WINSETUPAPI
4333HKEY WINAPI
4334SetupDiOpenClassRegKeyExW(IN CONST GUID* ClassGuid,
4335 OPTIONAL IN REGSAM samDesired,
4336 IN DWORD Flags,
4337 IN PCWSTR MachineName,
4338 OPTIONAL IN PVOID Reserved);
4339
4340#ifdef UNICODE
4341#define SetupDiOpenClassRegKeyEx SetupDiOpenClassRegKeyExW
4342#else
4343#define SetupDiOpenClassRegKeyEx SetupDiOpenClassRegKeyExA
4344#endif
4345
4346WINSETUPAPI
4347HKEY WINAPI
4348SetupDiCreateDeviceInterfaceRegKeyA(IN HDEVINFO DeviceInfoSet,
4350 DeviceInterfaceData,
4351 IN DWORD Reserved,
4352 IN REGSAM samDesired,
4353 IN HINF InfHandle,
4354 OPTIONAL IN PCSTR InfSectionName OPTIONAL);
4355
4356WINSETUPAPI
4357HKEY WINAPI
4358SetupDiCreateDeviceInterfaceRegKeyW(IN HDEVINFO DeviceInfoSet,
4360 DeviceInterfaceData,
4361 IN DWORD Reserved,
4362 IN REGSAM samDesired,
4363 IN HINF InfHandle,
4364 OPTIONAL IN PCWSTR InfSectionName OPTIONAL);
4365
4366#ifdef UNICODE
4367#define SetupDiCreateDeviceInterfaceRegKey SetupDiCreateDeviceInterfaceRegKeyW
4368#else
4369#define SetupDiCreateDeviceInterfaceRegKey SetupDiCreateDeviceInterfaceRegKeyA
4370#endif
4371
4372//
4373// Backward compatibility--do not use.
4374//
4375#define SetupDiCreateInterfaceDeviceRegKeyW SetupDiCreateDeviceInterfaceRegKeyW
4376#define SetupDiCreateInterfaceDeviceRegKeyA SetupDiCreateDeviceInterfaceRegKeyA
4377#ifdef UNICODE
4378#define SetupDiCreateInterfaceDeviceRegKey SetupDiCreateDeviceInterfaceRegKeyW
4379#else
4380#define SetupDiCreateInterfaceDeviceRegKey SetupDiCreateDeviceInterfaceRegKeyA
4381#endif
4382
4383WINSETUPAPI
4384HKEY WINAPI
4385SetupDiOpenDeviceInterfaceRegKey(IN HDEVINFO DeviceInfoSet,
4387 DeviceInterfaceData,
4388 IN DWORD Reserved,
4389 IN REGSAM samDesired);
4390
4391//
4392// Backward compatibility--do not use.
4393//
4394#define SetupDiOpenInterfaceDeviceRegKey SetupDiOpenDeviceInterfaceRegKey
4395
4396WINSETUPAPI
4397BOOL WINAPI
4398SetupDiDeleteDeviceInterfaceRegKey(IN HDEVINFO DeviceInfoSet,
4400 DeviceInterfaceData,
4401 IN DWORD Reserved);
4402
4403//
4404// Backward compatibility--do not use.
4405//
4406#define SetupDiDeleteInterfaceDeviceRegKey SetupDiDeleteDeviceInterfaceRegKey
4407
4408//
4409// KeyType values for SetupDiCreateDevRegKey, SetupDiOpenDevRegKey, and
4410// SetupDiDeleteDevRegKey.
4411//
4412#define DIREG_DEV 0x00000001 // Open/Create/Delete device key
4413#define DIREG_DRV 0x00000002 // Open/Create/Delete driver key
4414#define DIREG_BOTH 0x00000004 // Delete both driver and Device key
4415
4416WINSETUPAPI
4417HKEY WINAPI
4418SetupDiCreateDevRegKeyA(IN HDEVINFO DeviceInfoSet,
4419 IN PSP_DEVINFO_DATA DeviceInfoData,
4420 IN DWORD Scope,
4421 IN DWORD HwProfile,
4422 IN DWORD KeyType,
4423 IN HINF InfHandle,
4424 OPTIONAL IN PCSTR InfSectionName OPTIONAL);
4425
4426WINSETUPAPI
4427HKEY WINAPI
4428SetupDiCreateDevRegKeyW(IN HDEVINFO DeviceInfoSet,
4429 IN PSP_DEVINFO_DATA DeviceInfoData,
4430 IN DWORD Scope,
4431 IN DWORD HwProfile,
4432 IN DWORD KeyType,
4433 IN HINF InfHandle,
4434 OPTIONAL IN PCWSTR InfSectionName OPTIONAL);
4435
4436#ifdef UNICODE
4437#define SetupDiCreateDevRegKey SetupDiCreateDevRegKeyW
4438#else
4439#define SetupDiCreateDevRegKey SetupDiCreateDevRegKeyA
4440#endif
4441
4442WINSETUPAPI
4443HKEY WINAPI
4444SetupDiOpenDevRegKey(IN HDEVINFO DeviceInfoSet,
4445 IN PSP_DEVINFO_DATA DeviceInfoData,
4446 IN DWORD Scope,
4447 IN DWORD HwProfile,
4448 IN DWORD KeyType,
4449 IN REGSAM samDesired);
4450
4451WINSETUPAPI
4452BOOL WINAPI
4453SetupDiDeleteDevRegKey(IN HDEVINFO DeviceInfoSet,
4454 IN PSP_DEVINFO_DATA DeviceInfoData,
4455 IN DWORD Scope,
4456 IN DWORD HwProfile,
4457 IN DWORD KeyType);
4458
4459WINSETUPAPI
4460BOOL WINAPI
4461SetupDiGetHwProfileList(OUT PDWORD HwProfileList,
4462 IN DWORD HwProfileListSize,
4463 OUT PDWORD RequiredSize,
4464 OUT PDWORD CurrentlyActiveIndex OPTIONAL);
4465
4466WINSETUPAPI
4467BOOL WINAPI
4468SetupDiGetHwProfileListExA(OUT PDWORD HwProfileList,
4469 IN DWORD HwProfileListSize,
4470 OUT PDWORD RequiredSize,
4471 OUT PDWORD CurrentlyActiveIndex,
4472 OPTIONAL IN PCSTR MachineName,
4473 OPTIONAL IN PVOID Reserved);
4474
4475WINSETUPAPI
4476BOOL WINAPI
4477SetupDiGetHwProfileListExW(OUT PDWORD HwProfileList,
4478 IN DWORD HwProfileListSize,
4479 OUT PDWORD RequiredSize,
4480 OUT PDWORD CurrentlyActiveIndex,
4481 OPTIONAL IN PCWSTR MachineName,
4482 OPTIONAL IN PVOID Reserved);
4483
4484#ifdef UNICODE
4485#define SetupDiGetHwProfileListEx SetupDiGetHwProfileListExW
4486#else
4487#define SetupDiGetHwProfileListEx SetupDiGetHwProfileListExA
4488#endif
4489
4490//
4491// Device registry property codes
4492// (Codes marked as read-only (R) may only be used for
4493// SetupDiGetDeviceRegistryProperty)
4494//
4495// These values should cover the same set of registry properties
4496// as defined by the CM_DRP codes in cfgmgr32.h.
4497//
4498#define SPDRP_DEVICEDESC (0x00000000) // DeviceDesc (R/W)
4499#define SPDRP_HARDWAREID (0x00000001) // HardwareID (R/W)
4500#define SPDRP_COMPATIBLEIDS (0x00000002) // CompatibleIDs (R/W)
4501#define SPDRP_UNUSED0 (0x00000003) // unused
4502#define SPDRP_SERVICE (0x00000004) // Service (R/W)
4503#define SPDRP_UNUSED1 (0x00000005) // unused
4504#define SPDRP_UNUSED2 (0x00000006) // unused
4505#define SPDRP_CLASS (0x00000007) // Class (R--tied to ClassGUID)
4506#define SPDRP_CLASSGUID (0x00000008) // ClassGUID (R/W)
4507#define SPDRP_DRIVER (0x00000009) // Driver (R/W)
4508#define SPDRP_CONFIGFLAGS (0x0000000A) // ConfigFlags (R/W)
4509#define SPDRP_MFG (0x0000000B) // Mfg (R/W)
4510#define SPDRP_FRIENDLYNAME (0x0000000C) // FriendlyName (R/W)
4511#define SPDRP_LOCATION_INFORMATION (0x0000000D) // LocationInformation (R/W)
4512#define SPDRP_PHYSICAL_DEVICE_OBJECT_NAME \
4513 (0x0000000E) // PhysicalDeviceObjectName (R)
4514#define SPDRP_CAPABILITIES (0x0000000F) // Capabilities (R)
4515#define SPDRP_UI_NUMBER (0x00000010) // UiNumber (R)
4516#define SPDRP_UPPERFILTERS (0x00000011) // UpperFilters (R/W)
4517#define SPDRP_LOWERFILTERS (0x00000012) // LowerFilters (R/W)
4518#define SPDRP_BUSTYPEGUID (0x00000013) // BusTypeGUID (R)
4519#define SPDRP_LEGACYBUSTYPE (0x00000014) // LegacyBusType (R)
4520#define SPDRP_BUSNUMBER (0x00000015) // BusNumber (R)
4521#define SPDRP_ENUMERATOR_NAME (0x00000016) // Enumerator Name (R)
4522#define SPDRP_SECURITY (0x00000017) // Security (R/W, binary form)
4523#define SPDRP_SECURITY_SDS (0x00000018) // Security (W, SDS form)
4524#define SPDRP_DEVTYPE (0x00000019) // Device Type (R/W)
4525#define SPDRP_EXCLUSIVE (0x0000001A) // Device is exclusive-access (R/W)
4526#define SPDRP_CHARACTERISTICS (0x0000001B) // Device Characteristics (R/W)
4527#define SPDRP_ADDRESS (0x0000001C) // Device Address (R)
4528#define SPDRP_UI_NUMBER_DESC_FORMAT (0X0000001E) // UiNumberDescFormat (R/W)
4529#define SPDRP_MAXIMUM_PROPERTY (0x0000001F) // Upper bound on ordinals
4530//
4531// Class registry property codes
4532// (Codes marked as read-only (R) may only be used for
4533// SetupDiGetClassRegistryProperty)
4534//
4535// These values should cover the same set of registry properties
4536// as defined by the CM_CRP codes in cfgmgr32.h.
4537// they should also have a 1:1 correspondence with Device registers, where
4538// applicable but no overlap otherwise
4539//
4540#define SPCRP_SECURITY (0x00000017) // Security (R/W, binary form)
4541#define SPCRP_SECURITY_SDS (0x00000018) // Security (W, SDS form)
4542#define SPCRP_DEVTYPE (0x00000019) // Device Type (R/W)
4543#define SPCRP_EXCLUSIVE (0x0000001A) // Device is exclusive-access (R/W)
4544#define SPCRP_CHARACTERISTICS (0x0000001B) // Device Characteristics (R/W)
4545#define SPCRP_MAXIMUM_PROPERTY (0x0000001C) // Upper bound on ordinals
4546
4547WINSETUPAPI
4548BOOL WINAPI
4549SetupDiGetDeviceRegistryPropertyA(IN HDEVINFO DeviceInfoSet,
4550 IN PSP_DEVINFO_DATA DeviceInfoData,
4551 IN DWORD Property,
4552 OUT PDWORD PropertyRegDataType,
4553 OPTIONAL OUT PBYTE PropertyBuffer,
4554 IN DWORD PropertyBufferSize,
4555 OUT PDWORD RequiredSize OPTIONAL);
4556
4557WINSETUPAPI
4558BOOL WINAPI
4559SetupDiGetDeviceRegistryPropertyW(IN HDEVINFO DeviceInfoSet,
4560 IN PSP_DEVINFO_DATA DeviceInfoData,
4561 IN DWORD Property,
4562 OUT PDWORD PropertyRegDataType,
4563 OPTIONAL OUT PBYTE PropertyBuffer,
4564 IN DWORD PropertyBufferSize,
4565 OUT PDWORD RequiredSize OPTIONAL);
4566
4567#ifdef UNICODE
4568#define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyW
4569#else
4570#define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyA
4571#endif
4572
4573WINSETUPAPI
4574BOOL WINAPI
4575SetupDiGetClassRegistryPropertyA(IN LPGUID ClassGuid,
4576 IN DWORD Property,
4577 OUT PDWORD PropertyRegDataType,
4578 OPTIONAL OUT PBYTE PropertyBuffer,
4579 IN DWORD PropertyBufferSize,
4580 OUT PDWORD RequiredSize,
4581 OPTIONAL IN PCSTR MachineName,
4582 OPTIONAL IN PVOID Reserved);
4583
4584WINSETUPAPI
4585BOOL WINAPI
4586SetupDiGetClassRegistryPropertyW(IN LPGUID ClassGuid,
4587 IN DWORD Property,
4588 OUT PDWORD PropertyRegDataType,
4589 OPTIONAL OUT PBYTE PropertyBuffer,
4590 IN DWORD PropertyBufferSize,
4591 OUT PDWORD RequiredSize,
4592 OPTIONAL IN PCWSTR MachineName,
4593 OPTIONAL IN PVOID Reserved);
4594
4595#ifdef UNICODE
4596#define SetupDiGetClassRegistryProperty SetupDiGetClassRegistryPropertyW
4597#else
4598#define SetupDiGetClassRegistryProperty SetupDiGetClassRegistryPropertyA
4599#endif
4600
4601WINSETUPAPI
4602BOOL WINAPI
4603SetupDiSetDeviceRegistryPropertyA(IN HDEVINFO DeviceInfoSet,
4604 IN OUT PSP_DEVINFO_DATA DeviceInfoData,
4605 IN DWORD Property,
4606 IN CONST BYTE* PropertyBuffer,
4607 OPTIONAL IN DWORD PropertyBufferSize);
4608
4609WINSETUPAPI
4610BOOL WINAPI
4611SetupDiSetDeviceRegistryPropertyW(IN HDEVINFO DeviceInfoSet,
4612 IN OUT PSP_DEVINFO_DATA DeviceInfoData,
4613 IN DWORD Property,
4614 IN CONST BYTE* PropertyBuffer,
4615 OPTIONAL IN DWORD PropertyBufferSize);
4616
4617#ifdef UNICODE
4618#define SetupDiSetDeviceRegistryProperty SetupDiSetDeviceRegistryPropertyW
4619#else
4620#define SetupDiSetDeviceRegistryProperty SetupDiSetDeviceRegistryPropertyA
4621#endif
4622
4623WINSETUPAPI
4624BOOL WINAPI
4625SetupDiSetClassRegistryPropertyA(IN LPGUID ClassGuid,
4626 IN DWORD Property,
4627 IN CONST BYTE* PropertyBuffer,
4628 OPTIONAL IN DWORD PropertyBufferSize,
4629 IN PCSTR MachineName,
4630 OPTIONAL IN PVOID Reserved);
4631
4632WINSETUPAPI
4633BOOL WINAPI
4634SetupDiSetClassRegistryPropertyW(IN LPGUID ClassGuid,
4635 IN DWORD Property,
4636 IN CONST BYTE* PropertyBuffer,
4637 OPTIONAL IN DWORD PropertyBufferSize,
4638 IN PCWSTR MachineName,
4639 OPTIONAL IN PVOID Reserved);
4640
4641#ifdef UNICODE
4642#define SetupDiSetClassRegistryProperty SetupDiSetClassRegistryPropertyW
4643#else
4644#define SetupDiSetClassRegistryProperty SetupDiSetClassRegistryPropertyA
4645#endif
4646
4647WINSETUPAPI
4648BOOL WINAPI
4649SetupDiGetDeviceInstallParamsA(IN HDEVINFO DeviceInfoSet,
4650 IN PSP_DEVINFO_DATA DeviceInfoData,
4651 OPTIONAL OUT PSP_DEVINSTALL_PARAMS_A
4652 DeviceInstallParams);
4653
4654WINSETUPAPI
4655BOOL WINAPI
4656SetupDiGetDeviceInstallParamsW(IN HDEVINFO DeviceInfoSet,
4657 IN PSP_DEVINFO_DATA DeviceInfoData,
4658 OPTIONAL OUT PSP_DEVINSTALL_PARAMS_W
4659 DeviceInstallParams);
4660
4661#ifdef UNICODE
4662#define SetupDiGetDeviceInstallParams SetupDiGetDeviceInstallParamsW
4663#else
4664#define SetupDiGetDeviceInstallParams SetupDiGetDeviceInstallParamsA
4665#endif
4666
4667WINSETUPAPI
4668BOOL WINAPI
4669SetupDiGetClassInstallParamsA(IN HDEVINFO DeviceInfoSet,
4670 IN PSP_DEVINFO_DATA DeviceInfoData,
4671 OPTIONAL OUT PSP_CLASSINSTALL_HEADER
4672 ClassInstallParams,
4673 OPTIONAL IN DWORD ClassInstallParamsSize,
4674 OUT PDWORD RequiredSize OPTIONAL);
4675
4676WINSETUPAPI
4677BOOL WINAPI
4678SetupDiGetClassInstallParamsW(IN HDEVINFO DeviceInfoSet,
4679 IN PSP_DEVINFO_DATA DeviceInfoData,
4680 OPTIONAL OUT PSP_CLASSINSTALL_HEADER
4681 ClassInstallParams,
4682 OPTIONAL IN DWORD ClassInstallParamsSize,
4683 OUT PDWORD RequiredSize OPTIONAL);
4684
4685#ifdef UNICODE
4686#define SetupDiGetClassInstallParams SetupDiGetClassInstallParamsW
4687#else
4688#define SetupDiGetClassInstallParams SetupDiGetClassInstallParamsA
4689#endif
4690
4691WINSETUPAPI
4692BOOL WINAPI
4693SetupDiSetDeviceInstallParamsA(IN HDEVINFO DeviceInfoSet,
4694 IN PSP_DEVINFO_DATA DeviceInfoData,
4695 OPTIONAL IN PSP_DEVINSTALL_PARAMS_A
4696 DeviceInstallParams);
4697
4698WINSETUPAPI
4699BOOL WINAPI
4700SetupDiSetDeviceInstallParamsW(IN HDEVINFO DeviceInfoSet,
4701 IN PSP_DEVINFO_DATA DeviceInfoData,
4702 OPTIONAL IN PSP_DEVINSTALL_PARAMS_W
4703 DeviceInstallParams);
4704
4705#ifdef UNICODE
4706#define SetupDiSetDeviceInstallParams SetupDiSetDeviceInstallParamsW
4707#else
4708#define SetupDiSetDeviceInstallParams SetupDiSetDeviceInstallParamsA
4709#endif
4710
4711WINSETUPAPI
4712BOOL WINAPI
4713SetupDiSetClassInstallParamsA(IN HDEVINFO DeviceInfoSet,
4714 IN PSP_DEVINFO_DATA DeviceInfoData,
4715 OPTIONAL IN PSP_CLASSINSTALL_HEADER
4716 ClassInstallParams,
4717 OPTIONAL IN DWORD ClassInstallParamsSize);
4718
4719WINSETUPAPI
4720BOOL WINAPI
4721SetupDiSetClassInstallParamsW(IN HDEVINFO DeviceInfoSet,
4722 IN PSP_DEVINFO_DATA DeviceInfoData,
4723 OPTIONAL IN PSP_CLASSINSTALL_HEADER
4724 ClassInstallParams,
4725 OPTIONAL IN DWORD ClassInstallParamsSize);
4726
4727#ifdef UNICODE
4728#define SetupDiSetClassInstallParams SetupDiSetClassInstallParamsW
4729#else
4730#define SetupDiSetClassInstallParams SetupDiSetClassInstallParamsA
4731#endif
4732
4733WINSETUPAPI
4734BOOL WINAPI
4735SetupDiGetDriverInstallParamsA(IN HDEVINFO DeviceInfoSet,
4736 IN PSP_DEVINFO_DATA DeviceInfoData,
4737 OPTIONAL IN PSP_DRVINFO_DATA_A DriverInfoData,
4738 OUT PSP_DRVINSTALL_PARAMS DriverInstallParams);
4739
4740WINSETUPAPI
4741BOOL WINAPI
4742SetupDiGetDriverInstallParamsW(IN HDEVINFO DeviceInfoSet,
4743 IN PSP_DEVINFO_DATA DeviceInfoData,
4744 OPTIONAL IN PSP_DRVINFO_DATA_W DriverInfoData,
4745 OUT PSP_DRVINSTALL_PARAMS DriverInstallParams);
4746
4747#ifdef UNICODE
4748#define SetupDiGetDriverInstallParams SetupDiGetDriverInstallParamsW
4749#else
4750#define SetupDiGetDriverInstallParams SetupDiGetDriverInstallParamsA
4751#endif
4752
4753WINSETUPAPI
4754BOOL WINAPI
4755SetupDiSetDriverInstallParamsA(IN HDEVINFO DeviceInfoSet,
4756 IN PSP_DEVINFO_DATA DeviceInfoData,
4757 OPTIONAL IN PSP_DRVINFO_DATA_A DriverInfoData,
4758 IN PSP_DRVINSTALL_PARAMS DriverInstallParams);
4759
4760WINSETUPAPI
4761BOOL WINAPI
4762SetupDiSetDriverInstallParamsW(IN HDEVINFO DeviceInfoSet,
4763 IN PSP_DEVINFO_DATA DeviceInfoData,
4764 OPTIONAL IN PSP_DRVINFO_DATA_W DriverInfoData,
4765 IN PSP_DRVINSTALL_PARAMS DriverInstallParams);
4766
4767#ifdef UNICODE
4768#define SetupDiSetDriverInstallParams SetupDiSetDriverInstallParamsW
4769#else
4770#define SetupDiSetDriverInstallParams SetupDiSetDriverInstallParamsA
4771#endif
4772
4773WINSETUPAPI
4774BOOL WINAPI
4775SetupDiLoadClassIcon(IN CONST GUID* ClassGuid,
4776 OUT HICON* LargeIcon,
4777 OPTIONAL OUT PINT MiniIconIndex OPTIONAL);
4778
4779//
4780// Flags controlling the drawing of mini-icons
4781//
4782#define DMI_MASK 0x00000001
4783#define DMI_BKCOLOR 0x00000002
4784#define DMI_USERECT 0x00000004
4785
4786WINSETUPAPI
4787INT WINAPI
4788SetupDiDrawMiniIcon(IN HDC hdc,
4789 IN RECT rc,
4790 IN INT MiniIconIndex,
4791 IN DWORD Flags);
4792
4793WINSETUPAPI
4794BOOL WINAPI
4795SetupDiGetClassBitmapIndex(IN CONST GUID* ClassGuid,
4796 OPTIONAL OUT PINT MiniIconIndex);
4797
4798WINSETUPAPI
4799BOOL WINAPI
4800SetupDiGetClassImageList(OUT PSP_CLASSIMAGELIST_DATA ClassImageListData);
4801
4802WINSETUPAPI
4803BOOL WINAPI
4804SetupDiGetClassImageListExA(OUT PSP_CLASSIMAGELIST_DATA ClassImageListData,
4805 IN PCSTR MachineName,
4806 OPTIONAL IN PVOID Reserved);
4807
4808WINSETUPAPI
4809BOOL WINAPI
4810SetupDiGetClassImageListExW(OUT PSP_CLASSIMAGELIST_DATA ClassImageListData,
4811 IN PCWSTR MachineName,
4812 OPTIONAL IN PVOID Reserved);
4813
4814#ifdef UNICODE
4815#define SetupDiGetClassImageListEx SetupDiGetClassImageListExW
4816#else
4817#define SetupDiGetClassImageListEx SetupDiGetClassImageListExA
4818#endif
4819
4820WINSETUPAPI
4821BOOL WINAPI
4822SetupDiGetClassImageIndex(IN PSP_CLASSIMAGELIST_DATA ClassImageListData,
4823 IN CONST GUID* ClassGuid,
4824 OUT PINT ImageIndex);
4825
4826WINSETUPAPI
4827BOOL WINAPI
4828SetupDiDestroyClassImageList(IN PSP_CLASSIMAGELIST_DATA ClassImageListData);
4829
4830//
4831// PropertySheetType values for the SetupDiGetClassDevPropertySheets API
4832//
4833#define DIGCDP_FLAG_BASIC 0x00000001
4834#define DIGCDP_FLAG_ADVANCED 0x00000002
4835
4836WINSETUPAPI
4837BOOL WINAPI
4838SetupDiGetClassDevPropertySheetsA(IN HDEVINFO DeviceInfoSet,
4839 IN PSP_DEVINFO_DATA DeviceInfoData,
4840 OPTIONAL IN LPPROPSHEETHEADERA
4841 PropertySheetHeader,
4842 IN DWORD PropertySheetHeaderPageListSize,
4843 OUT PDWORD RequiredSize,
4844 OPTIONAL IN DWORD PropertySheetType);
4845
4846WINSETUPAPI
4847BOOL WINAPI
4848SetupDiGetClassDevPropertySheetsW(IN HDEVINFO DeviceInfoSet,
4849 IN PSP_DEVINFO_DATA DeviceInfoData,
4850 OPTIONAL IN LPPROPSHEETHEADERW
4851 PropertySheetHeader,
4852 IN DWORD PropertySheetHeaderPageListSize,
4853 OUT PDWORD RequiredSize,
4854 OPTIONAL IN DWORD PropertySheetType);
4855
4856#ifdef UNICODE
4857#define SetupDiGetClassDevPropertySheets SetupDiGetClassDevPropertySheetsW
4858#else
4859#define SetupDiGetClassDevPropertySheets SetupDiGetClassDevPropertySheetsA
4860#endif
4861
4862//
4863// Define ICON IDs publicly exposed from setupapi.
4864//
4865#define IDI_RESOURCEFIRST 159
4866#define IDI_RESOURCE 159
4867#define IDI_RESOURCELAST 161
4868#define IDI_RESOURCEOVERLAYFIRST 161
4869#define IDI_RESOURCEOVERLAYLAST 161
4870#define IDI_CONFLICT 161
4871
4872#define IDI_CLASSICON_OVERLAYFIRST 500
4873#define IDI_CLASSICON_OVERLAYLAST 502
4874#define IDI_PROBLEM_OVL 500
4875#define IDI_DISABLED_OVL 501
4876#define IDI_FORCED_OVL 502
4877
4878WINSETUPAPI
4879BOOL WINAPI
4880SetupDiAskForOEMDisk(IN HDEVINFO DeviceInfoSet,
4881 IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL);
4882
4883WINSETUPAPI
4884BOOL WINAPI
4885SetupDiSelectOEMDrv(IN HWND hwndParent,
4886 OPTIONAL IN HDEVINFO DeviceInfoSet,
4887 IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL);
4888
4889WINSETUPAPI
4890BOOL WINAPI
4891SetupDiClassNameFromGuidA(IN CONST GUID* ClassGuid,
4892 OUT PSTR ClassName,
4893 IN DWORD ClassNameSize,
4894 OUT PDWORD RequiredSize OPTIONAL);
4895
4896WINSETUPAPI
4897BOOL WINAPI
4898SetupDiClassNameFromGuidW(IN CONST GUID* ClassGuid,
4899 OUT PWSTR ClassName,
4900 IN DWORD ClassNameSize,
4901 OUT PDWORD RequiredSize OPTIONAL);
4902
4903#ifdef UNICODE
4904#define SetupDiClassNameFromGuid SetupDiClassNameFromGuidW
4905#else
4906#define SetupDiClassNameFromGuid SetupDiClassNameFromGuidA
4907#endif
4908
4909WINSETUPAPI
4910BOOL WINAPI
4911SetupDiClassNameFromGuidExA(IN CONST GUID* ClassGuid,
4912 OUT PSTR ClassName,
4913 IN DWORD ClassNameSize,
4914 OUT PDWORD RequiredSize,
4915 OPTIONAL IN PCSTR MachineName,
4916 OPTIONAL IN PVOID Reserved);
4917
4918WINSETUPAPI
4919BOOL WINAPI
4920SetupDiClassNameFromGuidExW(IN CONST GUID* ClassGuid,
4921 OUT PWSTR ClassName,
4922 IN DWORD ClassNameSize,
4923 OUT PDWORD RequiredSize,
4924 OPTIONAL IN PCWSTR MachineName,
4925 OPTIONAL IN PVOID Reserved);
4926
4927#ifdef UNICODE
4928#define SetupDiClassNameFromGuidEx SetupDiClassNameFromGuidExW
4929#else
4930#define SetupDiClassNameFromGuidEx SetupDiClassNameFromGuidExA
4931#endif
4932
4933WINSETUPAPI
4934BOOL WINAPI
4935SetupDiClassGuidsFromNameA(IN PCSTR ClassName,
4936 OUT LPGUID ClassGuidList,
4937 IN DWORD ClassGuidListSize,
4938 OUT PDWORD RequiredSize);
4939
4940WINSETUPAPI
4941BOOL WINAPI
4942SetupDiClassGuidsFromNameW(IN PCWSTR ClassName,
4943 OUT LPGUID ClassGuidList,
4944 IN DWORD ClassGuidListSize,
4945 OUT PDWORD RequiredSize);
4946
4947#ifdef UNICODE
4948#define SetupDiClassGuidsFromName SetupDiClassGuidsFromNameW
4949#else
4950#define SetupDiClassGuidsFromName SetupDiClassGuidsFromNameA
4951#endif
4952
4953WINSETUPAPI
4954BOOL WINAPI
4955SetupDiClassGuidsFromNameExA(IN PCSTR ClassName,
4956 OUT LPGUID ClassGuidList,
4957 IN DWORD ClassGuidListSize,
4958 OUT PDWORD RequiredSize,
4959 IN PCSTR MachineName,
4960 OPTIONAL IN PVOID Reserved);
4961
4962WINSETUPAPI
4963BOOL WINAPI
4964SetupDiClassGuidsFromNameExW(IN PCWSTR ClassName,
4965 OUT LPGUID ClassGuidList,
4966 IN DWORD ClassGuidListSize,
4967 OUT PDWORD RequiredSize,
4968 IN PCWSTR MachineName,
4969 OPTIONAL IN PVOID Reserved);
4970
4971#ifdef UNICODE
4972#define SetupDiClassGuidsFromNameEx SetupDiClassGuidsFromNameExW
4973#else
4974#define SetupDiClassGuidsFromNameEx SetupDiClassGuidsFromNameExA
4975#endif
4976
4977WINSETUPAPI
4978BOOL WINAPI
4979SetupDiGetHwProfileFriendlyNameA(IN DWORD HwProfile,
4980 OUT PSTR FriendlyName,
4981 IN DWORD FriendlyNameSize,
4982 OUT PDWORD RequiredSize OPTIONAL);
4983
4984WINSETUPAPI
4985BOOL WINAPI
4986SetupDiGetHwProfileFriendlyNameW(IN DWORD HwProfile,
4987 OUT PWSTR FriendlyName,
4988 IN DWORD FriendlyNameSize,
4989 OUT PDWORD RequiredSize OPTIONAL);
4990
4991#ifdef UNICODE
4992#define SetupDiGetHwProfileFriendlyName SetupDiGetHwProfileFriendlyNameW
4993#else
4994#define SetupDiGetHwProfileFriendlyName SetupDiGetHwProfileFriendlyNameA
4995#endif
4996
4997WINSETUPAPI
4998BOOL WINAPI
4999SetupDiGetHwProfileFriendlyNameExA(IN DWORD HwProfile,
5000 OUT PSTR FriendlyName,
5001 IN DWORD FriendlyNameSize,
5002 OUT PDWORD RequiredSize,
5003 OPTIONAL IN PCSTR MachineName,
5004 OPTIONAL IN PVOID Reserved);
5005
5006WINSETUPAPI
5007BOOL WINAPI
5008SetupDiGetHwProfileFriendlyNameExW(IN DWORD HwProfile,
5009 OUT PWSTR FriendlyName,
5010 IN DWORD FriendlyNameSize,
5011 OUT PDWORD RequiredSize,
5012 OPTIONAL IN PCWSTR MachineName,
5013 OPTIONAL IN PVOID Reserved);
5014
5015#ifdef UNICODE
5016#define SetupDiGetHwProfileFriendlyNameEx SetupDiGetHwProfileFriendlyNameExW
5017#else
5018#define SetupDiGetHwProfileFriendlyNameEx SetupDiGetHwProfileFriendlyNameExA
5019#endif
5020
5021//
5022// PageType values for SetupDiGetWizardPage API
5023//
5024#define SPWPT_SELECTDEVICE 0x00000001
5025
5026//
5027// Flags for SetupDiGetWizardPage API
5028//
5029#define SPWP_USE_DEVINFO_DATA 0x00000001
5030
5031WINSETUPAPI
5032HPROPSHEETPAGE
5033WINAPI
5034SetupDiGetWizardPage(IN HDEVINFO DeviceInfoSet,
5035 IN PSP_DEVINFO_DATA DeviceInfoData,
5036 OPTIONAL IN PSP_INSTALLWIZARD_DATA InstallWizardData,
5037 IN DWORD PageType,
5038 IN DWORD Flags);
5039
5040WINSETUPAPI
5041BOOL WINAPI
5042SetupDiGetSelectedDevice(IN HDEVINFO DeviceInfoSet,
5043 OUT PSP_DEVINFO_DATA DeviceInfoData);
5044
5045WINSETUPAPI
5046BOOL WINAPI
5047SetupDiSetSelectedDevice(IN HDEVINFO DeviceInfoSet,
5048 IN PSP_DEVINFO_DATA DeviceInfoData);
5049
5050WINSETUPAPI
5051BOOL WINAPI
5052SetupDiGetActualSectionToInstallA(IN HINF InfHandle,
5053 IN PCSTR InfSectionName,
5054 OUT PSTR InfSectionWithExt,
5055 OPTIONAL IN DWORD InfSectionWithExtSize,
5056 OUT PDWORD RequiredSize,
5057 OPTIONAL OUT PSTR* Extension OPTIONAL);
5058
5059WINSETUPAPI
5060BOOL WINAPI
5061SetupDiGetActualSectionToInstallW(IN HINF InfHandle,
5062 IN PCWSTR InfSectionName,
5063 OUT PWSTR InfSectionWithExt,
5064 OPTIONAL IN DWORD InfSectionWithExtSize,
5065 OUT PDWORD RequiredSize,
5066 OPTIONAL OUT PWSTR* Extension OPTIONAL);
5067
5068#ifdef UNICODE
5069#define SetupDiGetActualSectionToInstall SetupDiGetActualSectionToInstallW
5070#else
5071#define SetupDiGetActualSectionToInstall SetupDiGetActualSectionToInstallA
5072#endif
5073
5074#ifdef __cplusplus
5075}
5076#endif
5077
5078#include <poppack.h>
5079
5080#endif // _INC_SETUPAPI
Definition Style.h:22
Definition RageUtil_FileDB.h:14
Definition setupapi.h:401
Definition setupapi.h:410
Definition setupapi.h:1408
Definition setupapi.h:334
Definition setupapi.h:342
Definition setupapi.h:430
Definition setupapi.h:441
Definition setupapi.h:79
Definition setupapi.h:361
Definition setupapi.h:375
Definition setupapi.h:101
Definition setupapi.h:1453
Definition setupapi.h:1460
Definition setupapi.h:1418
Definition setupapi.h:869
Definition setupapi.h:999
Definition setupapi.h:549
Definition setupapi.h:573
Definition setupapi.h:579
Definition setupapi.h:536
Definition setupapi.h:613
Definition setupapi.h:621
Definition setupapi.h:687
Definition setupapi.h:701
Definition setupapi.h:1259
Definition setupapi.h:1269
Definition setupapi.h:1231
Definition setupapi.h:1243
Definition setupapi.h:1315
Definition setupapi.h:1328
Definition setupapi.h:1353
Definition setupapi.h:878
Definition setupapi.h:468
Definition setupapi.h:491
Definition setupapi.h:90
Definition setupapi.h:1020
Definition setupapi.h:892
Definition setupapi.h:1166
Definition setupapi.h:128
Definition setupapi.h:135
Definition setupapi.h:1206
Definition setupapi.h:1212
Definition setupapi.h:918
Definition setupapi.h:1433
Definition setupapi.h:929
Definition setupapi.h:954
Definition setupapi.h:964
Definition setupapi.h:1181
Definition setupapi.h:1188
Definition setupapi.h:942