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