home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / setupapi.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  161.3 KB  |  5,899 lines

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