home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / setupapi.h < prev    next >
C/C++ Source or Header  |  1998-04-25  |  141KB  |  5,281 lines

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