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