home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / borland / cb / setup / cbuilder / data.z / SETUPAPI.H < prev    next >
C/C++ Source or Header  |  1997-02-28  |  102KB  |  3,874 lines

  1. /*++
  2.  
  3. Copyright (c) 1995-1996 Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     setupapi.h
  8.  
  9. Abstract:
  10.  
  11.     Public header file for Windows NT Setup services Dll.
  12.  
  13. Author:
  14.  
  15.     Ted Miller (tedm) 11-Jan-1995
  16.  
  17. Revision History:
  18.  
  19. --*/
  20.  
  21. #ifndef _INC_SETUPAPI
  22. #define _INC_SETUPAPI
  23. #pragma option -b
  24.  
  25. //
  26. // Define API decoration for direct importing of DLL references.
  27. //
  28. #if !defined(_SETUPAPI_)
  29. #define WINSETUPAPI DECLSPEC_IMPORT
  30. #else
  31. #define WINSETUPAPI
  32. #endif
  33.  
  34. #pragma option -b.
  35. #include <pshpack1.h>   // Assume byte packing throughout
  36. #pragma option -b
  37.  
  38. #ifdef __cplusplus
  39. extern "C" {
  40. #endif
  41.  
  42. #ifndef __LPGUID_DEFINED__
  43. #define __LPGUID_DEFINED__
  44. typedef GUID *LPGUID;
  45. #endif
  46.  
  47. //
  48. // Include commctrl.h for our use of HIMAGELIST and wizard support.
  49. //
  50. #pragma option -b.
  51. #include <commctrl.h>
  52. #pragma option -b
  53.  
  54.  
  55. //
  56. // Define maximum string length constants as specified by
  57. // Windows 95.
  58. //
  59. #define LINE_LEN                    256 // Win95-compatible maximum for displayable
  60.                                         // strings coming from a device INF.
  61. #define MAX_INF_STRING_LENGTH      4096 // Actual maximum size of an INF string (including
  62.                                         // string substitutions).
  63. #define MAX_TITLE_LEN                60
  64. #define MAX_INSTRUCTION_LEN         256
  65. #define MAX_LABEL_LEN                30
  66. #define MAX_SERVICE_NAME_LEN        256
  67.  
  68. //
  69. // Define type for reference to loaded inf file
  70. //
  71. typedef PVOID HINF;
  72.  
  73. //
  74. // Inf context structure. Applications must not interpret or
  75. // overwrite values in these structures.
  76. //
  77. typedef struct _INFCONTEXT {
  78.     PVOID Inf;
  79.     PVOID CurrentInf;
  80.     UINT Section;
  81.     UINT Line;
  82. } INFCONTEXT, *PINFCONTEXT;
  83.  
  84. //
  85. // Inf file information structure.
  86. //
  87. typedef struct _SP_INF_INFORMATION {
  88.     DWORD InfStyle;
  89.     DWORD InfCount;
  90.     BYTE VersionData[ANYSIZE_ARRAY];
  91. } SP_INF_INFORMATION, *PSP_INF_INFORMATION;
  92.  
  93. //
  94. // SP_INF_INFORMATION.InfStyle values
  95. //
  96. #define INF_STYLE_NONE  0       // unrecognized or non-existent
  97. #define INF_STYLE_OLDNT 1       // winnt 3.x
  98. #define INF_STYLE_WIN4  2       // Win95
  99.  
  100. //
  101. // Target directory specs.
  102. //
  103. #define DIRID_ABSOLUTE          -1              // real 32-bit -1
  104. #define DIRID_ABSOLUTE_16BIT     0xffff         // 16-bit -1 for compat w/setupx
  105. #define DIRID_NULL               0
  106. #define DIRID_SRCPATH            1
  107. #define DIRID_WINDOWS           10
  108. #define DIRID_SYSTEM            11              // system32
  109. #define DIRID_DRIVERS           12
  110. #define DIRID_IOSUBSYS          DIRID_DRIVERS
  111. #define DIRID_INF               17
  112. #define DIRID_HELP              18
  113. #define DIRID_FONTS             20
  114. #define DIRID_VIEWERS           21
  115. #define DIRID_APPS              24
  116. #define DIRID_SHARED            25
  117. #define DIRID_BOOT              30
  118.  
  119. #define DIRID_SYSTEM16          50
  120. #define DIRID_SPOOL             51
  121. #define DIRID_SPOOLDRIVERS      52
  122. #define DIRID_USERPROFILE       53
  123. #define DIRID_LOADER            54
  124.  
  125. #define DIRID_DEFAULT           DIRID_SYSTEM
  126.  
  127. //
  128. // First user-definable dirid. See SetupSetDirectoryId().
  129. //
  130. #define DIRID_USER              0x8000
  131.  
  132.  
  133. //
  134. // Setup callback notification routine type
  135. //
  136. typedef UINT (CALLBACK* PSP_FILE_CALLBACK_A)(
  137.     IN PVOID Context,
  138.     IN UINT Notification,
  139.     IN UINT Param1,
  140.     IN UINT Param2
  141.     );
  142.  
  143. typedef UINT (CALLBACK* PSP_FILE_CALLBACK_W)(
  144.     IN PVOID Context,
  145.     IN UINT Notification,
  146.     IN UINT Param1,
  147.     IN UINT Param2
  148.     );
  149.  
  150. #ifdef UNICODE
  151. #define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_W
  152. #else
  153. #define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_A
  154. #endif
  155.  
  156.  
  157. //
  158. // Operation/queue start/end notification. These are ordinal values.
  159. //
  160. #define SPFILENOTIFY_STARTQUEUE         0x00000001
  161. #define SPFILENOTIFY_ENDQUEUE           0x00000002
  162. #define SPFILENOTIFY_STARTSUBQUEUE      0x00000003
  163. #define SPFILENOTIFY_ENDSUBQUEUE        0x00000004
  164. #define SPFILENOTIFY_STARTDELETE        0x00000005
  165. #define SPFILENOTIFY_ENDDELETE          0x00000006
  166. #define SPFILENOTIFY_DELETEERROR        0x00000007
  167. #define SPFILENOTIFY_STARTRENAME        0x00000008
  168. #define SPFILENOTIFY_ENDRENAME          0x00000009
  169. #define SPFILENOTIFY_RENAMEERROR        0x0000000a
  170. #define SPFILENOTIFY_STARTCOPY          0x0000000b
  171. #define SPFILENOTIFY_ENDCOPY            0x0000000c
  172. #define SPFILENOTIFY_COPYERROR          0x0000000d
  173. #define SPFILENOTIFY_NEEDMEDIA          0x0000000e
  174. #define SPFILENOTIFY_QUEUESCAN          0x0000000f
  175. //
  176. // These are used with SetupIterateCabinet().
  177. //
  178. #define SPFILENOTIFY_CABINETINFO        0x00000010
  179. #define SPFILENOTIFY_FILEINCABINET      0x00000011
  180. #define SPFILENOTIFY_NEEDNEWCABINET     0x00000012
  181. #define SPFILENOTIFY_FILEEXTRACTED      0x00000013
  182.  
  183. #define SPFILENOTIFY_FILEOPDELAYED      0x00000014
  184.  
  185. //
  186. // Copy notification. These are bit flags that may be combined.
  187. //
  188. #define SPFILENOTIFY_LANGMISMATCH       0x00010000
  189. #define SPFILENOTIFY_TARGETEXISTS       0x00020000
  190. #define SPFILENOTIFY_TARGETNEWER        0x00040000
  191.  
  192. //
  193. // File operation codes and callback outcomes.
  194. //
  195. #define FILEOP_COPY                     0
  196. #define FILEOP_RENAME                   1
  197. #define FILEOP_DELETE                   2
  198.  
  199. #define FILEOP_ABORT                    0
  200. #define FILEOP_DOIT                     1
  201. #define FILEOP_SKIP                     2
  202. #define FILEOP_RETRY                    FILEOP_DOIT
  203. #define FILEOP_NEWPATH                  4
  204.  
  205. //
  206. // Flags in inf copy sections
  207. //
  208. #define COPYFLG_WARN_IF_SKIP            0x00000001      // warn if user tries to skip file
  209. #define COPYFLG_NOSKIP                  0x00000002      // disallow skipping this file
  210. #define COPYFLG_NOVERSIONCHECK          0x00000004      // ignore versions and overwrite target
  211. #define COPYFLG_FORCE_FILE_IN_USE       0x00000008      // force file-in-use behavior
  212. #define COPYFLG_NO_OVERWRITE            0x00000010      // do not copy if file exists on target
  213. #define COPYFLG_NO_VERSION_DIALOG       0x00000020      // do not copy if target is newer
  214. #define COPYFLG_REPLACEONLY             0x00000400      // copy only if file exists on target
  215.  
  216. //
  217. // Flags in inf delete sections
  218. // New flags go in high word
  219. //
  220. #define DELFLG_IN_USE                   0x00000001      // queue in-use file for delete
  221. #define DELFLG_IN_USE1                  0x00010000      // high-word version of DELFLG_IN_USE
  222.  
  223. //
  224. // Source and file paths. Used when notifying queue callback
  225. // of SPFILENOTIFY_STARTxxx, SPFILENOTIFY_ENDxxx, and SPFILENOTIFY_xxxERROR.
  226. //
  227. typedef struct _FILEPATHS_A {
  228.     PCSTR  Target;
  229.     PCSTR  Source;  // not used for delete operations
  230.     UINT   Win32Error;
  231.     DWORD  Flags;   // such as SP_COPY_NOSKIP for copy errors
  232. } FILEPATHS_A, *PFILEPATHS_A;
  233.  
  234. typedef struct _FILEPATHS_W {
  235.     PCWSTR Target;
  236.     PCWSTR Source;  // not used for delete operations
  237.     UINT   Win32Error;
  238.     DWORD  Flags;   // such as SP_COPY_NOSKIP for copy errors
  239. } FILEPATHS_W, *PFILEPATHS_W;
  240.  
  241. #ifdef UNICODE
  242. typedef FILEPATHS_W FILEPATHS;
  243. typedef PFILEPATHS_W PFILEPATHS;
  244. #else
  245. typedef FILEPATHS_A FILEPATHS;
  246. typedef PFILEPATHS_A PFILEPATHS;
  247. #endif
  248.  
  249.  
  250. //
  251. // Structure used with SPFILENOTIFY_NEEDMEDIA
  252. //
  253. typedef struct _SOURCE_MEDIA_A {
  254.     PCSTR Reserved;
  255.     PCSTR Tagfile;          // may be NULL
  256.     PCSTR Description;
  257.     //
  258.     // Pathname part and filename part of source file
  259.     // that caused us to need the media.
  260.     //
  261.     PCSTR SourcePath;
  262.     PCSTR SourceFile;
  263.     DWORD Flags;            // subset of SP_COPY_xxx
  264. } SOURCE_MEDIA_A, *PSOURCE_MEDIA_A;
  265.  
  266. typedef struct _SOURCE_MEDIA_W {
  267.     PCWSTR Reserved;
  268.     PCWSTR Tagfile;         // may be NULL
  269.     PCWSTR Description;
  270.     //
  271.     // Pathname part and filename part of source file
  272.     // that caused us to need the media.
  273.     //
  274.     PCWSTR SourcePath;
  275.     PCWSTR SourceFile;
  276.     DWORD  Flags;           // subset of SP_COPY_xxx
  277. } SOURCE_MEDIA_W, *PSOURCE_MEDIA_W;
  278.  
  279. #ifdef UNICODE
  280. typedef SOURCE_MEDIA_W SOURCE_MEDIA;
  281. typedef PSOURCE_MEDIA_W PSOURCE_MEDIA;
  282. #else
  283. typedef SOURCE_MEDIA_A SOURCE_MEDIA;
  284. typedef PSOURCE_MEDIA_A PSOURCE_MEDIA;
  285. #endif
  286.  
  287. //
  288. // Structure used with SPFILENOTIFY_CABINETINFO and
  289. // SPFILENOTIFY_NEEDNEWCABINET
  290. //
  291. typedef struct _CABINET_INFO_A {
  292.     PCSTR CabinetPath;
  293.     PCSTR CabinetFile;
  294.     PCSTR DiskName;
  295.     USHORT SetId;
  296.     USHORT CabinetNumber;
  297. } CABINET_INFO_A, *PCABINET_INFO_A;
  298.  
  299. typedef struct _CABINET_INFO_W {
  300.     PCWSTR CabinetPath;
  301.     PCWSTR CabinetFile;
  302.     PCWSTR DiskName;
  303.     USHORT SetId;
  304.     USHORT CabinetNumber;
  305. } CABINET_INFO_W, *PCABINET_INFO_W;
  306.  
  307. #ifdef UNICODE
  308. typedef CABINET_INFO_W CABINET_INFO;
  309. typedef PCABINET_INFO_W PCABINET_INFO;
  310. #else
  311. typedef CABINET_INFO_A CABINET_INFO;
  312. typedef PCABINET_INFO_A PCABINET_INFO;
  313. #endif
  314.  
  315. //
  316. // Structure used with SPFILENOTIFY_FILEINCABINET
  317. //
  318. typedef struct _FILE_IN_CABINET_INFO_A {
  319.     PCSTR NameInCabinet;
  320.     DWORD FileSize;
  321.     DWORD Win32Error;
  322.     WORD  DosDate;
  323.     WORD  DosTime;
  324.     WORD  DosAttribs;
  325.     CHAR  FullTargetName[MAX_PATH];
  326. } FILE_IN_CABINET_INFO_A, *PFILE_IN_CABINET_INFO_A;
  327.  
  328. typedef struct _FILE_IN_CABINET_INFO_W {
  329.     PCWSTR NameInCabinet;
  330.     DWORD  FileSize;
  331.     DWORD  Win32Error;
  332.     WORD   DosDate;
  333.     WORD   DosTime;
  334.     WORD   DosAttribs;
  335.     WCHAR  FullTargetName[MAX_PATH];
  336. } FILE_IN_CABINET_INFO_W, *PFILE_IN_CABINET_INFO_W;
  337.  
  338. #ifdef UNICODE
  339. typedef FILE_IN_CABINET_INFO_W FILE_IN_CABINET_INFO;
  340. typedef PFILE_IN_CABINET_INFO_W PFILE_IN_CABINET_INFO;
  341. #else
  342. typedef FILE_IN_CABINET_INFO_A FILE_IN_CABINET_INFO;
  343. typedef PFILE_IN_CABINET_INFO_A PFILE_IN_CABINET_INFO;
  344. #endif
  345.  
  346.  
  347. //
  348. // Define type for setup file queue
  349. //
  350. typedef PVOID HSPFILEQ;
  351.  
  352. //
  353. // Define type for reference to device information set
  354. //
  355. typedef PVOID HDEVINFO;
  356.  
  357. //
  358. // Device information structure (references a device instance
  359. // that is a member of a device information set)
  360. //
  361. typedef struct _SP_DEVINFO_DATA {
  362.     DWORD cbSize;
  363.     GUID  ClassGuid;
  364.     DWORD DevInst;    // DEVINST handle
  365.     DWORD Reserved;
  366. } SP_DEVINFO_DATA, *PSP_DEVINFO_DATA;
  367.  
  368.  
  369. //
  370. // Class installer function codes
  371. //
  372. #define DIF_SELECTDEVICE            0x00000001
  373. #define DIF_INSTALLDEVICE           0x00000002
  374. #define DIF_ASSIGNRESOURCES         0x00000003
  375. #define DIF_PROPERTIES              0x00000004
  376. #define DIF_REMOVE                  0x00000005
  377. #define DIF_FIRSTTIMESETUP          0x00000006
  378. #define DIF_FOUNDDEVICE             0x00000007
  379. #define DIF_SELECTCLASSDRIVERS      0x00000008
  380. #define DIF_VALIDATECLASSDRIVERS    0x00000009
  381. #define DIF_INSTALLCLASSDRIVERS     0x0000000A
  382. #define DIF_CALCDISKSPACE           0x0000000B
  383. #define DIF_DESTROYPRIVATEDATA      0x0000000C
  384. #define DIF_VALIDATEDRIVER          0x0000000D
  385. #define DIF_MOVEDEVICE              0x0000000E
  386. #define DIF_DETECT                  0x0000000F
  387. #define DIF_INSTALLWIZARD           0x00000010
  388. #define DIF_DESTROYWIZARDDATA       0x00000011
  389. #define DIF_PROPERTYCHANGE          0x00000012
  390. #define DIF_ENABLECLASS             0x00000013
  391. #define DIF_DETECTVERIFY            0x00000014
  392. #define DIF_INSTALLDEVICEFILES      0x00000015
  393.  
  394. typedef UINT        DI_FUNCTION;    // Function type for device installer
  395.  
  396.  
  397. //
  398. // Device installation parameters structure (associated with a
  399. // particular device information element, or globally with a device
  400. // information set)
  401. //
  402. typedef struct _SP_DEVINSTALL_PARAMS_A {
  403.     DWORD             cbSize;
  404.     DWORD             Flags;
  405.     DWORD             FlagsEx;
  406.     HWND              hwndParent;
  407.     PSP_FILE_CALLBACK InstallMsgHandler;
  408.     PVOID             InstallMsgHandlerContext;
  409.     HSPFILEQ          FileQueue;
  410.     DWORD             ClassInstallReserved;
  411.     DWORD             Reserved;
  412.     CHAR              DriverPath[MAX_PATH];
  413. } SP_DEVINSTALL_PARAMS_A, *PSP_DEVINSTALL_PARAMS_A;
  414.  
  415. typedef struct _SP_DEVINSTALL_PARAMS_W {
  416.     DWORD             cbSize;
  417.     DWORD             Flags;
  418.     DWORD             FlagsEx;
  419.     HWND              hwndParent;
  420.     PSP_FILE_CALLBACK InstallMsgHandler;
  421.     PVOID             InstallMsgHandlerContext;
  422.     HSPFILEQ          FileQueue;
  423.     DWORD             ClassInstallReserved;
  424.     DWORD             Reserved;
  425.     WCHAR             DriverPath[MAX_PATH];
  426. } SP_DEVINSTALL_PARAMS_W, *PSP_DEVINSTALL_PARAMS_W;
  427.  
  428. #ifdef UNICODE
  429. typedef SP_DEVINSTALL_PARAMS_W SP_DEVINSTALL_PARAMS;
  430. typedef PSP_DEVINSTALL_PARAMS_W PSP_DEVINSTALL_PARAMS;
  431. #else
  432. typedef SP_DEVINSTALL_PARAMS_A SP_DEVINSTALL_PARAMS;
  433. typedef PSP_DEVINSTALL_PARAMS_A PSP_DEVINSTALL_PARAMS;
  434. #endif
  435.  
  436.  
  437. //
  438. // SP_DEVINSTALL_PARAMS.Flags values
  439. //
  440. // Flags for choosing a device
  441. //
  442. #define DI_SHOWOEM                  0x00000001L     // support Other... button
  443. #define DI_SHOWCOMPAT               0x00000002L     // show compatibility list
  444. #define DI_SHOWCLASS                0x00000004L     // show class list
  445. #define DI_SHOWALL                  0x00000007L     // both class & compat list shown
  446. #define DI_NOVCP                    0x00000008L     // don't create a new copy queue--use
  447.                                                     // caller-supplied FileQueue
  448. #define DI_DIDCOMPAT                0x00000010L     // Searched for compatible devices
  449. #define DI_DIDCLASS                 0x00000020L     // Searched for class devices
  450. #define DI_AUTOASSIGNRES            0x00000040L     // No UI for resources if possible
  451.  
  452. // flags returned by DiInstallDevice to indicate need to reboot/restart
  453. #define DI_NEEDRESTART              0x00000080L     // Reboot required to take effect
  454. #define DI_NEEDREBOOT               0x00000100L     // ""
  455.  
  456. // flags for device installation
  457. #define DI_NOBROWSE                 0x00000200L     // no Browse... in InsertDisk
  458.  
  459. // Flags set by DiBuildDriverInfoList
  460. #define DI_MULTMFGS                 0x00000400L     // Set if multiple manufacturers in
  461.                                                     // class driver list
  462.  
  463. // Flag indicates that device is disabled
  464. #define DI_DISABLED                 0x00000800L     // Set if device disabled
  465.  
  466. // Flags for Device/Class Properties
  467. #define DI_GENERALPAGE_ADDED        0x00001000L
  468. #define DI_RESOURCEPAGE_ADDED       0x00002000L
  469.  
  470. // Flag to indicate the setting properties for this Device (or class) caused a change
  471. // so the Dev Mgr UI probably needs to be updatd.
  472. #define DI_PROPERTIES_CHANGE        0x00004000L
  473.  
  474. // Flag to indicate that the sorting from the INF file should be used.
  475. #define DI_INF_IS_SORTED            0x00008000L
  476.  
  477. // Flag to indicate that only the the INF specified by SP_DEVINSTALL_PARAMS.DriverPath
  478. // should be searched.
  479. #define DI_ENUMSINGLEINF            0x00010000L
  480.  
  481. // Flag that prevents ConfigMgr from removing/re-enumerating devices during device
  482. // registration, installation, and deletion.
  483. #define DI_DONOTCALLCONFIGMG        0x00020000L
  484.  
  485. // The following flag can be used to install a device disabled
  486. #define DI_INSTALLDISABLED          0x00040000L
  487.  
  488. // Flag that causes SetupDiBuildDriverInfoList to build a device's compatible driver
  489. // list from its existing class driver list, instead of the normal INF search.
  490. #define DI_COMPAT_FROM_CLASS        0x00080000L
  491.  
  492. // This flag is set if the Class Install params should be used.
  493. #define DI_CLASSINSTALLPARAMS       0x00100000L
  494.  
  495. // This flag is set if the caller of DiCallClassInstaller does NOT
  496. // want the internal default action performed if the Class installer
  497. // returns ERROR_DI_DO_DEFAULT.
  498. #define DI_NODI_DEFAULTACTION       0x00200000L
  499.  
  500. // The setupx flag, DI_NOSYNCPROCESSING (0x00400000L) is not support in the Setup APIs.
  501.  
  502. // flags for device installation
  503. #define DI_QUIETINSTALL             0x00800000L     // don't confuse the user with
  504.                                                     // questions or excess info
  505. #define DI_NOFILECOPY               0x01000000L     // No file Copy necessary
  506. #define DI_FORCECOPY                0x02000000L     // Force files to be copied from install path
  507. #define DI_DRIVERPAGE_ADDED         0x04000000L     // Prop provider added Driver page.
  508. #define DI_USECI_SELECTSTRINGS      0x08000000L     // Use Class Installer Provided strings in the Select Device Dlg
  509. #define DI_OVERRIDE_INFFLAGS        0x10000000L     // Override INF flags
  510. #define DI_PROPS_NOCHANGEUSAGE      0x20000000L     // No Enable/Disable in General Props
  511.  
  512. #define DI_NOSELECTICONS            0x40000000L     // No small icons in select device dialogs
  513.  
  514. #define DI_NOWRITE_IDS              0x80000000L     // Don't write HW & Compat IDs on install
  515.  
  516.  
  517. //
  518. // SP_DEVINSTALL_PARAMS.FlagsEx values
  519. //
  520. #define DI_FLAGSEX_USEOLDINFSEARCH      0x00000001L  // Inf Search functions should not use Index Search
  521. #define DI_FLAGSEX_AUTOSELECTRANK0      0x00000002L  // SetupDiSelectDevice doesn't prompt user if rank 0 match
  522. #define DI_FLAGSEX_CI_FAILED            0x00000004L  // Failed to Load/Call class installer
  523.  
  524. #define DI_FLAGSEX_DIDINFOLIST          0x00000010L  // Did the Class Info List
  525. #define DI_FLAGSEX_DIDCOMPATINFO        0x00000020L  // Did the Compat Info List
  526.  
  527. #define DI_FLAGSEX_FILTERCLASSES        0x00000040L
  528. #define DI_FLAGSEX_SETFAILEDINSTALL     0x00000080L
  529. #define DI_FLAGSEX_DEVICECHANGE         0x00000100L
  530. #define DI_FLAGSEX_ALWAYSWRITEIDS       0x00000200L
  531. #define DI_FLAGSEX_ALLOWEXCLUDEDDRVS    0x00000800L
  532. #define DI_FLAGSEX_NOUIONQUERYREMOVE    0x00001000L
  533. #define DI_FLAGSEX_USECLASSFORCOMPAT    0x00002000L  // Use the device's class when building compat drv list.
  534.                                                      // (Ignored if DI_COMPAT_FROM_CLASS flag is specified.)
  535.  
  536. #define DI_FLAGSEX_OLDINF_IN_CLASSLIST  0x00004000L  // Search legacy INFs when building class driver list.
  537.  
  538. #define DI_FLAGSEX_NO_DRVREG_MODIFY     0x00008000L  // Don't run AddReg and DelReg for device's software (driver) key.
  539.  
  540. //
  541. // Class installation parameters header.  This must be the first field of any class install
  542. // parameter structure.  The InstallFunction field must be set to the function code
  543. // corresponding to the structure, and the cbSize field must be set to the size of the
  544. // header structure.  E.g.,
  545. //
  546. // SP_ENABLECLASS_PARAMS EnableClassParams;
  547. //
  548. // EnableClassParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
  549. // EnableClassParams.ClassInstallHeader.InstallFunction = DIF_ENABLECLASS;
  550. //
  551. typedef struct _SP_CLASSINSTALL_HEADER {
  552.     DWORD       cbSize;
  553.     DI_FUNCTION InstallFunction;
  554. } SP_CLASSINSTALL_HEADER, *PSP_CLASSINSTALL_HEADER;
  555.  
  556.  
  557. //
  558. // Structure corresponding to a DIF_ENABLECLASS install function.
  559. //
  560. typedef struct _SP_ENABLECLASS_PARAMS {
  561.     SP_CLASSINSTALL_HEADER ClassInstallHeader;
  562.     GUID                   ClassGuid;
  563.     DWORD                  EnableMessage;
  564. } SP_ENABLECLASS_PARAMS, *PSP_ENABLECLASS_PARAMS;
  565.  
  566. #define ENABLECLASS_QUERY   0
  567. #define ENABLECLASS_SUCCESS 1
  568. #define ENABLECLASS_FAILURE 2
  569.  
  570.  
  571. //
  572. // Structure corresponding to a DIF_MOVEDEVICE install function.
  573. //
  574. typedef struct _SP_MOVEDEV_PARAMS {
  575.     SP_CLASSINSTALL_HEADER ClassInstallHeader;
  576.     SP_DEVINFO_DATA        SourceDeviceInfoData;
  577. } SP_MOVEDEV_PARAMS, *PSP_MOVEDEV_PARAMS;
  578.  
  579.  
  580. //
  581. // Values indicating a change in a device's state
  582. //
  583. #define DICS_ENABLE      0x00000001
  584. #define DICS_DISABLE     0x00000002
  585. #define DICS_PROPCHANGE  0x00000003
  586. #define DICS_START       0x00000004
  587. #define DICS_STOP        0x00000005
  588. //
  589. // Values specifying the scope of a device property change
  590. //
  591. #define DICS_FLAG_GLOBAL         0x00000001  // make change in all hardware profiles
  592. #define DICS_FLAG_CONFIGSPECIFIC 0x00000002  // make change in specified profile only
  593. #define DICS_FLAG_CONFIGGENERAL  0x00000004  // 1 or more hardware profile-specific
  594.                                              // changes to follow.
  595. //
  596. // Structure corresponding to a DIF_PROPERTYCHANGE install function.
  597. //
  598. typedef struct _SP_PROPCHANGE_PARAMS {
  599.     SP_CLASSINSTALL_HEADER ClassInstallHeader;
  600.     DWORD                  StateChange;
  601.     DWORD                  Scope;
  602.     DWORD                  HwProfile;
  603. } SP_PROPCHANGE_PARAMS, *PSP_PROPCHANGE_PARAMS;
  604.  
  605.  
  606. //
  607. // Structure corresponding to a DIF_REMOVE install function.
  608. //
  609. typedef struct _SP_REMOVEDEVICE_PARAMS {
  610.     SP_CLASSINSTALL_HEADER ClassInstallHeader;
  611.     DWORD Scope;
  612.     DWORD HwProfile;
  613. } SP_REMOVEDEVICE_PARAMS, *PSP_REMOVEDEVICE_PARAMS;
  614.  
  615. #define DI_REMOVEDEVICE_GLOBAL                  0x00000001
  616. #define DI_REMOVEDEVICE_CONFIGSPECIFIC          0x00000002
  617.  
  618.  
  619. //
  620. // Structure corresponding to a DIF_SELECTDEVICE install function.
  621. //
  622. typedef struct _SP_SELECTDEVICE_PARAMS_A {
  623.     SP_CLASSINSTALL_HEADER ClassInstallHeader;
  624.     CHAR                   Title[MAX_TITLE_LEN];
  625.     CHAR                   Instructions[MAX_INSTRUCTION_LEN];
  626.     CHAR                   ListLabel[MAX_LABEL_LEN];
  627.     BYTE                   Reserved[2];                  // DWORD size alignment
  628. } SP_SELECTDEVICE_PARAMS_A, *PSP_SELECTDEVICE_PARAMS_A;
  629.  
  630. typedef struct _SP_SELECTDEVICE_PARAMS_W {
  631.     SP_CLASSINSTALL_HEADER ClassInstallHeader;
  632.     WCHAR                  Title[MAX_TITLE_LEN];
  633.     WCHAR                  Instructions[MAX_INSTRUCTION_LEN];
  634.     WCHAR                  ListLabel[MAX_LABEL_LEN];
  635. } SP_SELECTDEVICE_PARAMS_W, *PSP_SELECTDEVICE_PARAMS_W;
  636.  
  637. #ifdef UNICODE
  638. typedef SP_SELECTDEVICE_PARAMS_W SP_SELECTDEVICE_PARAMS;
  639. typedef PSP_SELECTDEVICE_PARAMS_W PSP_SELECTDEVICE_PARAMS;
  640. #else
  641. typedef SP_SELECTDEVICE_PARAMS_A SP_SELECTDEVICE_PARAMS;
  642. typedef PSP_SELECTDEVICE_PARAMS_A PSP_SELECTDEVICE_PARAMS;
  643. #endif
  644.  
  645.  
  646. //
  647. // 'Add New Device' installation wizard structure
  648. //
  649. // Structure corresponding to a DIF_INSTALLWIZARD install function.
  650. // (NOTE: This structure is also applicable for DIF_DESTROYWIZARDDATA,
  651. // but DIF_INSTALLWIZARD is the associated function code in the class
  652. // installation parameter structure in both cases.)
  653. //
  654. // Define maximum number of dynamic wizard pages that can be added to
  655. // hardware install wizard.
  656. //
  657. #define MAX_INSTALLWIZARD_DYNAPAGES             20
  658.  
  659. typedef struct _SP_INSTALLWIZARD_DATA {
  660.     SP_CLASSINSTALL_HEADER ClassInstallHeader;
  661.     DWORD                  Flags;
  662.     HPROPSHEETPAGE         DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES];
  663.     DWORD                  NumDynamicPages;
  664.     DWORD                  DynamicPageFlags;
  665.     DWORD                  PrivateFlags;
  666.     LPARAM                 PrivateData;
  667.     HWND                   hwndWizardDlg;
  668. } SP_INSTALLWIZARD_DATA, *PSP_INSTALLWIZARD_DATA;
  669.  
  670. //
  671. // SP_INSTALLWIZARD_DATA.Flags values
  672. //
  673. #define NDW_INSTALLFLAG_DIDFACTDEFS         0x00000001
  674. #define NDW_INSTALLFLAG_HARDWAREALLREADYIN  0x00000002
  675. #define NDW_INSTALLFLAG_NEEDRESTART         DI_NEEDRESTART
  676. #define NDW_INSTALLFLAG_NEEDREBOOT          DI_NEEDREBOOT
  677. #define NDW_INSTALLFLAG_NEEDSHUTDOWN        0x00000200
  678. #define NDW_INSTALLFLAG_EXPRESSINTRO        0x00000400
  679. #define NDW_INSTALLFLAG_SKIPISDEVINSTALLED  0x00000800
  680. #define NDW_INSTALLFLAG_NODETECTEDDEVS      0x00001000
  681. #define NDW_INSTALLFLAG_INSTALLSPECIFIC     0x00002000
  682. #define NDW_INSTALLFLAG_SKIPCLASSLIST       0x00004000
  683. #define NDW_INSTALLFLAG_CI_PICKED_OEM       0x00008000
  684. #define NDW_INSTALLFLAG_PCMCIAMODE          0x00010000
  685. #define NDW_INSTALLFLAG_PCMCIADEVICE        0x00020000
  686. #define NDW_INSTALLFLAG_USERCANCEL          0x00040000
  687. #define NDW_INSTALLFLAG_KNOWNCLASS          0x00080000
  688.  
  689.  
  690. //
  691. // SP_INSTALLWIZARD_DATA.DynamicPageFlags values
  692. //
  693. // This flag is set if a Class installer has added pages to the
  694. // install wizard.
  695. //
  696. #define DYNAWIZ_FLAG_PAGESADDED             0x00000001
  697.  
  698. //
  699. // The following flags will control the button states when displaying
  700. // the InstallDetectedDevs dialog.
  701. //
  702. #define DYNAWIZ_FLAG_INSTALLDET_NEXT        0x00000002
  703. #define DYNAWIZ_FLAG_INSTALLDET_PREV        0x00000004
  704.  
  705. // Set this flag if you jump to the analyze page, and want it to
  706. // handle conflicts for you.  NOTE.  You will not get control back
  707. // in the event of a conflict if you set this flag.
  708. //
  709. // BUGBUG (lonnym): Not currently implemented!
  710. //
  711. #define DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT 0x00000008
  712.  
  713. //
  714. // Define wizard page resource IDs to be used when adding custom pages
  715. // to the hardware install wizard.
  716. //
  717. // Resource ID for the first page that the install wizard will go to after
  718. // adding the class installer pages.
  719. //
  720. #define IDD_DYNAWIZ_FIRSTPAGE                   10000
  721.  
  722. //
  723. // Resource ID for the page that the Select Device page will go back to.
  724. //
  725. #define IDD_DYNAWIZ_SELECT_PREVPAGE             10001
  726.  
  727. //
  728. // Resource ID for the page that the Select Device page will go forward to.
  729. //
  730. #define IDD_DYNAWIZ_SELECT_NEXTPAGE             10002
  731.  
  732. //
  733. // Resource ID for the page that the Analyze dialog should go back to
  734. // This will only be used in the event that there is a problem, and the user
  735. // selects Back from the analyze proc.
  736. //
  737. #define IDD_DYNAWIZ_ANALYZE_PREVPAGE            10003
  738.  
  739. //
  740. // Resource ID for the page that the Analyze dialog should go to if it
  741. // continue from the analyze proc.  the wAnalyzeResult in the INSTALLDATA
  742. // struct will contain the anaysis results.
  743. //
  744. #define IDD_DYNAWIZ_ANALYZE_NEXTPAGE            10004
  745.  
  746. //
  747. // Resource ID for that page that the Install detected devices page will go
  748. // back to.
  749. //
  750. #define IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE    10006
  751.  
  752. //
  753. // Resource ID for the page that the Install detected devices page will go
  754. // forward to.
  755. //
  756. #define IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE    10007
  757.  
  758. //
  759. // Resource ID for the page that the Install detected devices page will go
  760. // to in the event that no devices are detected.
  761. //
  762. #define IDD_DYNAWIZ_INSTALLDETECTED_NODEVS      10008
  763.  
  764. //
  765. // Resource ID of the hardware install wizard's select device page.
  766. // This ID can be used to go directly to the hardware install wizard's select
  767. // device page.
  768. //
  769. #define IDD_DYNAWIZ_SELECTDEV_PAGE              10009
  770.  
  771. //
  772. // Resource ID of the hardware install wizard's device analysis page.
  773. // This ID can be use to go directly to the hardware install wizard's analysis
  774. // page.
  775. //
  776. #define IDD_DYNAWIZ_ANALYZEDEV_PAGE             10010
  777.  
  778. //
  779. // Resource ID of the hardware install wizard's install detected devices page.
  780. // This ID can be use to go directly to the hardware install wizard's install
  781. // detected devices page.
  782. //
  783. #define IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE    10011
  784.  
  785. //
  786. // Resource ID of the hardware install wizard's select class page.
  787. // This ID can be use to go directly to the hardware install wizard's select
  788. // class page.
  789. //
  790. #define IDD_DYNAWIZ_SELECTCLASS_PAGE            10012
  791.  
  792.  
  793. //
  794. // Driver information structure (member of a driver info list that may be associated
  795. // with a particular device instance, or (globally) with a device information set)
  796. //
  797. typedef struct _SP_DRVINFO_DATA_A {
  798.     DWORD cbSize;
  799.     DWORD DriverType;
  800.     DWORD Reserved;
  801.     CHAR  Description[LINE_LEN];
  802.     CHAR  MfgName[LINE_LEN];
  803.     CHAR  ProviderName[LINE_LEN];
  804. } SP_DRVINFO_DATA_A, *PSP_DRVINFO_DATA_A;
  805.  
  806. typedef struct _SP_DRVINFO_DATA_W {
  807.     DWORD cbSize;
  808.     DWORD DriverType;
  809.     DWORD Reserved;
  810.     WCHAR Description[LINE_LEN];
  811.     WCHAR MfgName[LINE_LEN];
  812.     WCHAR ProviderName[LINE_LEN];
  813. } SP_DRVINFO_DATA_W, *PSP_DRVINFO_DATA_W;
  814.  
  815. #ifdef UNICODE
  816. typedef SP_DRVINFO_DATA_W SP_DRVINFO_DATA;
  817. typedef PSP_DRVINFO_DATA_W PSP_DRVINFO_DATA;
  818. #else
  819. typedef SP_DRVINFO_DATA_A SP_DRVINFO_DATA;
  820. typedef PSP_DRVINFO_DATA_A PSP_DRVINFO_DATA;
  821. #endif
  822.  
  823.  
  824. //
  825. // Driver information details structure (provides detailed information about a
  826. // particular driver information structure)
  827. //
  828. typedef struct _SP_DRVINFO_DETAIL_DATA_A {
  829.     DWORD    cbSize;
  830.     FILETIME InfDate;
  831.     DWORD    CompatIDsOffset;
  832.     DWORD    CompatIDsLength;
  833.     DWORD    Reserved;
  834.     CHAR     SectionName[LINE_LEN];
  835.     CHAR     InfFileName[MAX_PATH];
  836.     CHAR     DrvDescription[LINE_LEN];
  837.     CHAR     HardwareID[ANYSIZE_ARRAY];
  838. } SP_DRVINFO_DETAIL_DATA_A, *PSP_DRVINFO_DETAIL_DATA_A;
  839.  
  840. typedef struct _SP_DRVINFO_DETAIL_DATA_W {
  841.     DWORD    cbSize;
  842.     FILETIME InfDate;
  843.     DWORD    CompatIDsOffset;
  844.     DWORD    CompatIDsLength;
  845.     DWORD    Reserved;
  846.     WCHAR    SectionName[LINE_LEN];
  847.     WCHAR    InfFileName[MAX_PATH];
  848.     WCHAR    DrvDescription[LINE_LEN];
  849.     WCHAR    HardwareID[ANYSIZE_ARRAY];
  850. } SP_DRVINFO_DETAIL_DATA_W, *PSP_DRVINFO_DETAIL_DATA_W;
  851.  
  852. #ifdef UNICODE
  853. typedef SP_DRVINFO_DETAIL_DATA_W SP_DRVINFO_DETAIL_DATA;
  854. typedef PSP_DRVINFO_DETAIL_DATA_W PSP_DRVINFO_DETAIL_DATA;
  855. #else
  856. typedef SP_DRVINFO_DETAIL_DATA_A SP_DRVINFO_DETAIL_DATA;
  857. typedef PSP_DRVINFO_DETAIL_DATA_A PSP_DRVINFO_DETAIL_DATA;
  858. #endif
  859.  
  860.  
  861. //
  862. // Driver installation parameters (associated with a particular driver
  863. // information element)
  864. //
  865. typedef struct _SP_DRVINSTALL_PARAMS {
  866.     DWORD cbSize;
  867.     DWORD Rank;
  868.     DWORD Flags;
  869.     DWORD PrivateData;
  870.     DWORD Reserved;
  871. } SP_DRVINSTALL_PARAMS, *PSP_DRVINSTALL_PARAMS;
  872.  
  873. //
  874. // SP_DRVINSTALL_PARAMS.Flags values
  875. //
  876. #define DNF_DUPDESC         0x00000001   // Multiple providers have same desc
  877. #define DNF_OLDDRIVER       0x00000002   // Driver node specifies old/current driver
  878. #define DNF_EXCLUDEFROMLIST 0x00000004   // If set, this driver node will not be
  879.                                          // displayed in any driver select dialogs.
  880. #define DNF_NODRIVER        0x00000008   // if we want to install no driver
  881.                                          // (e.g no mouse drv)
  882. #define DNF_LEGACYINF       0x00000010   // this driver node comes from an old-style INF
  883.  
  884.  
  885. //
  886. // Setup callback routine for comparing detection signatures
  887. //
  888. typedef DWORD (CALLBACK* PSP_DETSIG_CMPPROC)(
  889.     IN HDEVINFO         DeviceInfoSet,
  890.     IN PSP_DEVINFO_DATA NewDeviceData,
  891.     IN PSP_DEVINFO_DATA ExistingDeviceData,
  892.     IN PVOID            CompareContext      OPTIONAL
  893.     );
  894.  
  895.  
  896. //
  897. // Structure containing class image list information.
  898. //
  899. typedef struct _SP_CLASSIMAGELIST_DATA {
  900.     DWORD      cbSize;
  901.     HIMAGELIST ImageList;
  902.     DWORD      Reserved;
  903. } SP_CLASSIMAGELIST_DATA, *PSP_CLASSIMAGELIST_DATA;
  904.  
  905.  
  906. //
  907. // Structure to be passed as first parameter (LPVOID lpv) to ExtensionPropSheetPageProc
  908. // entry point in setupapi.dll.  Used to retrieve a handle for a specified property page.
  909. //
  910. typedef struct _SP_PROPSHEETPAGE_REQUEST {
  911.     DWORD            cbSize;
  912.     DWORD            PageRequested;
  913.     HDEVINFO         DeviceInfoSet;
  914.     PSP_DEVINFO_DATA DeviceInfoData;
  915. } SP_PROPSHEETPAGE_REQUEST, *PSP_PROPSHEETPAGE_REQUEST;
  916.  
  917. //
  918. // Property sheet codes used in SP_PROPSHEETPAGE_REQUEST.PageRequested
  919. //
  920. #define SPPSR_SELECT_DEVICE_RESOURCES  1
  921.  
  922.  
  923. //
  924. // Setupapi-specific error codes
  925. //
  926. // Inf parse outcomes
  927. //
  928. #define ERROR_EXPECTED_SECTION_NAME  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0)
  929. #define ERROR_BAD_SECTION_NAME_LINE  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|1)
  930. #define ERROR_SECTION_NAME_TOO_LONG  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|2)
  931. #define ERROR_GENERAL_SYNTAX         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|3)
  932. //
  933. // Inf runtime errors
  934. //
  935. #define ERROR_WRONG_INF_STYLE        (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x100)
  936. #define ERROR_SECTION_NOT_FOUND      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x101)
  937. #define ERROR_LINE_NOT_FOUND         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x102)
  938. //
  939. // Device Installer errors
  940. //
  941. #define ERROR_NO_ASSOCIATED_CLASS     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x200)
  942. #define ERROR_CLASS_MISMATCH          (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x201)
  943. #define ERROR_DUPLICATE_FOUND         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x202)
  944. #define ERROR_NO_DRIVER_SELECTED      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x203)
  945. #define ERROR_KEY_DOES_NOT_EXIST      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x204)
  946. #define ERROR_INVALID_DEVINST_NAME    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x205)
  947. #define ERROR_INVALID_CLASS           (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x206)
  948. #define ERROR_DEVINST_ALREADY_EXISTS  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x207)
  949. #define ERROR_DEVINFO_NOT_REGISTERED  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x208)
  950. #define ERROR_INVALID_REG_PROPERTY    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x209)
  951. #define ERROR_NO_INF                  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20A)
  952. #define ERROR_NO_SUCH_DEVINST         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20B)
  953. #define ERROR_CANT_LOAD_CLASS_ICON    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20C)
  954. #define ERROR_INVALID_CLASS_INSTALLER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20D)
  955. #define ERROR_DI_DO_DEFAULT           (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20E)
  956. #define ERROR_DI_NOFILECOPY           (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20F)
  957. #define ERROR_INVALID_HWPROFILE       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x210)
  958. #define ERROR_NO_DEVICE_SELECTED      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x211)
  959. #define ERROR_DEVINFO_LIST_LOCKED     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x212)
  960. #define ERROR_DEVINFO_DATA_LOCKED     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x213)
  961. #define ERROR_DI_BAD_PATH             (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x214)
  962. #define ERROR_NO_CLASSINSTALL_PARAMS  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x215)
  963. #define ERROR_FILEQUEUE_LOCKED        (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x216)
  964. #define ERROR_BAD_SERVICE_INSTALLSECT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x217)
  965. #define ERROR_NO_CLASS_DRIVER_LIST    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x218)
  966. #define ERROR_NO_ASSOCIATED_SERVICE   (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x219)
  967.  
  968.  
  969. WINSETUPAPI
  970. BOOL
  971. WINAPI
  972. SetupGetInfInformationA(
  973.     IN  LPCVOID             InfSpec,
  974.     IN  DWORD               SearchControl,
  975.     OUT PSP_INF_INFORMATION ReturnBuffer,     OPTIONAL
  976.     IN  DWORD               ReturnBufferSize,
  977.     OUT PDWORD              RequiredSize      OPTIONAL
  978.     );
  979.  
  980. WINSETUPAPI
  981. BOOL
  982. WINAPI
  983. SetupGetInfInformationW(
  984.     IN  LPCVOID             InfSpec,
  985.     IN  DWORD               SearchControl,
  986.     OUT PSP_INF_INFORMATION ReturnBuffer,     OPTIONAL
  987.     IN  DWORD               ReturnBufferSize,
  988.     OUT PDWORD              RequiredSize      OPTIONAL
  989.     );
  990.  
  991. //
  992. // SearchControl flags for SetupGetInfInformation
  993. //
  994. #define INFINFO_INF_SPEC_IS_HINF        1
  995. #define INFINFO_INF_NAME_IS_ABSOLUTE    2
  996. #define INFINFO_DEFAULT_SEARCH          3
  997. #define INFINFO_REVERSE_DEFAULT_SEARCH  4
  998. #define INFINFO_INF_PATH_LIST_SEARCH    5
  999.  
  1000. #ifdef UNICODE
  1001. #define SetupGetInfInformation SetupGetInfInformationW
  1002. #else
  1003. #define SetupGetInfInformation SetupGetInfInformationA
  1004. #endif
  1005.  
  1006.  
  1007. WINSETUPAPI
  1008. BOOL
  1009. WINAPI
  1010. SetupQueryInfFileInformationA(
  1011.     IN  PSP_INF_INFORMATION InfInformation,
  1012.     IN  UINT                InfIndex,
  1013.     OUT PSTR                ReturnBuffer,     OPTIONAL
  1014.     IN  DWORD               ReturnBufferSize,
  1015.     OUT PDWORD              RequiredSize      OPTIONAL
  1016.     );
  1017.  
  1018. WINSETUPAPI
  1019. BOOL
  1020. WINAPI
  1021. SetupQueryInfFileInformationW(
  1022.     IN  PSP_INF_INFORMATION InfInformation,
  1023.     IN  UINT                InfIndex,
  1024.     OUT PWSTR               ReturnBuffer,     OPTIONAL
  1025.     IN  DWORD               ReturnBufferSize,
  1026.     OUT PDWORD              RequiredSize      OPTIONAL
  1027.     );
  1028.  
  1029. #ifdef UNICODE
  1030. #define SetupQueryInfFileInformation SetupQueryInfFileInformationW
  1031. #else
  1032. #define SetupQueryInfFileInformation SetupQueryInfFileInformationA
  1033. #endif
  1034.  
  1035.  
  1036. WINSETUPAPI
  1037. BOOL
  1038. WINAPI
  1039. SetupQueryInfVersionInformationA(
  1040.     IN  PSP_INF_INFORMATION InfInformation,
  1041.     IN  UINT                InfIndex,
  1042.     IN  PCSTR               Key,              OPTIONAL
  1043.     OUT PSTR                ReturnBuffer,     OPTIONAL
  1044.     IN  DWORD               ReturnBufferSize,
  1045.     OUT PDWORD              RequiredSize      OPTIONAL
  1046.     );
  1047.  
  1048. WINSETUPAPI
  1049. BOOL
  1050. WINAPI
  1051. SetupQueryInfVersionInformationW(
  1052.     IN  PSP_INF_INFORMATION InfInformation,
  1053.     IN  UINT                InfIndex,
  1054.     IN  PCWSTR              Key,              OPTIONAL
  1055.     OUT PWSTR               ReturnBuffer,     OPTIONAL
  1056.     IN  DWORD               ReturnBufferSize,
  1057.     OUT PDWORD              RequiredSize      OPTIONAL
  1058.     );
  1059.  
  1060. #ifdef UNICODE
  1061. #define SetupQueryInfVersionInformation SetupQueryInfVersionInformationW
  1062. #else
  1063. #define SetupQueryInfVersionInformation SetupQueryInfVersionInformationA
  1064. #endif
  1065.  
  1066.  
  1067. WINSETUPAPI
  1068. BOOL
  1069. WINAPI
  1070. SetupGetInfFileListA(
  1071.     IN  PCSTR  DirectoryPath,    OPTIONAL
  1072.     IN  DWORD  InfStyle,
  1073.     OUT PSTR   ReturnBuffer,     OPTIONAL
  1074.     IN  DWORD  ReturnBufferSize,
  1075.     OUT PDWORD RequiredSize      OPTIONAL
  1076.     );
  1077.  
  1078. WINSETUPAPI
  1079. BOOL
  1080. WINAPI
  1081. SetupGetInfFileListW(
  1082.     IN  PCWSTR DirectoryPath,    OPTIONAL
  1083.     IN  DWORD  InfStyle,
  1084.     OUT PWSTR  ReturnBuffer,     OPTIONAL
  1085.     IN  DWORD  ReturnBufferSize,
  1086.     OUT PDWORD RequiredSize      OPTIONAL
  1087.     );
  1088.  
  1089. #ifdef UNICODE
  1090. #define SetupGetInfFileList SetupGetInfFileListW
  1091. #else
  1092. #define SetupGetInfFileList SetupGetInfFileListA
  1093. #endif
  1094.  
  1095.  
  1096. WINSETUPAPI
  1097. HINF
  1098. WINAPI
  1099. SetupOpenInfFileW(
  1100.     IN  PCWSTR FileName,
  1101.     IN  PCWSTR InfClass,    OPTIONAL
  1102.     IN  DWORD  InfStyle,
  1103.     OUT PUINT  ErrorLine    OPTIONAL
  1104.     );
  1105.  
  1106. WINSETUPAPI
  1107. HINF
  1108. WINAPI
  1109. SetupOpenInfFileA(
  1110.     IN  PCSTR FileName,
  1111.     IN  PCSTR InfClass,     OPTIONAL
  1112.     IN  DWORD InfStyle,
  1113.     OUT PUINT ErrorLine     OPTIONAL
  1114.     );
  1115.  
  1116. #ifdef UNICODE
  1117. #define SetupOpenInfFile SetupOpenInfFileW
  1118. #else
  1119. #define SetupOpenInfFile SetupOpenInfFileA
  1120. #endif
  1121.  
  1122.  
  1123. WINSETUPAPI
  1124. HINF
  1125. WINAPI
  1126. SetupOpenMasterInf(
  1127.     VOID
  1128.     );
  1129.  
  1130.  
  1131. WINSETUPAPI
  1132. BOOL
  1133. WINAPI
  1134. SetupOpenAppendInfFileW(
  1135.     IN  PCWSTR FileName,    OPTIONAL
  1136.     IN  HINF   InfHandle,
  1137.     OUT PUINT  ErrorLine    OPTIONAL
  1138.     );
  1139.  
  1140. WINSETUPAPI
  1141. BOOL
  1142. WINAPI
  1143. SetupOpenAppendInfFileA(
  1144.     IN  PCSTR FileName,     OPTIONAL
  1145.     IN  HINF  InfHandle,
  1146.     OUT PUINT ErrorLine     OPTIONAL
  1147.     );
  1148.  
  1149. #ifdef UNICODE
  1150. #define SetupOpenAppendInfFile SetupOpenAppendInfFileW
  1151. #else
  1152. #define SetupOpenAppendInfFile SetupOpenAppendInfFileA
  1153. #endif
  1154.  
  1155.  
  1156. WINSETUPAPI
  1157. VOID
  1158. WINAPI
  1159. SetupCloseInfFile(
  1160.     IN HINF InfHandle
  1161.     );
  1162.  
  1163.  
  1164. WINSETUPAPI
  1165. BOOL
  1166. WINAPI
  1167. SetupFindFirstLineA(
  1168.     IN  HINF        InfHandle,
  1169.     IN  PCSTR       Section,
  1170.     IN  PCSTR       Key,          OPTIONAL
  1171.     OUT PINFCONTEXT Context
  1172.     );
  1173.  
  1174. WINSETUPAPI
  1175. BOOL
  1176. WINAPI
  1177. SetupFindFirstLineW(
  1178.     IN  HINF        InfHandle,
  1179.     IN  PCWSTR      Section,
  1180.     IN  PCWSTR      Key,          OPTIONAL
  1181.     OUT PINFCONTEXT Context
  1182.     );
  1183.  
  1184. #ifdef UNICODE
  1185. #define SetupFindFirstLine SetupFindFirstLineW
  1186. #else
  1187. #define SetupFindFirstLine SetupFindFirstLineA
  1188. #endif
  1189.  
  1190.  
  1191. WINSETUPAPI
  1192. BOOL
  1193. WINAPI
  1194. SetupFindNextLine(
  1195.     IN  PINFCONTEXT ContextIn,
  1196.     OUT PINFCONTEXT ContextOut
  1197.     );
  1198.  
  1199.  
  1200. WINSETUPAPI
  1201. BOOL
  1202. WINAPI
  1203. SetupFindNextMatchLineA(
  1204.     IN  PINFCONTEXT ContextIn,
  1205.     IN  PCSTR       Key,        OPTIONAL
  1206.     OUT PINFCONTEXT ContextOut
  1207.     );
  1208.  
  1209. WINSETUPAPI
  1210. BOOL
  1211. WINAPI
  1212. SetupFindNextMatchLineW(
  1213.     IN  PINFCONTEXT ContextIn,
  1214.     IN  PCWSTR      Key,        OPTIONAL
  1215.     OUT PINFCONTEXT ContextOut
  1216.     );
  1217.  
  1218. #ifdef UNICODE
  1219. #define SetupFindNextMatchLine SetupFindNextMatchLineW
  1220. #else
  1221. #define SetupFindNextMatchLine SetupFindNextMatchLineA
  1222. #endif
  1223.  
  1224.  
  1225. WINSETUPAPI
  1226. BOOL
  1227. WINAPI
  1228. SetupGetLineByIndexA(
  1229.     IN  HINF        InfHandle,
  1230.     IN  PCSTR       Section,
  1231.     IN  DWORD       Index,
  1232.     OUT PINFCONTEXT Context
  1233.     );
  1234.  
  1235. WINSETUPAPI
  1236. BOOL
  1237. WINAPI
  1238. SetupGetLineByIndexW(
  1239.     IN  HINF        InfHandle,
  1240.     IN  PCWSTR      Section,
  1241.     IN  DWORD       Index,
  1242.     OUT PINFCONTEXT Context
  1243.     );
  1244.  
  1245. #ifdef UNICODE
  1246. #define SetupGetLineByIndex SetupGetLineByIndexW
  1247. #else
  1248. #define SetupGetLineByIndex SetupGetLineByIndexA
  1249. #endif
  1250.  
  1251.  
  1252. WINSETUPAPI
  1253. LONG
  1254. WINAPI
  1255. SetupGetLineCountA(
  1256.     IN HINF  InfHandle,
  1257.     IN PCSTR Section
  1258.     );
  1259.  
  1260. WINSETUPAPI
  1261. LONG
  1262. WINAPI
  1263. SetupGetLineCountW(
  1264.     IN HINF   InfHandle,
  1265.     IN PCWSTR Section
  1266.     );
  1267.  
  1268. #ifdef UNICODE
  1269. #define SetupGetLineCount SetupGetLineCountW
  1270. #else
  1271. #define SetupGetLineCount SetupGetLineCountA
  1272. #endif
  1273.  
  1274.  
  1275. WINSETUPAPI
  1276. BOOL
  1277. WINAPI
  1278. SetupGetLineTextA(
  1279.     IN  PINFCONTEXT Context,          OPTIONAL
  1280.     IN  HINF        InfHandle,        OPTIONAL
  1281.     IN  PCSTR       Section,          OPTIONAL
  1282.     IN  PCSTR       Key,              OPTIONAL
  1283.     OUT PSTR        ReturnBuffer,     OPTIONAL
  1284.     IN  DWORD       ReturnBufferSize,
  1285.     OUT PDWORD      RequiredSize      OPTIONAL
  1286.     );
  1287.  
  1288. WINSETUPAPI
  1289. BOOL
  1290. WINAPI
  1291. SetupGetLineTextW(
  1292.     IN  PINFCONTEXT Context,          OPTIONAL
  1293.     IN  HINF        InfHandle,        OPTIONAL
  1294.     IN  PCWSTR      Section,          OPTIONAL
  1295.     IN  PCWSTR      Key,              OPTIONAL
  1296.     OUT PWSTR       ReturnBuffer,     OPTIONAL
  1297.     IN  DWORD       ReturnBufferSize,
  1298.     OUT PDWORD      RequiredSize      OPTIONAL
  1299.     );
  1300.  
  1301. #ifdef UNICODE
  1302. #define SetupGetLineText SetupGetLineTextW
  1303. #else
  1304. #define SetupGetLineText SetupGetLineTextA
  1305. #endif
  1306.  
  1307.  
  1308. WINSETUPAPI
  1309. DWORD
  1310. WINAPI
  1311. SetupGetFieldCount(
  1312.     IN PINFCONTEXT Context
  1313.     );
  1314.  
  1315.  
  1316. WINSETUPAPI
  1317. BOOL
  1318. WINAPI
  1319. SetupGetStringFieldA(
  1320.     IN  PINFCONTEXT Context,
  1321.     IN  DWORD       FieldIndex,
  1322.     OUT PSTR        ReturnBuffer,     OPTIONAL
  1323.     IN  DWORD       ReturnBufferSize,
  1324.     OUT PDWORD      RequiredSize      OPTIONAL
  1325.     );
  1326.  
  1327. WINSETUPAPI
  1328. BOOL
  1329. WINAPI
  1330. SetupGetStringFieldW(
  1331.     IN  PINFCONTEXT Context,
  1332.     IN  DWORD       FieldIndex,
  1333.     OUT PWSTR       ReturnBuffer,     OPTIONAL
  1334.     IN  DWORD       ReturnBufferSize,
  1335.     OUT PDWORD      RequiredSize      OPTIONAL
  1336.     );
  1337.  
  1338. #ifdef UNICODE
  1339. #define SetupGetStringField SetupGetStringFieldW
  1340. #else
  1341. #define SetupGetStringField SetupGetStringFieldA
  1342. #endif
  1343.  
  1344.  
  1345. WINSETUPAPI
  1346. BOOL
  1347. WINAPI
  1348. SetupGetIntField(
  1349.     IN  PINFCONTEXT Context,
  1350.     IN  DWORD       FieldIndex,
  1351.     OUT PINT        IntegerValue
  1352.     );
  1353.  
  1354.  
  1355. WINSETUPAPI
  1356. BOOL
  1357. WINAPI
  1358. SetupGetMultiSzFieldA(
  1359.     IN  PINFCONTEXT Context,
  1360.     IN  DWORD       FieldIndex,
  1361.     OUT PSTR        ReturnBuffer,     OPTIONAL
  1362.     IN  DWORD       ReturnBufferSize,
  1363.     OUT LPDWORD     RequiredSize      OPTIONAL
  1364.     );
  1365.  
  1366. WINSETUPAPI
  1367. BOOL
  1368. WINAPI
  1369. SetupGetMultiSzFieldW(
  1370.     IN  PINFCONTEXT Context,
  1371.     IN  DWORD       FieldIndex,
  1372.     OUT PWSTR       ReturnBuffer,     OPTIONAL
  1373.     IN  DWORD       ReturnBufferSize,
  1374.     OUT LPDWORD     RequiredSize      OPTIONAL
  1375.     );
  1376.  
  1377. #ifdef UNICODE
  1378. #define SetupGetMultiSzField SetupGetMultiSzFieldW
  1379. #else
  1380. #define SetupGetMultiSzField SetupGetMultiSzFieldA
  1381. #endif
  1382.  
  1383.  
  1384. WINSETUPAPI
  1385. BOOL
  1386. WINAPI
  1387. SetupGetBinaryField(
  1388.     IN  PINFCONTEXT Context,
  1389.     IN  DWORD       FieldIndex,
  1390.     OUT PBYTE       ReturnBuffer,     OPTIONAL
  1391.     IN  DWORD       ReturnBufferSize,
  1392.     OUT LPDWORD     RequiredSize      OPTIONAL
  1393.     );
  1394.  
  1395.  
  1396. WINSETUPAPI
  1397. DWORD
  1398. WINAPI
  1399. SetupGetFileCompressionInfoA(
  1400.     IN  PCSTR   SourceFileName,
  1401.     OUT PSTR   *ActualSourceFileName,
  1402.     OUT PDWORD  SourceFileSize,
  1403.     OUT PDWORD  TargetFileSize,
  1404.     OUT PUINT   CompressionType
  1405.     );
  1406.  
  1407. WINSETUPAPI
  1408. DWORD
  1409. WINAPI
  1410. SetupGetFileCompressionInfoW(
  1411.     IN  PCWSTR  SourceFileName,
  1412.     OUT PWSTR  *ActualSourceFileName,
  1413.     OUT PDWORD  SourceFileSize,
  1414.     OUT PDWORD  TargetFileSize,
  1415.     OUT PUINT   CompressionType
  1416.     );
  1417.  
  1418. #ifdef UNICODE
  1419. #define SetupGetFileCompressionInfo SetupGetFileCompressionInfoW
  1420. #else
  1421. #define SetupGetFileCompressionInfo SetupGetFileCompressionInfoA
  1422. #endif
  1423.  
  1424.  
  1425. //
  1426. // Compression types
  1427. //
  1428. #define FILE_COMPRESSION_NONE       0
  1429. #define FILE_COMPRESSION_WINLZA     1
  1430. #define FILE_COMPRESSION_MSZIP      2
  1431.  
  1432.  
  1433. WINSETUPAPI
  1434. DWORD
  1435. WINAPI
  1436. SetupDecompressOrCopyFileA(
  1437.     IN PCSTR SourceFileName,
  1438.     IN PCSTR TargetFileName,
  1439.     IN PUINT CompressionType OPTIONAL
  1440.     );
  1441.  
  1442. WINSETUPAPI
  1443. DWORD
  1444. WINAPI
  1445. SetupDecompressOrCopyFileW(
  1446.     IN PCWSTR SourceFileName,
  1447.     IN PCWSTR TargetFileName,
  1448.     IN PUINT  CompressionType OPTIONAL
  1449.     );
  1450.  
  1451. #ifdef UNICODE
  1452. #define SetupDecompressOrCopyFile SetupDecompressOrCopyFileW
  1453. #else
  1454. #define SetupDecompressOrCopyFile SetupDecompressOrCopyFileA
  1455. #endif
  1456.  
  1457.  
  1458. WINSETUPAPI
  1459. BOOL
  1460. WINAPI
  1461. SetupGetSourceFileLocationA(
  1462.     IN  HINF        InfHandle,
  1463.     IN  PINFCONTEXT InfContext,       OPTIONAL
  1464.     IN  PCSTR       FileName,         OPTIONAL
  1465.     OUT PUINT       SourceId,
  1466.     OUT PSTR        ReturnBuffer,     OPTIONAL
  1467.     IN  DWORD       ReturnBufferSize,
  1468.     OUT PDWORD      RequiredSize      OPTIONAL
  1469.     );
  1470.  
  1471. WINSETUPAPI
  1472. BOOL
  1473. WINAPI
  1474. SetupGetSourceFileLocationW(
  1475.     IN  HINF        InfHandle,
  1476.     IN  PINFCONTEXT InfContext,       OPTIONAL
  1477.     IN  PCWSTR      FileName,         OPTIONAL
  1478.     OUT PUINT       SourceId,
  1479.     OUT PWSTR       ReturnBuffer,     OPTIONAL
  1480.     IN  DWORD       ReturnBufferSize,
  1481.     OUT PDWORD      RequiredSize      OPTIONAL
  1482.     );
  1483.  
  1484. #ifdef UNICODE
  1485. #define SetupGetSourceFileLocation SetupGetSourceFileLocationW
  1486. #else
  1487. #define SetupGetSourceFileLocation SetupGetSourceFileLocationA
  1488. #endif
  1489.  
  1490.  
  1491. WINSETUPAPI
  1492. BOOL
  1493. WINAPI
  1494. SetupGetSourceFileSizeA(
  1495.     IN  HINF        InfHandle,
  1496.     IN  PINFCONTEXT InfContext,     OPTIONAL
  1497.     IN  PCSTR       FileName,       OPTIONAL
  1498.     IN  PCSTR       Section,        OPTIONAL
  1499.     OUT PDWORD      FileSize,
  1500.     IN  UINT        RoundingFactor  OPTIONAL
  1501.     );
  1502.  
  1503. WINSETUPAPI
  1504. BOOL
  1505. WINAPI
  1506. SetupGetSourceFileSizeW(
  1507.     IN  HINF        InfHandle,
  1508.     IN  PINFCONTEXT InfContext,     OPTIONAL
  1509.     IN  PCWSTR      FileName,       OPTIONAL
  1510.     IN  PCWSTR      Section,        OPTIONAL
  1511.     OUT PDWORD      FileSize,
  1512.     IN  UINT        RoundingFactor  OPTIONAL
  1513.     );
  1514.  
  1515. #ifdef UNICODE
  1516. #define SetupGetSourceFileSize SetupGetSourceFileSizeW
  1517. #else
  1518. #define SetupGetSourceFileSize SetupGetSourceFileSizeA
  1519. #endif
  1520.  
  1521.  
  1522. WINSETUPAPI
  1523. BOOL
  1524. WINAPI
  1525. SetupGetTargetPathA(
  1526.     IN  HINF        InfHandle,
  1527.     IN  PINFCONTEXT InfContext,       OPTIONAL
  1528.     IN  PCSTR       Section,          OPTIONAL
  1529.     OUT PSTR        ReturnBuffer,     OPTIONAL
  1530.     IN  DWORD       ReturnBufferSize,
  1531.     OUT PDWORD      RequiredSize      OPTIONAL
  1532.     );
  1533.  
  1534. WINSETUPAPI
  1535. BOOL
  1536. WINAPI
  1537. SetupGetTargetPathW(
  1538.     IN  HINF        InfHandle,
  1539.     IN  PINFCONTEXT InfContext,       OPTIONAL
  1540.     IN  PCWSTR      Section,          OPTIONAL
  1541.     OUT PWSTR       ReturnBuffer,     OPTIONAL
  1542.     IN  DWORD       ReturnBufferSize,
  1543.     OUT PDWORD      RequiredSize      OPTIONAL
  1544.     );
  1545.  
  1546. #ifdef UNICODE
  1547. #define SetupGetTargetPath SetupGetTargetPathW
  1548. #else
  1549. #define SetupGetTargetPath SetupGetTargetPathA
  1550. #endif
  1551.  
  1552.  
  1553. //
  1554. // Define flags for SourceList APIs.
  1555. //
  1556. #define SRCLIST_TEMPORARY       0x00000001
  1557. #define SRCLIST_NOBROWSE        0x00000002
  1558. #define SRCLIST_SYSTEM          0x00000010
  1559. #define SRCLIST_USER            0x00000020
  1560. #define SRCLIST_SYSIFADMIN      0x00000040
  1561. #define SRCLIST_SUBDIRS         0x00000100
  1562. #define SRCLIST_APPEND          0x00000200
  1563. #define SRCLIST_NOSTRIPPLATFORM 0x00000400
  1564.  
  1565.  
  1566. WINSETUPAPI
  1567. BOOL
  1568. WINAPI
  1569. SetupSetSourceListA(
  1570.     IN DWORD  Flags,
  1571.     IN PCSTR *SourceList,
  1572.     IN UINT   SourceCount
  1573.     );
  1574.  
  1575. WINSETUPAPI
  1576. BOOL
  1577. WINAPI
  1578. SetupSetSourceListW(
  1579.     IN DWORD   Flags,
  1580.     IN PCWSTR *SourceList,
  1581.     IN UINT    SourceCount
  1582.     );
  1583.  
  1584. #ifdef UNICODE
  1585. #define SetupSetSourceList SetupSetSourceListW
  1586. #else
  1587. #define SetupSetSourceList SetupSetSourceListA
  1588. #endif
  1589.  
  1590.  
  1591. WINSETUPAPI
  1592. BOOL
  1593. WINAPI
  1594. SetupCancelTemporarySourceList(
  1595.     VOID
  1596.     );
  1597.  
  1598.  
  1599. WINSETUPAPI
  1600. BOOL
  1601. WINAPI
  1602. SetupAddToSourceListA(
  1603.     IN DWORD Flags,
  1604.     IN PCSTR Source
  1605.     );
  1606.  
  1607. WINSETUPAPI
  1608. BOOL
  1609. WINAPI
  1610. SetupAddToSourceListW(
  1611.     IN DWORD  Flags,
  1612.     IN PCWSTR Source
  1613.     );
  1614.  
  1615. #ifdef UNICODE
  1616. #define SetupAddToSourceList SetupAddToSourceListW
  1617. #else
  1618. #define SetupAddToSourceList SetupAddToSourceListA
  1619. #endif
  1620.  
  1621.  
  1622. WINSETUPAPI
  1623. BOOL
  1624. WINAPI
  1625. SetupRemoveFromSourceListA(
  1626.     IN DWORD Flags,
  1627.     IN PCSTR Source
  1628.     );
  1629.  
  1630. WINSETUPAPI
  1631. BOOL
  1632. WINAPI
  1633. SetupRemoveFromSourceListW(
  1634.     IN DWORD  Flags,
  1635.     IN PCWSTR Source
  1636.     );
  1637.  
  1638. #ifdef UNICODE
  1639. #define SetupRemoveFromSourceList SetupRemoveFromSourceListW
  1640. #else
  1641. #define SetupRemoveFromSourceList SetupRemoveFromSourceListA
  1642. #endif
  1643.  
  1644.  
  1645. WINSETUPAPI
  1646. BOOL
  1647. WINAPI
  1648. SetupQuerySourceListA(
  1649.     IN  DWORD   Flags,
  1650.     OUT PCSTR **List,
  1651.     OUT PUINT   Count
  1652.     );
  1653.  
  1654. WINSETUPAPI
  1655. BOOL
  1656. WINAPI
  1657. SetupQuerySourceListW(
  1658.     IN  DWORD    Flags,
  1659.     OUT PCWSTR **List,
  1660.     OUT PUINT    Count
  1661.     );
  1662.  
  1663. #ifdef UNICODE
  1664. #define SetupQuerySourceList SetupQuerySourceListW
  1665. #else
  1666. #define SetupQuerySourceList SetupQuerySourceListA
  1667. #endif
  1668.  
  1669.  
  1670. WINSETUPAPI
  1671. BOOL
  1672. WINAPI
  1673. SetupFreeSourceListA(
  1674.     IN OUT PCSTR **List,
  1675.     IN     UINT    Count
  1676.     );
  1677.  
  1678. WINSETUPAPI
  1679. BOOL
  1680. WINAPI
  1681. SetupFreeSourceListW(
  1682.     IN OUT PCWSTR **List,
  1683.     IN     UINT     Count
  1684.     );
  1685.  
  1686. #ifdef UNICODE
  1687. #define SetupFreeSourceList SetupFreeSourceListW
  1688. #else
  1689. #define SetupFreeSourceList SetupFreeSourceListA
  1690. #endif
  1691.  
  1692.  
  1693. WINSETUPAPI
  1694. UINT
  1695. WINAPI
  1696. SetupPromptForDiskA(
  1697.     IN  HWND   hwndParent,
  1698.     IN  PCSTR  DialogTitle,      OPTIONAL
  1699.     IN  PCSTR  DiskName,         OPTIONAL
  1700.     IN  PCSTR  PathToSource,     OPTIONAL
  1701.     IN  PCSTR  FileSought,
  1702.     IN  PCSTR  TagFile,          OPTIONAL
  1703.     IN  DWORD  DiskPromptStyle,
  1704.     OUT PSTR   PathBuffer,
  1705.     IN  DWORD  PathBufferSize,
  1706.     OUT PDWORD PathRequiredSize
  1707.     );
  1708.  
  1709. WINSETUPAPI
  1710. UINT
  1711. WINAPI
  1712. SetupPromptForDiskW(
  1713.     IN  HWND   hwndParent,
  1714.     IN  PCWSTR DialogTitle,      OPTIONAL
  1715.     IN  PCWSTR DiskName,         OPTIONAL
  1716.     IN  PCWSTR PathToSource,     OPTIONAL
  1717.     IN  PCWSTR FileSought,
  1718.     IN  PCWSTR TagFile,          OPTIONAL
  1719.     IN  DWORD  DiskPromptStyle,
  1720.     OUT PWSTR  PathBuffer,
  1721.     IN  DWORD  PathBufferSize,
  1722.     OUT PDWORD PathRequiredSize
  1723.     );
  1724.  
  1725. #ifdef UNICODE
  1726. #define SetupPromptForDisk SetupPromptForDiskW
  1727. #else
  1728. #define SetupPromptForDisk SetupPromptForDiskA
  1729. #endif
  1730.  
  1731.  
  1732. WINSETUPAPI
  1733. UINT
  1734. WINAPI
  1735. SetupCopyErrorA(
  1736.     IN  HWND   hwndParent,
  1737.     IN  PCSTR  DialogTitle,     OPTIONAL
  1738.     IN  PCSTR  DiskName,        OPTIONAL
  1739.     IN  PCSTR  PathToSource,
  1740.     IN  PCSTR  SourceFile,
  1741.     IN  PCSTR  TargetPathFile,  OPTIONAL
  1742.     IN  UINT   Win32ErrorCode,
  1743.     IN  DWORD  Style,
  1744.     OUT PSTR   PathBuffer,      OPTIONAL
  1745.     IN  DWORD  PathBufferSize,
  1746.     OUT PDWORD PathRequiredSize OPTIONAL
  1747.     );
  1748.  
  1749. WINSETUPAPI
  1750. UINT
  1751. WINAPI
  1752. SetupCopyErrorW(
  1753.     IN  HWND   hwndParent,
  1754.     IN  PCWSTR DialogTitle,     OPTIONAL
  1755.     IN  PCWSTR DiskName,        OPTIONAL
  1756.     IN  PCWSTR PathToSource,
  1757.     IN  PCWSTR SourceFile,
  1758.     IN  PCWSTR TargetPathFile,  OPTIONAL
  1759.     IN  UINT   Win32ErrorCode,
  1760.     IN  DWORD  Style,
  1761.     OUT PWSTR  PathBuffer,      OPTIONAL
  1762.     IN  DWORD  PathBufferSize,
  1763.     OUT PDWORD PathRequiredSize OPTIONAL
  1764.     );
  1765.  
  1766. #ifdef UNICODE
  1767. #define SetupCopyError SetupCopyErrorW
  1768. #else
  1769. #define SetupCopyError SetupCopyErrorA
  1770. #endif
  1771.  
  1772.  
  1773. WINSETUPAPI
  1774. UINT
  1775. WINAPI
  1776. SetupRenameErrorA(
  1777.     IN  HWND   hwndParent,
  1778.     IN  PCSTR  DialogTitle,     OPTIONAL
  1779.     IN  PCSTR  SourceFile,
  1780.     IN  PCSTR  TargetFile,
  1781.     IN  UINT   Win32ErrorCode,
  1782.     IN  DWORD  Style
  1783.     );
  1784.  
  1785. WINSETUPAPI
  1786. UINT
  1787. WINAPI
  1788. SetupRenameErrorW(
  1789.     IN  HWND   hwndParent,
  1790.     IN  PCWSTR DialogTitle,     OPTIONAL
  1791.     IN  PCWSTR SourceFile,
  1792.     IN  PCWSTR TargetFile,
  1793.     IN  UINT   Win32ErrorCode,
  1794.     IN  DWORD  Style
  1795.     );
  1796.  
  1797. #ifdef UNICODE
  1798. #define SetupRenameError SetupRenameErrorW
  1799. #else
  1800. #define SetupRenameError SetupRenameErrorA
  1801. #endif
  1802.  
  1803.  
  1804. WINSETUPAPI
  1805. UINT
  1806. WINAPI
  1807. SetupDeleteErrorA(
  1808.     IN  HWND   hwndParent,
  1809.     IN  PCSTR  DialogTitle,     OPTIONAL
  1810.     IN  PCSTR  File,
  1811.     IN  UINT   Win32ErrorCode,
  1812.     IN  DWORD  Style
  1813.     );
  1814.  
  1815. WINSETUPAPI
  1816. UINT
  1817. WINAPI
  1818. SetupDeleteErrorW(
  1819.     IN  HWND   hwndParent,
  1820.     IN  PCWSTR DialogTitle,     OPTIONAL
  1821.     IN  PCWSTR File,
  1822.     IN  UINT   Win32ErrorCode,
  1823.     IN  DWORD  Style
  1824.     );
  1825.  
  1826. #ifdef UNICODE
  1827. #define SetupDeleteError SetupDeleteErrorW
  1828. #else
  1829. #define SetupDeleteError SetupDeleteErrorA
  1830. #endif
  1831.  
  1832.  
  1833. //
  1834. // Styles for SetupPromptForDisk, SetupCopyError,
  1835. // SetupRenameError, SetupDeleteError
  1836. //
  1837. #define IDF_NOBROWSE        0x00000001
  1838. #define IDF_NOSKIP          0x00000002
  1839. #define IDF_NODETAILS       0x00000004
  1840. #define IDF_NOCOMPRESSED    0x00000008
  1841. #define IDF_CHECKFIRST      0x00000100
  1842. #define IDF_NOBEEP          0x00000200
  1843. #define IDF_NOFOREGROUND    0x00000400
  1844. #define IDF_WARNIFSKIP      0x00000800
  1845. #define IDF_OEMDISK         0x80000000
  1846.  
  1847. //
  1848. // Return values for SetupPromptForDisk, SetupCopyError,
  1849. // SetupRenameError, SetupDeleteError
  1850. //
  1851. #define DPROMPT_SUCCESS         0
  1852. #define DPROMPT_CANCEL          1
  1853. #define DPROMPT_SKIPFILE        2
  1854. #define DPROMPT_BUFFERTOOSMALL  3
  1855. #define DPROMPT_OUTOFMEMORY     4
  1856.  
  1857.  
  1858. WINSETUPAPI
  1859. BOOL
  1860. WINAPI
  1861. SetupSetDirectoryIdA(
  1862.     IN HINF  InfHandle,
  1863.     IN DWORD Id,            OPTIONAL
  1864.     IN PCSTR Directory      OPTIONAL
  1865.     );
  1866.  
  1867. WINSETUPAPI
  1868. BOOL
  1869. WINAPI
  1870. SetupSetDirectoryIdW(
  1871.     IN HINF   InfHandle,
  1872.     IN DWORD  Id,           OPTIONAL
  1873.     IN PCWSTR Directory     OPTIONAL
  1874.     );
  1875.  
  1876. #ifdef UNICODE
  1877. #define SetupSetDirectoryId SetupSetDirectoryIdW
  1878. #else
  1879. #define SetupSetDirectoryId SetupSetDirectoryIdA
  1880. #endif
  1881.  
  1882.  
  1883. WINSETUPAPI
  1884. BOOL
  1885. WINAPI
  1886. SetupGetSourceInfoA(
  1887.     IN  HINF   InfHandle,
  1888.     IN  UINT   SourceId,
  1889.     IN  UINT   InfoDesired,
  1890.     OUT PSTR   ReturnBuffer,     OPTIONAL
  1891.     IN  DWORD  ReturnBufferSize,
  1892.     OUT PDWORD RequiredSize      OPTIONAL
  1893.     );
  1894.  
  1895. WINSETUPAPI
  1896. BOOL
  1897. WINAPI
  1898. SetupGetSourceInfoW(
  1899.     IN  HINF   InfHandle,
  1900.     IN  UINT   SourceId,
  1901.     IN  UINT   InfoDesired,
  1902.     OUT PWSTR  ReturnBuffer,     OPTIONAL
  1903.     IN  DWORD  ReturnBufferSize,
  1904.     OUT PDWORD RequiredSize      OPTIONAL
  1905.     );
  1906.  
  1907. #ifdef UNICODE
  1908. #define SetupGetSourceInfo SetupGetSourceInfoW
  1909. #else
  1910. #define SetupGetSourceInfo SetupGetSourceInfoA
  1911. #endif
  1912.  
  1913. //
  1914. // InfoDesired values for SetupGetSourceInfo
  1915. //
  1916. #define SRCINFO_PATH            1
  1917. #define SRCINFO_TAGFILE         2
  1918. #define SRCINFO_DESCRIPTION     3
  1919.  
  1920.  
  1921. WINSETUPAPI
  1922. BOOL
  1923. WINAPI
  1924. SetupInstallFileA(
  1925.     IN HINF                InfHandle,         OPTIONAL
  1926.     IN PINFCONTEXT         InfContext,        OPTIONAL
  1927.     IN PCSTR               SourceFile,        OPTIONAL
  1928.     IN PCSTR               SourcePathRoot,    OPTIONAL
  1929.     IN PCSTR               DestinationName,   OPTIONAL
  1930.     IN DWORD               CopyStyle,
  1931.     IN PSP_FILE_CALLBACK_A CopyMsgHandler,    OPTIONAL
  1932.     IN PVOID               Context            OPTIONAL
  1933.     );
  1934.  
  1935. WINSETUPAPI
  1936. BOOL
  1937. WINAPI
  1938. SetupInstallFileW(
  1939.     IN HINF                InfHandle,         OPTIONAL
  1940.     IN PINFCONTEXT         InfContext,        OPTIONAL
  1941.     IN PCWSTR              SourceFile,        OPTIONAL
  1942.     IN PCWSTR              SourcePathRoot,    OPTIONAL
  1943.     IN PCWSTR              DestinationName,   OPTIONAL
  1944.     IN DWORD               CopyStyle,
  1945.     IN PSP_FILE_CALLBACK_W CopyMsgHandler,    OPTIONAL
  1946.     IN PVOID               Context            OPTIONAL
  1947.     );
  1948.  
  1949. #ifdef UNICODE
  1950. #define SetupInstallFile SetupInstallFileW
  1951. #else
  1952. #define SetupInstallFile SetupInstallFileA
  1953. #endif
  1954.  
  1955. WINSETUPAPI
  1956. BOOL
  1957. WINAPI
  1958. SetupInstallFileExA(
  1959.     IN  HINF                InfHandle,         OPTIONAL
  1960.     IN  PINFCONTEXT         InfContext,        OPTIONAL
  1961.     IN  PCSTR               SourceFile,        OPTIONAL
  1962.     IN  PCSTR               SourcePathRoot,    OPTIONAL
  1963.     IN  PCSTR               DestinationName,   OPTIONAL
  1964.     IN  DWORD               CopyStyle,
  1965.     IN  PSP_FILE_CALLBACK_A CopyMsgHandler,    OPTIONAL
  1966.     IN  PVOID               Context,           OPTIONAL
  1967.     OUT PBOOL               FileWasInUse
  1968.     );
  1969.  
  1970. WINSETUPAPI
  1971. BOOL
  1972. WINAPI
  1973. SetupInstallFileExW(
  1974.     IN  HINF                InfHandle,         OPTIONAL
  1975.     IN  PINFCONTEXT         InfContext,        OPTIONAL
  1976.     IN  PCWSTR              SourceFile,        OPTIONAL
  1977.     IN  PCWSTR              SourcePathRoot,    OPTIONAL
  1978.     IN  PCWSTR              DestinationName,   OPTIONAL
  1979.     IN  DWORD               CopyStyle,
  1980.     IN  PSP_FILE_CALLBACK_W CopyMsgHandler,    OPTIONAL
  1981.     IN  PVOID               Context,           OPTIONAL
  1982.     OUT PBOOL               FileWasInUse
  1983.     );
  1984.  
  1985. #ifdef UNICODE
  1986. #define SetupInstallFileEx SetupInstallFileExW
  1987. #else
  1988. #define SetupInstallFileEx SetupInstallFileExA
  1989. #endif
  1990.  
  1991. //
  1992. // CopyStyle values for copy and queue-related APIs
  1993. //
  1994. #define SP_COPY_DELETESOURCE        0x0000001   // delete source file on successful copy
  1995. #define SP_COPY_REPLACEONLY         0x0000002   // copy only if target file already present
  1996. #define SP_COPY_NEWER               0x0000004   // copy only if source file newer than target
  1997. #define SP_COPY_NOOVERWRITE         0x0000008   // copy only if target doesn't exist
  1998. #define SP_COPY_NODECOMP            0x0000010   // don't decompress source file while copying
  1999. #define SP_COPY_LANGUAGEAWARE       0x0000020   // don't overwrite file of different language
  2000. #define SP_COPY_SOURCE_ABSOLUTE     0x0000040   // SourceFile is a full source path
  2001. #define SP_COPY_SOURCEPATH_ABSOLUTE 0x0000080   // SourcePathRoot is the full path
  2002. #define SP_COPY_IN_USE_NEEDS_REBOOT 0x0000100   // System needs reboot if file in use
  2003. #define SP_COPY_FORCE_IN_USE        0x0000200   // Force target-in-use behavior
  2004. #define SP_COPY_NOSKIP              0x0000400   // Skip is disallowed for this file or section
  2005. #define SP_FLAG_CABINETCONTINUATION 0x0000800   // Used with need media notification
  2006. #define SP_COPY_FORCE_NOOVERWRITE   0x0001000   // like NOOVERWRITE but no callback nofitication
  2007. #define SP_COPY_FORCE_NEWER         0x0002000   // like NEWER but no callback nofitication
  2008. #define SP_COPY_WARNIFSKIP          0x0004000   // system critical file: warn if user tries to skip
  2009. #define SP_COPY_NOBROWSE            0x0008000   // Browsing is disallowed for this file or section
  2010.  
  2011.  
  2012. WINSETUPAPI
  2013. HSPFILEQ
  2014. WINAPI
  2015. SetupOpenFileQueue(
  2016.     VOID
  2017.     );
  2018.  
  2019. WINSETUPAPI
  2020. BOOL
  2021. WINAPI
  2022. SetupCloseFileQueue(
  2023.     IN HSPFILEQ QueueHandle
  2024.     );
  2025.  
  2026.  
  2027. WINSETUPAPI
  2028. BOOL
  2029. WINAPI
  2030. SetupSetPlatformPathOverrideA(
  2031.     IN PCSTR Override   OPTIONAL
  2032.     );
  2033.  
  2034. WINSETUPAPI
  2035. BOOL
  2036. WINAPI
  2037. SetupSetPlatformPathOverrideW(
  2038.     IN PCWSTR Override  OPTIONAL
  2039.     );
  2040.  
  2041. #ifdef UNICODE
  2042. #define SetupSetPlatformPathOverride SetupSetPlatformPathOverrideW
  2043. #else
  2044. #define SetupSetPlatformPathOverride SetupSetPlatformPathOverrideA
  2045. #endif
  2046.  
  2047.  
  2048. WINSETUPAPI
  2049. BOOL
  2050. WINAPI
  2051. SetupQueueCopyA(
  2052.     IN HSPFILEQ QueueHandle,
  2053.     IN PCSTR    SourceRootPath,
  2054.     IN PCSTR    SourcePath,         OPTIONAL
  2055.     IN PCSTR    SourceFilename,
  2056.     IN PCSTR    SourceDescription,  OPTIONAL
  2057.     IN PCSTR    SourceTagfile,      OPTIONAL
  2058.     IN PCSTR    TargetDirectory,
  2059.     IN PCSTR    TargetFilename,     OPTIONAL
  2060.     IN DWORD    CopyStyle
  2061.     );
  2062.  
  2063. WINSETUPAPI
  2064. BOOL
  2065. WINAPI
  2066. SetupQueueCopyW(
  2067.     IN HSPFILEQ QueueHandle,
  2068.     IN PCWSTR   SourceRootPath,
  2069.     IN PCWSTR   SourcePath,         OPTIONAL
  2070.     IN PCWSTR   SourceFilename,
  2071.     IN PCWSTR   SourceDescription,  OPTIONAL
  2072.     IN PCWSTR   SourceTagfile,      OPTIONAL
  2073.     IN PCWSTR   TargetDirectory,
  2074.     IN PCWSTR   TargetFilename,     OPTIONAL
  2075.     IN DWORD    CopyStyle
  2076.     );
  2077.  
  2078. #ifdef UNICODE
  2079. #define SetupQueueCopy SetupQueueCopyW
  2080. #else
  2081. #define SetupQueueCopy SetupQueueCopyA
  2082. #endif
  2083.  
  2084.  
  2085. WINSETUPAPI
  2086. BOOL
  2087. WINAPI
  2088. SetupQueueDefaultCopyA(
  2089.     IN HSPFILEQ QueueHandle,
  2090.     IN HINF     InfHandle,
  2091.     IN PCSTR    SourceRootPath,
  2092.     IN PCSTR    SourceFilename,
  2093.     IN PCSTR    TargetFilename,
  2094.     IN DWORD    CopyStyle
  2095.     );
  2096.  
  2097. WINSETUPAPI
  2098. BOOL
  2099. WINAPI
  2100. SetupQueueDefaultCopyW(
  2101.     IN HSPFILEQ QueueHandle,
  2102.     IN HINF     InfHandle,
  2103.     IN PCWSTR   SourceRootPath,
  2104.     IN PCWSTR   SourceFilename,
  2105.     IN PCWSTR   TargetFilename,
  2106.     IN DWORD    CopyStyle
  2107.     );
  2108.  
  2109. #ifdef UNICODE
  2110. #define SetupQueueDefaultCopy SetupQueueDefaultCopyW
  2111. #else
  2112. #define SetupQueueDefaultCopy SetupQueueDefaultCopyA
  2113. #endif
  2114.  
  2115.  
  2116. WINSETUPAPI
  2117. BOOL
  2118. WINAPI
  2119. SetupQueueCopySectionA(
  2120.     IN HSPFILEQ QueueHandle,
  2121.     IN PCSTR    SourceRootPath,
  2122.     IN HINF     InfHandle,
  2123.     IN HINF     ListInfHandle,   OPTIONAL
  2124.     IN PCSTR    Section,
  2125.     IN DWORD    CopyStyle
  2126.     );
  2127.  
  2128. WINSETUPAPI
  2129. BOOL
  2130. WINAPI
  2131. SetupQueueCopySectionW(
  2132.     IN HSPFILEQ QueueHandle,
  2133.     IN PCWSTR   SourceRootPath,
  2134.     IN HINF     InfHandle,
  2135.     IN HINF     ListInfHandle,   OPTIONAL
  2136.     IN PCWSTR   Section,
  2137.     IN DWORD    CopyStyle
  2138.     );
  2139.  
  2140. #ifdef UNICODE
  2141. #define SetupQueueCopySection SetupQueueCopySectionW
  2142. #else
  2143. #define SetupQueueCopySection SetupQueueCopySectionA
  2144. #endif
  2145.  
  2146.  
  2147. WINSETUPAPI
  2148. BOOL
  2149. WINAPI
  2150. SetupQueueDeleteA(
  2151.     IN HSPFILEQ QueueHandle,
  2152.     IN PCSTR    PathPart1,
  2153.     IN PCSTR    PathPart2       OPTIONAL
  2154.     );
  2155.  
  2156. WINSETUPAPI
  2157. BOOL
  2158. WINAPI
  2159. SetupQueueDeleteW(
  2160.     IN HSPFILEQ QueueHandle,
  2161.     IN PCWSTR   PathPart1,
  2162.     IN PCWSTR   PathPart2       OPTIONAL
  2163.     );
  2164.  
  2165. #ifdef UNICODE
  2166. #define SetupQueueDelete SetupQueueDeleteW
  2167. #else
  2168. #define SetupQueueDelete SetupQueueDeleteA
  2169. #endif
  2170.  
  2171.  
  2172. WINSETUPAPI
  2173. BOOL
  2174. WINAPI
  2175. SetupQueueDeleteSectionA(
  2176.     IN HSPFILEQ QueueHandle,
  2177.     IN HINF     InfHandle,
  2178.     IN HINF     ListInfHandle,   OPTIONAL
  2179.     IN PCSTR    Section
  2180.     );
  2181.  
  2182. WINSETUPAPI
  2183. BOOL
  2184. WINAPI
  2185. SetupQueueDeleteSectionW(
  2186.     IN HSPFILEQ QueueHandle,
  2187.     IN HINF     InfHandle,
  2188.     IN HINF     ListInfHandle,   OPTIONAL
  2189.     IN PCWSTR   Section
  2190.     );
  2191.  
  2192. #ifdef UNICODE
  2193. #define SetupQueueDeleteSection SetupQueueDeleteSectionW
  2194. #else
  2195. #define SetupQueueDeleteSection SetupQueueDeleteSectionA
  2196. #endif
  2197.  
  2198.  
  2199. WINSETUPAPI
  2200. BOOL
  2201. WINAPI
  2202. SetupQueueRenameA(
  2203.     IN HSPFILEQ QueueHandle,
  2204.     IN PCSTR    SourcePath,
  2205.     IN PCSTR    SourceFilename, OPTIONAL
  2206.     IN PCSTR    TargetPath,     OPTIONAL
  2207.     IN PCSTR    TargetFilename
  2208.     );
  2209.  
  2210. WINSETUPAPI
  2211. BOOL
  2212. WINAPI
  2213. SetupQueueRenameW(
  2214.     IN HSPFILEQ QueueHandle,
  2215.     IN PCWSTR   SourcePath,
  2216.     IN PCWSTR   SourceFilename, OPTIONAL
  2217.     IN PCWSTR   TargetPath,     OPTIONAL
  2218.     IN PCWSTR   TargetFilename
  2219.     );
  2220.  
  2221. #ifdef UNICODE
  2222. #define SetupQueueRename SetupQueueRenameW
  2223. #else
  2224. #define SetupQueueRename SetupQueueRenameA
  2225. #endif
  2226.  
  2227.  
  2228. WINSETUPAPI
  2229. BOOL
  2230. WINAPI
  2231. SetupQueueRenameSectionA(
  2232.     IN HSPFILEQ QueueHandle,
  2233.     IN HINF     InfHandle,
  2234.     IN HINF     ListInfHandle,   OPTIONAL
  2235.     IN PCSTR    Section
  2236.     );
  2237.  
  2238. WINSETUPAPI
  2239. BOOL
  2240. WINAPI
  2241. SetupQueueRenameSectionW(
  2242.     IN HSPFILEQ QueueHandle,
  2243.     IN HINF     InfHandle,
  2244.     IN HINF     ListInfHandle,   OPTIONAL
  2245.     IN PCWSTR   Section
  2246.     );
  2247.  
  2248. #ifdef UNICODE
  2249. #define SetupQueueRenameSection SetupQueueRenameSectionW
  2250. #else
  2251. #define SetupQueueRenameSection SetupQueueRenameSectionA
  2252. #endif
  2253.  
  2254.  
  2255. WINSETUPAPI
  2256. BOOL
  2257. WINAPI
  2258. SetupCommitFileQueueA(
  2259.     IN HWND                Owner,         OPTIONAL
  2260.     IN HSPFILEQ            QueueHandle,
  2261.     IN PSP_FILE_CALLBACK_A MsgHandler,
  2262.     IN PVOID               Context
  2263.     );
  2264.  
  2265. WINSETUPAPI
  2266. BOOL
  2267. WINAPI
  2268. SetupCommitFileQueueW(
  2269.     IN HWND                Owner,         OPTIONAL
  2270.     IN HSPFILEQ            QueueHandle,
  2271.     IN PSP_FILE_CALLBACK_W MsgHandler,
  2272.     IN PVOID               Context
  2273.     );
  2274.  
  2275. #ifdef UNICODE
  2276. #define SetupCommitFileQueue SetupCommitFileQueueW
  2277. #else
  2278. #define SetupCommitFileQueue SetupCommitFileQueueA
  2279. #endif
  2280.  
  2281.  
  2282. WINSETUPAPI
  2283. BOOL
  2284. WINAPI
  2285. SetupScanFileQueueA(
  2286.     IN  HSPFILEQ            FileQueue,
  2287.     IN  DWORD               Flags,
  2288.     IN  HWND                Window,            OPTIONAL
  2289.     IN  PSP_FILE_CALLBACK_A CallbackRoutine,   OPTIONAL
  2290.     IN  PVOID               CallbackContext,   OPTIONAL
  2291.     OUT PDWORD              Result
  2292.     );
  2293.  
  2294. WINSETUPAPI
  2295. BOOL
  2296. WINAPI
  2297. SetupScanFileQueueW(
  2298.     IN  HSPFILEQ            FileQueue,
  2299.     IN  DWORD               Flags,
  2300.     IN  HWND                Window,            OPTIONAL
  2301.     IN  PSP_FILE_CALLBACK_W CallbackRoutine,   OPTIONAL
  2302.     IN  PVOID               CallbackContext,   OPTIONAL
  2303.     OUT PDWORD              Result
  2304.     );
  2305.  
  2306. #ifdef UNICODE
  2307. #define SetupScanFileQueue SetupScanFileQueueW
  2308. #else
  2309. #define SetupScanFileQueue SetupScanFileQueueA
  2310. #endif
  2311.  
  2312. //
  2313. // Define flags for SetupScanFileQueue.
  2314. //
  2315. #define SPQ_SCAN_FILE_PRESENCE  0x00000001
  2316. #define SPQ_SCAN_FILE_VALIDITY  0x00000002
  2317. #define SPQ_SCAN_USE_CALLBACK   0x00000004
  2318. #define SPQ_SCAN_INFORM_USER    0x00000010
  2319.  
  2320. //
  2321. // Define flags used with Param2 for SPFILENOTIFY_QUEUESCAN
  2322. //
  2323. #define SPQ_DELAYED_COPY        0x00000001  // file was in use; registered for delayed copy
  2324.  
  2325. //
  2326. // Cabinet APIs
  2327. //
  2328.  
  2329. WINSETUPAPI
  2330. BOOL
  2331. WINAPI
  2332. SetupIterateCabinetA(
  2333.     IN  PCSTR               CabinetFile,
  2334.     IN  DWORD               Reserved,
  2335.     IN  PSP_FILE_CALLBACK_A MsgHandler,
  2336.     IN  PVOID               Context
  2337.     );
  2338.  
  2339. WINSETUPAPI
  2340. BOOL
  2341. WINAPI
  2342. SetupIterateCabinetW(
  2343.     IN  PCWSTR              CabinetFile,
  2344.     IN  DWORD               Reserved,
  2345.     IN  PSP_FILE_CALLBACK_W MsgHandler,
  2346.     IN  PVOID               Context
  2347.     );
  2348.  
  2349. #ifdef UNICODE
  2350. #define SetupIterateCabinet SetupIterateCabinetW
  2351. #else
  2352. #define SetupIterateCabinet SetupIterateCabinetA
  2353. #endif
  2354.  
  2355.  
  2356. WINSETUPAPI
  2357. INT
  2358. WINAPI
  2359. SetupPromptReboot(
  2360.     IN HSPFILEQ FileQueue,  OPTIONAL
  2361.     IN HWND     Owner,
  2362.     IN BOOL     ScanOnly
  2363.     );
  2364.  
  2365. //
  2366. // Define flags that are returned by SetupPromptReboot
  2367. //
  2368. #define SPFILEQ_FILE_IN_USE         0x00000001
  2369. #define SPFILEQ_REBOOT_RECOMMENDED  0x00000002
  2370. #define SPFILEQ_REBOOT_IN_PROGRESS  0x00000004
  2371.  
  2372.  
  2373. WINSETUPAPI
  2374. PVOID
  2375. WINAPI
  2376. SetupInitDefaultQueueCallback(
  2377.     IN HWND OwnerWindow
  2378.     );
  2379.  
  2380. WINSETUPAPI
  2381. PVOID
  2382. WINAPI
  2383. SetupInitDefaultQueueCallbackEx(
  2384.     IN HWND  OwnerWindow,
  2385.     IN HWND  AlternateProgressWindow, OPTIONAL
  2386.     IN UINT  ProgressMessage,
  2387.     IN DWORD Reserved1,
  2388.     IN PVOID Reserved2
  2389.     );
  2390.  
  2391. WINSETUPAPI
  2392. VOID
  2393. WINAPI
  2394. SetupTermDefaultQueueCallback(
  2395.     IN PVOID Context
  2396.     );
  2397.  
  2398. WINSETUPAPI
  2399. UINT
  2400. WINAPI
  2401. SetupDefaultQueueCallbackA(
  2402.     IN PVOID Context,
  2403.     IN UINT  Notification,
  2404.     IN UINT  Param1,
  2405.     IN UINT  Param2
  2406.     );
  2407.  
  2408. WINSETUPAPI
  2409. UINT
  2410. WINAPI
  2411. SetupDefaultQueueCallbackW(
  2412.     IN PVOID Context,
  2413.     IN UINT  Notification,
  2414.     IN UINT  Param1,
  2415.     IN UINT  Param2
  2416.     );
  2417.  
  2418. #ifdef UNICODE
  2419. #define SetupDefaultQueueCallback SetupDefaultQueueCallbackW
  2420. #else
  2421. #define SetupDefaultQueueCallback SetupDefaultQueueCallbackA
  2422. #endif
  2423.  
  2424.  
  2425. //
  2426. // Flags for AddReg section lines in INF.  The corresponding value
  2427. // is <ValueType> in the AddReg line format given below:
  2428. //
  2429. // <RegRootString>,<SubKey>,<ValueName>,<ValueType>,<Value>...
  2430. //
  2431. // The low word contains basic flags concerning the general data type
  2432. // and AddReg action. The high word contains values that more specifically
  2433. // identify the data type of the registry value.  The high word is ignored
  2434. // by the 16-bit Windows 95 SETUPX APIs.
  2435. //
  2436. #define FLG_ADDREG_BINVALUETYPE     ( 0x00000001 )
  2437. #define FLG_ADDREG_NOCLOBBER        ( 0x00000002 )
  2438. #define FLG_ADDREG_DELVAL           ( 0x00000004 )
  2439. #define FLG_ADDREG_APPEND           ( 0x00000008 ) // Currently supported only
  2440.                                                    // for REG_MULTI_SZ values.
  2441.  
  2442. #define FLG_ADDREG_TYPE_MASK        ( 0xFFFF0000 | FLG_ADDREG_BINVALUETYPE )
  2443. #define FLG_ADDREG_TYPE_SZ          ( 0x00000000                           )
  2444. #define FLG_ADDREG_TYPE_MULTI_SZ    ( 0x00010000                           )
  2445. #define FLG_ADDREG_TYPE_EXPAND_SZ   ( 0x00020000                           )
  2446. #define FLG_ADDREG_TYPE_BINARY      ( 0x00000000 | FLG_ADDREG_BINVALUETYPE )
  2447. #define FLG_ADDREG_TYPE_DWORD       ( 0x00010000 | FLG_ADDREG_BINVALUETYPE )
  2448. #define FLG_ADDREG_TYPE_NONE        ( 0x00020000 | FLG_ADDREG_BINVALUETYPE )
  2449.  
  2450. //
  2451. // The INF may supply any arbitrary data type ordinal in the highword except
  2452. // for the following: REG_NONE, REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ.  If this
  2453. // technique is used, then the data is given in binary format, one byte per
  2454. // field.
  2455. //
  2456.  
  2457.  
  2458. WINSETUPAPI
  2459. BOOL
  2460. WINAPI
  2461. SetupInstallFromInfSectionA(
  2462.     IN HWND                Owner,
  2463.     IN HINF                InfHandle,
  2464.     IN PCSTR               SectionName,
  2465.     IN UINT                Flags,
  2466.     IN HKEY                RelativeKeyRoot,   OPTIONAL
  2467.     IN PCSTR               SourceRootPath,    OPTIONAL
  2468.     IN UINT                CopyFlags,
  2469.     IN PSP_FILE_CALLBACK_A MsgHandler,
  2470.     IN PVOID               Context,
  2471.     IN HDEVINFO            DeviceInfoSet,     OPTIONAL
  2472.     IN PSP_DEVINFO_DATA    DeviceInfoData     OPTIONAL
  2473.     );
  2474.  
  2475. WINSETUPAPI
  2476. BOOL
  2477. WINAPI
  2478. SetupInstallFromInfSectionW(
  2479.     IN HWND                Owner,
  2480.     IN HINF                InfHandle,
  2481.     IN PCWSTR              SectionName,
  2482.     IN UINT                Flags,
  2483.     IN HKEY                RelativeKeyRoot,   OPTIONAL
  2484.     IN PCWSTR              SourceRootPath,    OPTIONAL
  2485.     IN UINT                CopyFlags,
  2486.     IN PSP_FILE_CALLBACK_W MsgHandler,
  2487.     IN PVOID               Context,
  2488.     IN HDEVINFO            DeviceInfoSet,     OPTIONAL
  2489.     IN PSP_DEVINFO_DATA    DeviceInfoData     OPTIONAL
  2490.     );
  2491.  
  2492. #ifdef UNICODE
  2493. #define SetupInstallFromInfSection SetupInstallFromInfSectionW
  2494. #else
  2495. #define SetupInstallFromInfSection SetupInstallFromInfSectionA
  2496. #endif
  2497.  
  2498. //
  2499. // Flags for SetupInstallFromInfSection
  2500. //
  2501. #define SPINST_LOGCONFIG        0x00000001
  2502. #define SPINST_INIFILES         0x00000002
  2503. #define SPINST_REGISTRY         0x00000004
  2504. #define SPINST_INI2REG          0x00000008
  2505. #define SPINST_FILES            0x00000010
  2506. #define SPINST_ALL              0x0000001f
  2507.  
  2508.  
  2509. WINSETUPAPI
  2510. BOOL
  2511. WINAPI
  2512. SetupInstallFilesFromInfSectionA(
  2513.     IN HINF     InfHandle,
  2514.     IN HINF     LayoutInfHandle,    OPTIONAL
  2515.     IN HSPFILEQ FileQueue,
  2516.     IN PCSTR    SectionName,
  2517.     IN PCSTR    SourceRootPath,     OPTIONAL
  2518.     IN UINT     CopyFlags
  2519.     );
  2520.  
  2521. WINSETUPAPI
  2522. BOOL
  2523. WINAPI
  2524. SetupInstallFilesFromInfSectionW(
  2525.     IN HINF     InfHandle,
  2526.     IN HINF     LayoutInfHandle,    OPTIONAL
  2527.     IN HSPFILEQ FileQueue,
  2528.     IN PCWSTR   SectionName,
  2529.     IN PCWSTR   SourceRootPath,     OPTIONAL
  2530.     IN UINT     CopyFlags
  2531.     );
  2532.  
  2533. #ifdef UNICODE
  2534. #define SetupInstallFilesFromInfSection SetupInstallFilesFromInfSectionW
  2535. #else
  2536. #define SetupInstallFilesFromInfSection SetupInstallFilesFromInfSectionA
  2537. #endif
  2538.  
  2539.  
  2540. WINSETUPAPI
  2541. BOOL
  2542. WINAPI
  2543. SetupInstallServicesFromInfSectionA(
  2544.     IN HINF   InfHandle,
  2545.     IN PCSTR  SectionName,
  2546.     IN DWORD  Flags
  2547.     );
  2548.  
  2549. WINSETUPAPI
  2550. BOOL
  2551. WINAPI
  2552. SetupInstallServicesFromInfSectionW(
  2553.     IN HINF   InfHandle,
  2554.     IN PCWSTR SectionName,
  2555.     IN DWORD  Flags
  2556.     );
  2557.  
  2558. #ifdef UNICODE
  2559. #define SetupInstallServicesFromInfSection SetupInstallServicesFromInfSectionW
  2560. #else
  2561. #define SetupInstallServicesFromInfSection SetupInstallServicesFromInfSectionA
  2562. #endif
  2563.  
  2564. //
  2565. // Flags for SetupInstallServicesFromInfSection.  These flags are also used in
  2566. // the flags field of an AddService line in a device INF.  However, in that case,
  2567. // additional flags are permitted that are not used by this API.  These flags
  2568. // are marked as such below.
  2569. //
  2570. #define SPSVCINST_TAGTOFRONT    (0x00000001)  // move service's tag to front of its group order list
  2571. #define SPSVCINST_ASSOCSERVICE  (0x00000002)  // associate this service with the device being installed
  2572.                                               // (flag is ignored by SetupInstallServicesFromInfSection)
  2573.  
  2574. //
  2575. // Define handle type for Setup file log.
  2576. //
  2577. typedef PVOID HSPFILELOG;
  2578.  
  2579. WINSETUPAPI
  2580. HSPFILELOG
  2581. WINAPI
  2582. SetupInitializeFileLogA(
  2583.     IN PCSTR LogFileName,   OPTIONAL
  2584.     IN DWORD Flags
  2585.     );
  2586.  
  2587. WINSETUPAPI
  2588. HSPFILELOG
  2589. WINAPI
  2590. SetupInitializeFileLogW(
  2591.     IN PCWSTR LogFileName,  OPTIONAL
  2592.     IN DWORD  Flags
  2593.     );
  2594.  
  2595. #ifdef UNICODE
  2596. #define SetupInitializeFileLog SetupInitializeFileLogW
  2597. #else
  2598. #define SetupInitializeFileLog SetupInitializeFileLogA
  2599. #endif
  2600.  
  2601. //
  2602. // Flags for SetupInitializeFileLog
  2603. //
  2604. #define SPFILELOG_SYSTEMLOG     0x00000001  // use system log -- must be Administrator
  2605. #define SPFILELOG_FORCENEW      0x00000002  // not valid with SPFILELOG_SYSTEMLOG
  2606. #define SPFILELOG_QUERYONLY     0x00000004  // allows non-administrators to read system log
  2607.  
  2608.  
  2609. WINSETUPAPI
  2610. BOOL
  2611. WINAPI
  2612. SetupTerminateFileLog(
  2613.     IN HSPFILELOG FileLogHandle
  2614.     );
  2615.  
  2616.  
  2617. WINSETUPAPI
  2618. BOOL
  2619. WINAPI
  2620. SetupLogFileA(
  2621.     IN HSPFILELOG FileLogHandle,
  2622.     IN PCSTR      LogSectionName,   OPTIONAL
  2623.     IN PCSTR      SourceFilename,
  2624.     IN PCSTR      TargetFilename,
  2625.     IN DWORD      Checksum,         OPTIONAL
  2626.     IN PCSTR      DiskTagfile,      OPTIONAL
  2627.     IN PCSTR      DiskDescription,  OPTIONAL
  2628.     IN PCSTR      OtherInfo,        OPTIONAL
  2629.     IN DWORD      Flags
  2630.     );
  2631.  
  2632. WINSETUPAPI
  2633. BOOL
  2634. WINAPI
  2635. SetupLogFileW(
  2636.     IN HSPFILELOG FileLogHandle,
  2637.     IN PCWSTR     LogSectionName,   OPTIONAL
  2638.     IN PCWSTR     SourceFilename,
  2639.     IN PCWSTR     TargetFilename,
  2640.     IN DWORD      Checksum,         OPTIONAL
  2641.     IN PCWSTR     DiskTagfile,      OPTIONAL
  2642.     IN PCWSTR     DiskDescription,  OPTIONAL
  2643.     IN PCWSTR     OtherInfo,        OPTIONAL
  2644.     IN DWORD      Flags
  2645.     );
  2646.  
  2647. #ifdef UNICODE
  2648. #define SetupLogFile SetupLogFileW
  2649. #else
  2650. #define SetupLogFile SetupLogFileA
  2651. #endif
  2652.  
  2653. //
  2654. // Flags for SetupLogFile
  2655. //
  2656. #define SPFILELOG_OEMFILE   0x00000001
  2657.  
  2658.  
  2659. WINSETUPAPI
  2660. BOOL
  2661. WINAPI
  2662. SetupRemoveFileLogEntryA(
  2663.     IN HSPFILELOG FileLogHandle,
  2664.     IN PCSTR      LogSectionName,   OPTIONAL
  2665.     IN PCSTR      TargetFilename    OPTIONAL
  2666.     );
  2667.  
  2668. WINSETUPAPI
  2669. BOOL
  2670. WINAPI
  2671. SetupRemoveFileLogEntryW(
  2672.     IN HSPFILELOG FileLogHandle,
  2673.     IN PCWSTR     LogSectionName,   OPTIONAL
  2674.     IN PCWSTR     TargetFilename    OPTIONAL
  2675.     );
  2676.  
  2677. #ifdef UNICODE
  2678. #define SetupRemoveFileLogEntry SetupRemoveFileLogEntryW
  2679. #else
  2680. #define SetupRemoveFileLogEntry SetupRemoveFileLogEntryA
  2681. #endif
  2682.  
  2683.  
  2684. //
  2685. // Items retrievable from SetupQueryFileLog()
  2686. //
  2687. typedef enum {
  2688.     SetupFileLogSourceFilename,
  2689.     SetupFileLogChecksum,
  2690.     SetupFileLogDiskTagfile,
  2691.     SetupFileLogDiskDescription,
  2692.     SetupFileLogOtherInfo,
  2693.     SetupFileLogMax
  2694. } SetupFileLogInfo;
  2695.  
  2696. WINSETUPAPI
  2697. BOOL
  2698. WINAPI
  2699. SetupQueryFileLogA(
  2700.     IN  HSPFILELOG       FileLogHandle,
  2701.     IN  PCSTR            LogSectionName,   OPTIONAL
  2702.     IN  PCSTR            TargetFilename,
  2703.     IN  SetupFileLogInfo DesiredInfo,
  2704.     OUT PSTR             DataOut,          OPTIONAL
  2705.     IN  DWORD            ReturnBufferSize,
  2706.     OUT PDWORD           RequiredSize      OPTIONAL
  2707.     );
  2708.  
  2709. WINSETUPAPI
  2710. BOOL
  2711. WINAPI
  2712. SetupQueryFileLogW(
  2713.     IN  HSPFILELOG       FileLogHandle,
  2714.     IN  PCWSTR           LogSectionName,   OPTIONAL
  2715.     IN  PCWSTR           TargetFilename,
  2716.     IN  SetupFileLogInfo DesiredInfo,
  2717.     OUT PWSTR            DataOut,          OPTIONAL
  2718.     IN  DWORD            ReturnBufferSize,
  2719.     OUT PDWORD           RequiredSize      OPTIONAL
  2720.     );
  2721.  
  2722. #ifdef UNICODE
  2723. #define SetupQueryFileLog SetupQueryFileLogW
  2724. #else
  2725. #define SetupQueryFileLog SetupQueryFileLogA
  2726. #endif
  2727.  
  2728.  
  2729. //
  2730. // Device Installer APIs
  2731. //
  2732.  
  2733. WINSETUPAPI
  2734. HDEVINFO
  2735. WINAPI
  2736. SetupDiCreateDeviceInfoList(
  2737.     IN LPGUID ClassGuid, OPTIONAL
  2738.     IN HWND   hwndParent OPTIONAL
  2739.     );
  2740.  
  2741.  
  2742. WINSETUPAPI
  2743. BOOL
  2744. WINAPI
  2745. SetupDiGetDeviceInfoListClass(
  2746.     IN  HDEVINFO DeviceInfoSet,
  2747.     OUT LPGUID   ClassGuid
  2748.     );
  2749.  
  2750.  
  2751. //
  2752. // Flags for SetupDiCreateDeviceInfo
  2753. //
  2754. #define DICD_GENERATE_ID        0x00000001
  2755. #define DICD_INHERIT_CLASSDRVS  0x00000002
  2756.  
  2757. WINSETUPAPI
  2758. BOOL
  2759. WINAPI
  2760. SetupDiCreateDeviceInfoA(
  2761.     IN  HDEVINFO         DeviceInfoSet,
  2762.     IN  PCSTR            DeviceName,
  2763.     IN  LPGUID           ClassGuid,
  2764.     IN  PCSTR            DeviceDescription, OPTIONAL
  2765.     IN  HWND             hwndParent,        OPTIONAL
  2766.     IN  DWORD            CreationFlags,
  2767.     OUT PSP_DEVINFO_DATA DeviceInfoData     OPTIONAL
  2768.     );
  2769.  
  2770. WINSETUPAPI
  2771. BOOL
  2772. WINAPI
  2773. SetupDiCreateDeviceInfoW(
  2774.     IN  HDEVINFO         DeviceInfoSet,
  2775.     IN  PCWSTR           DeviceName,
  2776.     IN  LPGUID           ClassGuid,
  2777.     IN  PCWSTR           DeviceDescription, OPTIONAL
  2778.     IN  HWND             hwndParent,        OPTIONAL
  2779.     IN  DWORD            CreationFlags,
  2780.     OUT PSP_DEVINFO_DATA DeviceInfoData     OPTIONAL
  2781.     );
  2782.  
  2783. #ifdef UNICODE
  2784. #define SetupDiCreateDeviceInfo SetupDiCreateDeviceInfoW
  2785. #else
  2786. #define SetupDiCreateDeviceInfo SetupDiCreateDeviceInfoA
  2787. #endif
  2788.  
  2789.  
  2790. //
  2791. // Flags for SetupDiOpenDeviceInfo
  2792. //
  2793. #define DIOD_INHERIT_CLASSDRVS  0x00000002
  2794. #define DIOD_CANCEL_REMOVE      0x00000004
  2795.  
  2796. WINSETUPAPI
  2797. BOOL
  2798. WINAPI
  2799. SetupDiOpenDeviceInfoA(
  2800.     IN  HDEVINFO         DeviceInfoSet,
  2801.     IN  PCSTR            DeviceInstanceId,
  2802.     IN  HWND             hwndParent,       OPTIONAL
  2803.     IN  DWORD            OpenFlags,
  2804.     OUT PSP_DEVINFO_DATA DeviceInfoData    OPTIONAL
  2805.     );
  2806.  
  2807. WINSETUPAPI
  2808. BOOL
  2809. WINAPI
  2810. SetupDiOpenDeviceInfoW(
  2811.     IN  HDEVINFO         DeviceInfoSet,
  2812.     IN  PCWSTR           DeviceInstanceId,
  2813.     IN  HWND             hwndParent,       OPTIONAL
  2814.     IN  DWORD            OpenFlags,
  2815.     OUT PSP_DEVINFO_DATA DeviceInfoData    OPTIONAL
  2816.     );
  2817.  
  2818. #ifdef UNICODE
  2819. #define SetupDiOpenDeviceInfo SetupDiOpenDeviceInfoW
  2820. #else
  2821. #define SetupDiOpenDeviceInfo SetupDiOpenDeviceInfoA
  2822. #endif
  2823.  
  2824.  
  2825. WINSETUPAPI
  2826. BOOL
  2827. WINAPI
  2828. SetupDiGetDeviceInstanceIdA(
  2829.     IN  HDEVINFO         DeviceInfoSet,
  2830.     IN  PSP_DEVINFO_DATA DeviceInfoData,
  2831.     OUT PSTR             DeviceInstanceId,
  2832.     IN  DWORD            DeviceInstanceIdSize,
  2833.     OUT PDWORD           RequiredSize          OPTIONAL
  2834.     );
  2835.  
  2836. WINSETUPAPI
  2837. BOOL
  2838. WINAPI
  2839. SetupDiGetDeviceInstanceIdW(
  2840.     IN  HDEVINFO         DeviceInfoSet,
  2841.     IN  PSP_DEVINFO_DATA DeviceInfoData,
  2842.     OUT PWSTR            DeviceInstanceId,
  2843.     IN  DWORD            DeviceInstanceIdSize,
  2844.     OUT PDWORD           RequiredSize          OPTIONAL
  2845.     );
  2846.  
  2847. #ifdef UNICODE
  2848. #define SetupDiGetDeviceInstanceId SetupDiGetDeviceInstanceIdW
  2849. #else
  2850. #define SetupDiGetDeviceInstanceId SetupDiGetDeviceInstanceIdA
  2851. #endif
  2852.  
  2853.  
  2854. WINSETUPAPI
  2855. BOOL
  2856. WINAPI
  2857. SetupDiDeleteDeviceInfo(
  2858.     IN HDEVINFO         DeviceInfoSet,
  2859.     IN PSP_DEVINFO_DATA DeviceInfoData
  2860.     );
  2861.  
  2862.  
  2863. WINSETUPAPI
  2864. BOOL
  2865. WINAPI
  2866. SetupDiEnumDeviceInfo(
  2867.     IN  HDEVINFO         DeviceInfoSet,
  2868.     IN  DWORD            MemberIndex,
  2869.     OUT PSP_DEVINFO_DATA DeviceInfoData
  2870.     );
  2871.  
  2872.  
  2873. WINSETUPAPI
  2874. BOOL
  2875. WINAPI
  2876. SetupDiDestroyDeviceInfoList(
  2877.     IN HDEVINFO DeviceInfoSet
  2878.     );
  2879.  
  2880.  
  2881. //
  2882. // Flags for SetupDiRegisterDeviceInfo
  2883. //
  2884. #define SPRDI_FIND_DUPS        0x00000001
  2885.  
  2886. WINSETUPAPI
  2887. BOOL
  2888. WINAPI
  2889. SetupDiRegisterDeviceInfo(
  2890.     IN     HDEVINFO           DeviceInfoSet,
  2891.     IN OUT PSP_DEVINFO_DATA   DeviceInfoData,
  2892.     IN     DWORD              Flags,
  2893.     IN     PSP_DETSIG_CMPPROC CompareProc,      OPTIONAL
  2894.     IN     PVOID              CompareContext,   OPTIONAL
  2895.     OUT    PSP_DEVINFO_DATA   DupDeviceInfoData OPTIONAL
  2896.     );
  2897.  
  2898.  
  2899. //
  2900. // Ordinal values distinguishing between class drivers and
  2901. // device drivers.
  2902. // (Passed in 'DriverType' parameter of driver information list APIs)
  2903. //
  2904. #define SPDIT_NODRIVER           0x00000000
  2905. #define SPDIT_CLASSDRIVER        0x00000001
  2906. #define SPDIT_COMPATDRIVER       0x00000002
  2907.  
  2908. WINSETUPAPI
  2909. BOOL
  2910. WINAPI
  2911. SetupDiBuildDriverInfoList(
  2912.     IN     HDEVINFO         DeviceInfoSet,
  2913.     IN OUT PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL
  2914.     IN     DWORD            DriverType
  2915.     );
  2916.  
  2917.  
  2918. WINSETUPAPI
  2919. BOOL
  2920. WINAPI
  2921. SetupDiCancelDriverInfoSearch(
  2922.     IN HDEVINFO DeviceInfoSet
  2923.     );
  2924.  
  2925.  
  2926. WINSETUPAPI
  2927. BOOL
  2928. WINAPI
  2929. SetupDiEnumDriverInfoA(
  2930.     IN  HDEVINFO           DeviceInfoSet,
  2931.     IN  PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
  2932.     IN  DWORD              DriverType,
  2933.     IN  DWORD              MemberIndex,
  2934.     OUT PSP_DRVINFO_DATA_A DriverInfoData
  2935.     );
  2936.  
  2937. WINSETUPAPI
  2938. BOOL
  2939. WINAPI
  2940. SetupDiEnumDriverInfoW(
  2941.     IN  HDEVINFO           DeviceInfoSet,
  2942.     IN  PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
  2943.     IN  DWORD              DriverType,
  2944.     IN  DWORD              MemberIndex,
  2945.     OUT PSP_DRVINFO_DATA_W DriverInfoData
  2946.     );
  2947.  
  2948. #ifdef UNICODE
  2949. #define SetupDiEnumDriverInfo SetupDiEnumDriverInfoW
  2950. #else
  2951. #define SetupDiEnumDriverInfo SetupDiEnumDriverInfoA
  2952. #endif
  2953.  
  2954.  
  2955. WINSETUPAPI
  2956. BOOL
  2957. WINAPI
  2958. SetupDiGetSelectedDriverA(
  2959.     IN  HDEVINFO           DeviceInfoSet,
  2960.     IN  PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
  2961.     OUT PSP_DRVINFO_DATA_A DriverInfoData
  2962.     );
  2963.  
  2964. WINSETUPAPI
  2965. BOOL
  2966. WINAPI
  2967. SetupDiGetSelectedDriverW(
  2968.     IN  HDEVINFO           DeviceInfoSet,
  2969.     IN  PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
  2970.     OUT PSP_DRVINFO_DATA_W DriverInfoData
  2971.     );
  2972.  
  2973. #ifdef UNICODE
  2974. #define SetupDiGetSelectedDriver SetupDiGetSelectedDriverW
  2975. #else
  2976. #define SetupDiGetSelectedDriver SetupDiGetSelectedDriverA
  2977. #endif
  2978.  
  2979.  
  2980. WINSETUPAPI
  2981. BOOL
  2982. WINAPI
  2983. SetupDiSetSelectedDriverA(
  2984.     IN     HDEVINFO           DeviceInfoSet,
  2985.     IN     PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
  2986.     IN OUT PSP_DRVINFO_DATA_A DriverInfoData  OPTIONAL
  2987.     );
  2988.  
  2989. WINSETUPAPI
  2990. BOOL
  2991. WINAPI
  2992. SetupDiSetSelectedDriverW(
  2993.     IN     HDEVINFO           DeviceInfoSet,
  2994.     IN     PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
  2995.     IN OUT PSP_DRVINFO_DATA_W DriverInfoData  OPTIONAL
  2996.     );
  2997.  
  2998. #ifdef UNICODE
  2999. #define SetupDiSetSelectedDriver SetupDiSetSelectedDriverW
  3000. #else
  3001. #define SetupDiSetSelectedDriver SetupDiSetSelectedDriverA
  3002. #endif
  3003.  
  3004.  
  3005. WINSETUPAPI
  3006. BOOL
  3007. WINAPI
  3008. SetupDiGetDriverInfoDetailA(
  3009.     IN  HDEVINFO                  DeviceInfoSet,
  3010.     IN  PSP_DEVINFO_DATA          DeviceInfoData,           OPTIONAL
  3011.     IN  PSP_DRVINFO_DATA_A        DriverInfoData,
  3012.     OUT PSP_DRVINFO_DETAIL_DATA_A DriverInfoDetailData,     OPTIONAL
  3013.     IN  DWORD                     DriverInfoDetailDataSize,
  3014.     OUT PDWORD                    RequiredSize              OPTIONAL
  3015.     );
  3016.  
  3017. WINSETUPAPI
  3018. BOOL
  3019. WINAPI
  3020. SetupDiGetDriverInfoDetailW(
  3021.     IN  HDEVINFO                  DeviceInfoSet,
  3022.     IN  PSP_DEVINFO_DATA          DeviceInfoData,           OPTIONAL
  3023.     IN  PSP_DRVINFO_DATA_W        DriverInfoData,
  3024.     OUT PSP_DRVINFO_DETAIL_DATA_W DriverInfoDetailData,     OPTIONAL
  3025.     IN  DWORD                     DriverInfoDetailDataSize,
  3026.     OUT PDWORD                    RequiredSize              OPTIONAL
  3027.     );
  3028.  
  3029. #ifdef UNICODE
  3030. #define SetupDiGetDriverInfoDetail SetupDiGetDriverInfoDetailW
  3031. #else
  3032. #define SetupDiGetDriverInfoDetail SetupDiGetDriverInfoDetailA
  3033. #endif
  3034.  
  3035.  
  3036. WINSETUPAPI
  3037. BOOL
  3038. WINAPI
  3039. SetupDiDestroyDriverInfoList(
  3040.     IN HDEVINFO         DeviceInfoSet,
  3041.     IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL
  3042.     IN DWORD            DriverType
  3043.     );
  3044.  
  3045.  
  3046. //
  3047. // Flags controlling what is included in the device information set built
  3048. // by SetupDiGetClassDevs
  3049. //
  3050. // #define DIGCF_DEFAULT        0x00000001  // defined but not implemented by setupx
  3051. #define DIGCF_PRESENT           0x00000002
  3052. #define DIGCF_ALLCLASSES        0x00000004
  3053. #define DIGCF_PROFILE           0x00000008
  3054.  
  3055. WINSETUPAPI
  3056. HDEVINFO
  3057. WINAPI
  3058. SetupDiGetClassDevsA(
  3059.     IN LPGUID ClassGuid,  OPTIONAL
  3060.     IN PCSTR  Enumerator, OPTIONAL
  3061.     IN HWND   hwndParent, OPTIONAL
  3062.     IN DWORD  Flags
  3063.     );
  3064.  
  3065. WINSETUPAPI
  3066. HDEVINFO
  3067. WINAPI
  3068. SetupDiGetClassDevsW(
  3069.     IN LPGUID ClassGuid,  OPTIONAL
  3070.     IN PCWSTR Enumerator, OPTIONAL
  3071.     IN HWND   hwndParent, OPTIONAL
  3072.     IN DWORD  Flags
  3073.     );
  3074.  
  3075. #ifdef UNICODE
  3076. #define SetupDiGetClassDevs SetupDiGetClassDevsW
  3077. #else
  3078. #define SetupDiGetClassDevs SetupDiGetClassDevsA
  3079. #endif
  3080.  
  3081.  
  3082. WINSETUPAPI
  3083. BOOL
  3084. WINAPI
  3085. SetupDiGetINFClassA(
  3086.     IN  PCSTR  InfName,
  3087.     OUT LPGUID ClassGuid,
  3088.     OUT PSTR   ClassName,
  3089.     IN  DWORD  ClassNameSize,
  3090.     OUT PDWORD RequiredSize   OPTIONAL
  3091.     );
  3092.  
  3093. WINSETUPAPI
  3094. BOOL
  3095. WINAPI
  3096. SetupDiGetINFClassW(
  3097.     IN  PCWSTR InfName,
  3098.     OUT LPGUID ClassGuid,
  3099.     OUT PWSTR  ClassName,
  3100.     IN  DWORD  ClassNameSize,
  3101.     OUT PDWORD RequiredSize   OPTIONAL
  3102.     );
  3103.  
  3104. #ifdef UNICODE
  3105. #define SetupDiGetINFClass SetupDiGetINFClassW
  3106. #else
  3107. #define SetupDiGetINFClass SetupDiGetINFClassA
  3108. #endif
  3109.  
  3110.  
  3111. //
  3112. // Flags controlling exclusion from the class information list built
  3113. // by SetupDiBuildClassInfoList
  3114. //
  3115. #define DIBCI_NOINSTALLCLASS   0x00000001
  3116. #define DIBCI_NODISPLAYCLASS   0x00000002
  3117.  
  3118. WINSETUPAPI
  3119. BOOL
  3120. WINAPI
  3121. SetupDiBuildClassInfoList(
  3122.     IN  DWORD  Flags,
  3123.     OUT LPGUID ClassGuidList,
  3124.     IN  DWORD  ClassGuidListSize,
  3125.     OUT PDWORD RequiredSize
  3126.     );
  3127.  
  3128.  
  3129. WINSETUPAPI
  3130. BOOL
  3131. WINAPI
  3132. SetupDiGetClassDescriptionA(
  3133.     IN  LPGUID ClassGuid,
  3134.     OUT PSTR   ClassDescription,
  3135.     IN  DWORD  ClassDescriptionSize,
  3136.     OUT PDWORD RequiredSize          OPTIONAL
  3137.     );
  3138.  
  3139. WINSETUPAPI
  3140. BOOL
  3141. WINAPI
  3142. SetupDiGetClassDescriptionW(
  3143.     IN  LPGUID ClassGuid,
  3144.     OUT PWSTR  ClassDescription,
  3145.     IN  DWORD  ClassDescriptionSize,
  3146.     OUT PDWORD RequiredSize          OPTIONAL
  3147.     );
  3148.  
  3149. #ifdef UNICODE
  3150. #define SetupDiGetClassDescription SetupDiGetClassDescriptionW
  3151. #else
  3152. #define SetupDiGetClassDescription SetupDiGetClassDescriptionA
  3153. #endif
  3154.  
  3155.  
  3156. WINSETUPAPI
  3157. BOOL
  3158. WINAPI
  3159. SetupDiCallClassInstaller(
  3160.     IN DI_FUNCTION      InstallFunction,
  3161.     IN HDEVINFO         DeviceInfoSet,
  3162.     IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
  3163.     );
  3164.  
  3165.  
  3166. //
  3167. // Default install handler for DIF_SELECTDEVICE
  3168. //
  3169. WINSETUPAPI
  3170. BOOL
  3171. WINAPI
  3172. SetupDiSelectDevice(
  3173.     IN     HDEVINFO         DeviceInfoSet,
  3174.     IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
  3175.     );
  3176.  
  3177.  
  3178. //
  3179. // Default install handler for DIF_INSTALLDEVICE
  3180. //
  3181. WINSETUPAPI
  3182. BOOL
  3183. WINAPI
  3184. SetupDiInstallDevice(
  3185.     IN     HDEVINFO         DeviceInfoSet,
  3186.     IN OUT PSP_DEVINFO_DATA DeviceInfoData
  3187.     );
  3188.  
  3189.  
  3190. //
  3191. // Default install handler for DIF_INSTALLDEVICEFILES
  3192. //
  3193. WINSETUPAPI
  3194. BOOL
  3195. WINAPI
  3196. SetupDiInstallDriverFiles(
  3197.     IN HDEVINFO         DeviceInfoSet,
  3198.     IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
  3199.     );
  3200.  
  3201.  
  3202. //
  3203. // Default install handler for DIF_REMOVE
  3204. //
  3205. WINSETUPAPI
  3206. BOOL
  3207. WINAPI
  3208. SetupDiRemoveDevice(
  3209.     IN     HDEVINFO         DeviceInfoSet,
  3210.     IN OUT PSP_DEVINFO_DATA DeviceInfoData
  3211.     );
  3212.  
  3213.  
  3214. //
  3215. // Default install handler for DIF_MOVEDEVICE
  3216. //
  3217. WINSETUPAPI
  3218. BOOL
  3219. WINAPI
  3220. SetupDiMoveDuplicateDevice(
  3221.     IN HDEVINFO         DeviceInfoSet,
  3222.     IN PSP_DEVINFO_DATA DestinationDeviceInfoData
  3223.     );
  3224.  
  3225.  
  3226. //
  3227. // Default install handler for DIF_PROPERTYCHANGE
  3228. //
  3229. WINSETUPAPI
  3230. BOOL
  3231. WINAPI
  3232. SetupDiChangeState(
  3233.     IN     HDEVINFO         DeviceInfoSet,
  3234.     IN OUT PSP_DEVINFO_DATA DeviceInfoData
  3235.     );
  3236.  
  3237.  
  3238. WINSETUPAPI
  3239. BOOL
  3240. WINAPI
  3241. SetupDiInstallClassA(
  3242.     IN HWND     hwndParent,  OPTIONAL
  3243.     IN PCSTR    InfFileName,
  3244.     IN DWORD    Flags,
  3245.     IN HSPFILEQ FileQueue    OPTIONAL
  3246.     );
  3247.  
  3248. WINSETUPAPI
  3249. BOOL
  3250. WINAPI
  3251. SetupDiInstallClassW(
  3252.     IN HWND     hwndParent,  OPTIONAL
  3253.     IN PCWSTR   InfFileName,
  3254.     IN DWORD    Flags,
  3255.     IN HSPFILEQ FileQueue    OPTIONAL
  3256.     );
  3257.  
  3258. #ifdef UNICODE
  3259. #define SetupDiInstallClass SetupDiInstallClassW
  3260. #else
  3261. #define SetupDiInstallClass SetupDiInstallClassA
  3262. #endif
  3263.  
  3264.  
  3265. WINSETUPAPI
  3266. HKEY
  3267. WINAPI
  3268. SetupDiOpenClassRegKey(
  3269.     IN LPGUID ClassGuid, OPTIONAL
  3270.     IN REGSAM samDesired
  3271.     );
  3272.  
  3273.  
  3274. //
  3275. // KeyType values for SetupDiCreateDevRegKey, SetupDiOpenDevRegKey, and
  3276. // SetupDiDeleteDevRegKey.
  3277. //
  3278. #define DIREG_DEV       0x00000001          // Open/Create/Delete device key
  3279. #define DIREG_DRV       0x00000002          // Open/Create/Delete driver key
  3280. #define DIREG_BOTH      0x00000004          // Delete both driver and Device key
  3281.  
  3282. WINSETUPAPI
  3283. HKEY
  3284. WINAPI
  3285. SetupDiCreateDevRegKeyA(
  3286.     IN HDEVINFO         DeviceInfoSet,
  3287.     IN PSP_DEVINFO_DATA DeviceInfoData,
  3288.     IN DWORD            Scope,
  3289.     IN DWORD            HwProfile,
  3290.     IN DWORD            KeyType,
  3291.     IN HINF             InfHandle,      OPTIONAL
  3292.     IN PCSTR            InfSectionName  OPTIONAL
  3293.     );
  3294.  
  3295. WINSETUPAPI
  3296. HKEY
  3297. WINAPI
  3298. SetupDiCreateDevRegKeyW(
  3299.     IN HDEVINFO         DeviceInfoSet,
  3300.     IN PSP_DEVINFO_DATA DeviceInfoData,
  3301.     IN DWORD            Scope,
  3302.     IN DWORD            HwProfile,
  3303.     IN DWORD            KeyType,
  3304.     IN HINF             InfHandle,      OPTIONAL
  3305.     IN PCWSTR           InfSectionName  OPTIONAL
  3306.     );
  3307.  
  3308. #ifdef UNICODE
  3309. #define SetupDiCreateDevRegKey SetupDiCreateDevRegKeyW
  3310. #else
  3311. #define SetupDiCreateDevRegKey SetupDiCreateDevRegKeyA
  3312. #endif
  3313.  
  3314.  
  3315. WINSETUPAPI
  3316. HKEY
  3317. WINAPI
  3318. SetupDiOpenDevRegKey(
  3319.     IN HDEVINFO         DeviceInfoSet,
  3320.     IN PSP_DEVINFO_DATA DeviceInfoData,
  3321.     IN DWORD            Scope,
  3322.     IN DWORD            HwProfile,
  3323.     IN DWORD            KeyType,
  3324.     IN REGSAM           samDesired
  3325.     );
  3326.  
  3327.  
  3328. WINSETUPAPI
  3329. BOOL
  3330. WINAPI
  3331. SetupDiDeleteDevRegKey(
  3332.     IN HDEVINFO         DeviceInfoSet,
  3333.     IN PSP_DEVINFO_DATA DeviceInfoData,
  3334.     IN DWORD            Scope,
  3335.     IN DWORD            HwProfile,
  3336.     IN DWORD            KeyType
  3337.     );
  3338.  
  3339.  
  3340. WINSETUPAPI
  3341. BOOL
  3342. WINAPI
  3343. SetupDiGetHwProfileList(
  3344.     OUT PDWORD HwProfileList,
  3345.     IN  DWORD  HwProfileListSize,
  3346.     OUT PDWORD RequiredSize,
  3347.     OUT PDWORD CurrentlyActiveIndex OPTIONAL
  3348.     );
  3349.  
  3350.  
  3351. //
  3352. // Device registry property codes
  3353. // (Codes marked as read-only (R) may only be used for
  3354. // SetupDiGetDeviceRegistryProperty)
  3355. //
  3356. // These values should cover the same set of registry properties
  3357. // as defined by the CM_DRP codes in cfgmgr32.h.
  3358. //
  3359. #define SPDRP_DEVICEDESC           (0x00000000)  // DeviceDesc (R/W)
  3360. #define SPDRP_HARDWAREID           (0x00000001)  // HardwareID (R/W)
  3361. #define SPDRP_COMPATIBLEIDS        (0x00000002)  // CompatibleIDs (R/W)
  3362. #define SPDRP_NTDEVICEPATHS        (0x00000003)  // NtDevicePaths (R)
  3363. #define SPDRP_SERVICE              (0x00000004)  // Service (R/W)
  3364. #define SPDRP_CONFIGURATION        (0x00000005)  // Configuration (R)
  3365. #define SPDRP_CONFIGURATIONVECTOR  (0x00000006)  // ConfigurationVector (R)
  3366. #define SPDRP_CLASS                (0x00000007)  // Class (R--tied to ClassGUID)
  3367. #define SPDRP_CLASSGUID            (0x00000008)  // ClassGUID (R/W)
  3368. #define SPDRP_DRIVER               (0x00000009)  // Driver (R/W)
  3369. #define SPDRP_CONFIGFLAGS          (0x0000000A)  // ConfigFlags (R/W)
  3370. #define SPDRP_MFG                  (0x0000000B)  // Mfg (R/W)
  3371. #define SPDRP_FRIENDLYNAME         (0x0000000C)  // FriendlyName (R/W)
  3372. #define SPDRP_MAXIMUM_PROPERTY     (0x0000000D)  // Upper bound on ordinals
  3373.  
  3374. WINSETUPAPI
  3375. BOOL
  3376. WINAPI
  3377. SetupDiGetDeviceRegistryPropertyA(
  3378.     IN  HDEVINFO         DeviceInfoSet,
  3379.     IN  PSP_DEVINFO_DATA DeviceInfoData,
  3380.     IN  DWORD            Property,
  3381.     OUT PDWORD           PropertyRegDataType, OPTIONAL
  3382.     OUT PBYTE            PropertyBuffer,
  3383.     IN  DWORD            PropertyBufferSize,
  3384.     OUT PDWORD           RequiredSize         OPTIONAL
  3385.     );
  3386.  
  3387. WINSETUPAPI
  3388. BOOL
  3389. WINAPI
  3390. SetupDiGetDeviceRegistryPropertyW(
  3391.     IN  HDEVINFO         DeviceInfoSet,
  3392.     IN  PSP_DEVINFO_DATA DeviceInfoData,
  3393.     IN  DWORD            Property,
  3394.     OUT PDWORD           PropertyRegDataType, OPTIONAL
  3395.     OUT PBYTE            PropertyBuffer,
  3396.     IN  DWORD            PropertyBufferSize,
  3397.     OUT PDWORD           RequiredSize         OPTIONAL
  3398.     );
  3399.  
  3400. #ifdef UNICODE
  3401. #define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyW
  3402. #else
  3403. #define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyA
  3404. #endif
  3405.  
  3406.  
  3407. WINSETUPAPI
  3408. BOOL
  3409. WINAPI
  3410. SetupDiSetDeviceRegistryPropertyA(
  3411.     IN     HDEVINFO         DeviceInfoSet,
  3412.     IN OUT PSP_DEVINFO_DATA DeviceInfoData,
  3413.     IN     DWORD            Property,
  3414.     IN     CONST BYTE*      PropertyBuffer,
  3415.     IN     DWORD            PropertyBufferSize
  3416.     );
  3417.  
  3418. WINSETUPAPI
  3419. BOOL
  3420. WINAPI
  3421. SetupDiSetDeviceRegistryPropertyW(
  3422.     IN     HDEVINFO         DeviceInfoSet,
  3423.     IN OUT PSP_DEVINFO_DATA DeviceInfoData,
  3424.     IN     DWORD            Property,
  3425.     IN     CONST BYTE*      PropertyBuffer,
  3426.     IN     DWORD            PropertyBufferSize
  3427.     );
  3428.  
  3429. #ifdef UNICODE
  3430. #define SetupDiSetDeviceRegistryProperty SetupDiSetDeviceRegistryPropertyW
  3431. #else
  3432. #define SetupDiSetDeviceRegistryProperty SetupDiSetDeviceRegistryPropertyA
  3433. #endif
  3434.  
  3435.  
  3436. WINSETUPAPI
  3437. BOOL
  3438. WINAPI
  3439. SetupDiGetDeviceInstallParamsA(
  3440.     IN  HDEVINFO                DeviceInfoSet,
  3441.     IN  PSP_DEVINFO_DATA        DeviceInfoData,          OPTIONAL
  3442.     OUT PSP_DEVINSTALL_PARAMS_A DeviceInstallParams
  3443.     );
  3444.  
  3445. WINSETUPAPI
  3446. BOOL
  3447. WINAPI
  3448. SetupDiGetDeviceInstallParamsW(
  3449.     IN  HDEVINFO                DeviceInfoSet,
  3450.     IN  PSP_DEVINFO_DATA        DeviceInfoData,          OPTIONAL
  3451.     OUT PSP_DEVINSTALL_PARAMS_W DeviceInstallParams
  3452.     );
  3453.  
  3454. #ifdef UNICODE
  3455. #define SetupDiGetDeviceInstallParams SetupDiGetDeviceInstallParamsW
  3456. #else
  3457. #define SetupDiGetDeviceInstallParams SetupDiGetDeviceInstallParamsA
  3458. #endif
  3459.  
  3460.  
  3461. WINSETUPAPI
  3462. BOOL
  3463. WINAPI
  3464. SetupDiGetClassInstallParamsA(
  3465.     IN  HDEVINFO                DeviceInfoSet,
  3466.     IN  PSP_DEVINFO_DATA        DeviceInfoData,         OPTIONAL
  3467.     OUT PSP_CLASSINSTALL_HEADER ClassInstallParams,     OPTIONAL
  3468.     IN  DWORD                   ClassInstallParamsSize,
  3469.     OUT PDWORD                  RequiredSize            OPTIONAL
  3470.     );
  3471.  
  3472. WINSETUPAPI
  3473. BOOL
  3474. WINAPI
  3475. SetupDiGetClassInstallParamsW(
  3476.     IN  HDEVINFO                DeviceInfoSet,
  3477.     IN  PSP_DEVINFO_DATA        DeviceInfoData,         OPTIONAL
  3478.     OUT PSP_CLASSINSTALL_HEADER ClassInstallParams,     OPTIONAL
  3479.     IN  DWORD                   ClassInstallParamsSize,
  3480.     OUT PDWORD                  RequiredSize            OPTIONAL
  3481.     );
  3482.  
  3483. #ifdef UNICODE
  3484. #define SetupDiGetClassInstallParams SetupDiGetClassInstallParamsW
  3485. #else
  3486. #define SetupDiGetClassInstallParams SetupDiGetClassInstallParamsA
  3487. #endif
  3488.  
  3489.  
  3490. WINSETUPAPI
  3491. BOOL
  3492. WINAPI
  3493. SetupDiSetDeviceInstallParamsA(
  3494.     IN HDEVINFO                DeviceInfoSet,
  3495.     IN PSP_DEVINFO_DATA        DeviceInfoData,     OPTIONAL
  3496.     IN PSP_DEVINSTALL_PARAMS_A DeviceInstallParams
  3497.     );
  3498.  
  3499. WINSETUPAPI
  3500. BOOL
  3501. WINAPI
  3502. SetupDiSetDeviceInstallParamsW(
  3503.     IN HDEVINFO                DeviceInfoSet,
  3504.     IN PSP_DEVINFO_DATA        DeviceInfoData,     OPTIONAL
  3505.     IN PSP_DEVINSTALL_PARAMS_W DeviceInstallParams
  3506.     );
  3507.  
  3508. #ifdef UNICODE
  3509. #define SetupDiSetDeviceInstallParams SetupDiSetDeviceInstallParamsW
  3510. #else
  3511. #define SetupDiSetDeviceInstallParams SetupDiSetDeviceInstallParamsA
  3512. #endif
  3513.  
  3514.  
  3515. WINSETUPAPI
  3516. BOOL
  3517. WINAPI
  3518. SetupDiSetClassInstallParamsA(
  3519.     IN HDEVINFO                DeviceInfoSet,
  3520.     IN PSP_DEVINFO_DATA        DeviceInfoData,        OPTIONAL
  3521.     IN PSP_CLASSINSTALL_HEADER ClassInstallParams,    OPTIONAL
  3522.     IN DWORD                   ClassInstallParamsSize
  3523.     );
  3524.  
  3525. WINSETUPAPI
  3526. BOOL
  3527. WINAPI
  3528. SetupDiSetClassInstallParamsW(
  3529.     IN HDEVINFO                DeviceInfoSet,
  3530.     IN PSP_DEVINFO_DATA        DeviceInfoData,        OPTIONAL
  3531.     IN PSP_CLASSINSTALL_HEADER ClassInstallParams,    OPTIONAL
  3532.     IN DWORD                   ClassInstallParamsSize
  3533.     );
  3534.  
  3535. #ifdef UNICODE
  3536. #define SetupDiSetClassInstallParams SetupDiSetClassInstallParamsW
  3537. #else
  3538. #define SetupDiSetClassInstallParams SetupDiSetClassInstallParamsA
  3539. #endif
  3540.  
  3541.  
  3542. WINSETUPAPI
  3543. BOOL
  3544. WINAPI
  3545. SetupDiGetDriverInstallParamsA(
  3546.     IN  HDEVINFO              DeviceInfoSet,
  3547.     IN  PSP_DEVINFO_DATA      DeviceInfoData,     OPTIONAL
  3548.     IN  PSP_DRVINFO_DATA_A    DriverInfoData,
  3549.     OUT PSP_DRVINSTALL_PARAMS DriverInstallParams
  3550.     );
  3551.  
  3552. WINSETUPAPI
  3553. BOOL
  3554. WINAPI
  3555. SetupDiGetDriverInstallParamsW(
  3556.     IN  HDEVINFO              DeviceInfoSet,
  3557.     IN  PSP_DEVINFO_DATA      DeviceInfoData,     OPTIONAL
  3558.     IN  PSP_DRVINFO_DATA_W    DriverInfoData,
  3559.     OUT PSP_DRVINSTALL_PARAMS DriverInstallParams
  3560.     );
  3561.  
  3562. #ifdef UNICODE
  3563. #define SetupDiGetDriverInstallParams SetupDiGetDriverInstallParamsW
  3564. #else
  3565. #define SetupDiGetDriverInstallParams SetupDiGetDriverInstallParamsA
  3566. #endif
  3567.  
  3568.  
  3569. WINSETUPAPI
  3570. BOOL
  3571. WINAPI
  3572. SetupDiSetDriverInstallParamsA(
  3573.     IN HDEVINFO              DeviceInfoSet,
  3574.     IN PSP_DEVINFO_DATA      DeviceInfoData,     OPTIONAL
  3575.     IN PSP_DRVINFO_DATA_A    DriverInfoData,
  3576.     IN PSP_DRVINSTALL_PARAMS DriverInstallParams
  3577.     );
  3578.  
  3579. WINSETUPAPI
  3580. BOOL
  3581. WINAPI
  3582. SetupDiSetDriverInstallParamsW(
  3583.     IN HDEVINFO              DeviceInfoSet,
  3584.     IN PSP_DEVINFO_DATA      DeviceInfoData,     OPTIONAL
  3585.     IN PSP_DRVINFO_DATA_W    DriverInfoData,
  3586.     IN PSP_DRVINSTALL_PARAMS DriverInstallParams
  3587.     );
  3588.  
  3589. #ifdef UNICODE
  3590. #define SetupDiSetDriverInstallParams SetupDiSetDriverInstallParamsW
  3591. #else
  3592. #define SetupDiSetDriverInstallParams SetupDiSetDriverInstallParamsA
  3593. #endif
  3594.  
  3595.  
  3596. WINSETUPAPI
  3597. BOOL
  3598. WINAPI
  3599. SetupDiLoadClassIcon(
  3600.     IN  LPGUID  ClassGuid,
  3601.     OUT HICON  *LargeIcon,    OPTIONAL
  3602.     OUT PINT    MiniIconIndex OPTIONAL
  3603.     );
  3604.  
  3605.  
  3606. //
  3607. // Flags controlling the drawing of mini-icons
  3608. //
  3609. #define DMI_MASK      0x00000001
  3610. #define DMI_BKCOLOR   0x00000002
  3611. #define DMI_USERECT   0x00000004
  3612.  
  3613. WINSETUPAPI
  3614. INT
  3615. WINAPI
  3616. SetupDiDrawMiniIcon(
  3617.     IN HDC   hdc,
  3618.     IN RECT  rc,
  3619.     IN INT   MiniIconIndex,
  3620.     IN DWORD Flags
  3621.     );
  3622.  
  3623.  
  3624. WINSETUPAPI
  3625. BOOL
  3626. WINAPI
  3627. SetupDiGetClassBitmapIndex(
  3628.     IN  LPGUID ClassGuid,
  3629.     OUT PINT   MiniIconIndex
  3630.     );
  3631.  
  3632.  
  3633. WINSETUPAPI
  3634. BOOL
  3635. WINAPI
  3636. SetupDiGetClassImageList(
  3637.     OUT PSP_CLASSIMAGELIST_DATA ClassImageListData
  3638.     );
  3639.  
  3640.  
  3641. WINSETUPAPI
  3642. BOOL
  3643. WINAPI
  3644. SetupDiGetClassImageIndex(
  3645.     IN  PSP_CLASSIMAGELIST_DATA ClassImageListData,
  3646.     IN  LPGUID                  ClassGuid,
  3647.     OUT PINT                    ImageIndex
  3648.     );
  3649.  
  3650.  
  3651. WINSETUPAPI
  3652. BOOL
  3653. WINAPI
  3654. SetupDiDestroyClassImageList(
  3655.     IN PSP_CLASSIMAGELIST_DATA ClassImageListData
  3656.     );
  3657.  
  3658.  
  3659. //
  3660. // Flags for the SetupDiGetClassDevPropertySheets API
  3661. //
  3662. #define DIGCDP_FLAG_BASIC           0x00000001
  3663. #define DIGCDP_FLAG_ADVANCED        0x00000002
  3664.  
  3665. WINSETUPAPI
  3666. BOOL
  3667. WINAPI
  3668. SetupDiGetClassDevPropertySheetsA(
  3669.     IN HDEVINFO           DeviceInfoSet,
  3670.     IN PSP_DEVINFO_DATA   DeviceInfoData,      OPTIONAL
  3671.     IN LPPROPSHEETHEADERA PropertySheetHeader,
  3672.     IN DWORD              Flags
  3673.     );
  3674.  
  3675. WINSETUPAPI
  3676. BOOL
  3677. WINAPI
  3678. SetupDiGetClassDevPropertySheetsW(
  3679.     IN HDEVINFO           DeviceInfoSet,
  3680.     IN PSP_DEVINFO_DATA   DeviceInfoData,      OPTIONAL
  3681.     IN LPPROPSHEETHEADERW PropertySheetHeader,
  3682.     IN DWORD              Flags
  3683.     );
  3684.  
  3685. #ifdef UNICODE
  3686. #define SetupDiGetClassDevPropertySheets SetupDiGetClassDevPropertySheetsW
  3687. #else
  3688. #define SetupDiGetClassDevPropertySheets SetupDiGetClassDevPropertySheetsA
  3689. #endif
  3690.  
  3691.  
  3692. WINSETUPAPI
  3693. BOOL
  3694. WINAPI
  3695. SetupDiAskForOEMDisk(
  3696.     IN HDEVINFO         DeviceInfoSet,
  3697.     IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
  3698.     );
  3699.  
  3700.  
  3701. WINSETUPAPI
  3702. BOOL
  3703. WINAPI
  3704. SetupDiSelectOEMDrv(
  3705.     IN     HWND             hwndParent,    OPTIONAL
  3706.     IN     HDEVINFO         DeviceInfoSet,
  3707.     IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
  3708.     );
  3709.  
  3710.  
  3711. WINSETUPAPI
  3712. BOOL
  3713. WINAPI
  3714. SetupDiClassNameFromGuidA(
  3715.     IN  LPGUID ClassGuid,
  3716.     OUT PSTR   ClassName,
  3717.     IN  DWORD  ClassNameSize,
  3718.     OUT PDWORD RequiredSize   OPTIONAL
  3719.     );
  3720.  
  3721. WINSETUPAPI
  3722. BOOL
  3723. WINAPI
  3724. SetupDiClassNameFromGuidW(
  3725.     IN  LPGUID ClassGuid,
  3726.     OUT PWSTR  ClassName,
  3727.     IN  DWORD  ClassNameSize,
  3728.     OUT PDWORD RequiredSize   OPTIONAL
  3729.     );
  3730.  
  3731. #ifdef UNICODE
  3732. #define SetupDiClassNameFromGuid SetupDiClassNameFromGuidW
  3733. #else
  3734. #define SetupDiClassNameFromGuid SetupDiClassNameFromGuidA
  3735. #endif
  3736.  
  3737.  
  3738. WINSETUPAPI
  3739. BOOL
  3740. WINAPI
  3741. SetupDiClassGuidsFromNameA(
  3742.     IN  PCSTR  ClassName,
  3743.     OUT LPGUID ClassGuidList,
  3744.     IN  DWORD  ClassGuidListSize,
  3745.     OUT PDWORD RequiredSize
  3746.     );
  3747.  
  3748. WINSETUPAPI
  3749. BOOL
  3750. WINAPI
  3751. SetupDiClassGuidsFromNameW(
  3752.     IN  PCWSTR ClassName,
  3753.     OUT LPGUID ClassGuidList,
  3754.     IN  DWORD  ClassGuidListSize,
  3755.     OUT PDWORD RequiredSize
  3756.     );
  3757.  
  3758. #ifdef UNICODE
  3759. #define SetupDiClassGuidsFromName SetupDiClassGuidsFromNameW
  3760. #else
  3761. #define SetupDiClassGuidsFromName SetupDiClassGuidsFromNameA
  3762. #endif
  3763.  
  3764.  
  3765. WINSETUPAPI
  3766. BOOL
  3767. WINAPI
  3768. SetupDiGetHwProfileFriendlyNameA(
  3769.     IN  DWORD  HwProfile,
  3770.     OUT PSTR   FriendlyName,
  3771.     IN  DWORD  FriendlyNameSize,
  3772.     OUT PDWORD RequiredSize      OPTIONAL
  3773.     );
  3774.  
  3775. WINSETUPAPI
  3776. BOOL
  3777. WINAPI
  3778. SetupDiGetHwProfileFriendlyNameW(
  3779.     IN  DWORD  HwProfile,
  3780.     OUT PWSTR  FriendlyName,
  3781.     IN  DWORD  FriendlyNameSize,
  3782.     OUT PDWORD RequiredSize      OPTIONAL
  3783.     );
  3784.  
  3785. #ifdef UNICODE
  3786. #define SetupDiGetHwProfileFriendlyName SetupDiGetHwProfileFriendlyNameW
  3787. #else
  3788. #define SetupDiGetHwProfileFriendlyName SetupDiGetHwProfileFriendlyNameA
  3789. #endif
  3790.  
  3791.  
  3792. //
  3793. // PageType values for SetupDiGetWizardPage API
  3794. //
  3795. #define SPWPT_SELECTDEVICE      0x00000001
  3796.  
  3797. //
  3798. // Flags for SetupDiGetWizardPage API
  3799. //
  3800. #define SPWP_USE_DEVINFO_DATA   0x00000001
  3801.  
  3802. WINSETUPAPI
  3803. HPROPSHEETPAGE
  3804. WINAPI
  3805. SetupDiGetWizardPage(
  3806.     IN HDEVINFO               DeviceInfoSet,
  3807.     IN PSP_DEVINFO_DATA       DeviceInfoData,    OPTIONAL
  3808.     IN PSP_INSTALLWIZARD_DATA InstallWizardData,
  3809.     IN DWORD                  PageType,
  3810.     IN DWORD                  Flags
  3811.     );
  3812.  
  3813.  
  3814. WINSETUPAPI
  3815. BOOL
  3816. WINAPI
  3817. SetupDiGetSelectedDevice(
  3818.     IN  HDEVINFO         DeviceInfoSet,
  3819.     OUT PSP_DEVINFO_DATA DeviceInfoData
  3820.     );
  3821.  
  3822.  
  3823. WINSETUPAPI
  3824. BOOL
  3825. WINAPI
  3826. SetupDiSetSelectedDevice(
  3827.     IN HDEVINFO         DeviceInfoSet,
  3828.     IN PSP_DEVINFO_DATA DeviceInfoData
  3829.     );
  3830.  
  3831.  
  3832. WINSETUPAPI
  3833. BOOL
  3834. WINAPI
  3835. SetupDiGetActualSectionToInstallA(
  3836.     IN  HINF    InfHandle,
  3837.     IN  PCSTR   InfSectionName,
  3838.     OUT PSTR    InfSectionWithExt,     OPTIONAL
  3839.     IN  DWORD   InfSectionWithExtSize,
  3840.     OUT PDWORD  RequiredSize,          OPTIONAL
  3841.     OUT PSTR   *Extension              OPTIONAL
  3842.     );
  3843.  
  3844. WINSETUPAPI
  3845. BOOL
  3846. WINAPI
  3847. SetupDiGetActualSectionToInstallW(
  3848.     IN  HINF    InfHandle,
  3849.     IN  PCWSTR  InfSectionName,
  3850.     OUT PWSTR   InfSectionWithExt,     OPTIONAL
  3851.     IN  DWORD   InfSectionWithExtSize,
  3852.     OUT PDWORD  RequiredSize,          OPTIONAL
  3853.     OUT PWSTR  *Extension              OPTIONAL
  3854.     );
  3855.  
  3856. #ifdef UNICODE
  3857. #define SetupDiGetActualSectionToInstall SetupDiGetActualSectionToInstallW
  3858. #else
  3859. #define SetupDiGetActualSectionToInstall SetupDiGetActualSectionToInstallA
  3860. #endif
  3861.  
  3862.  
  3863. #ifdef __cplusplus
  3864. }
  3865. #endif
  3866.  
  3867. #pragma option -b.
  3868. #include <poppack.h>
  3869. #pragma option -b
  3870.  
  3871. #pragma option -b.
  3872. #endif // _INC_SETUPAPI
  3873.  
  3874.