PageRenderTime 53ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 1ms

/Core/Dependencies/OIS/src/win32/extras/WiiMote/setupapi.h

https://bitbucket.org/barakianc/nvidia-physx-and-apex-in-gge
C Header | 1578 lines | 1000 code | 223 blank | 355 comment | 0 complexity | f6fbc7fefca662302258acd66ce8e04f MD5 | raw file
  1. /*++
  2. Copyright (c) 1995-1997 Microsoft Corporation
  3. Module Name:
  4. setupapi.h
  5. Abstract:
  6. Public header file for Windows NT Setup services Dll.
  7. Revision History:
  8. --*/
  9. #ifndef _INC_SETUPAPI
  10. #define _INC_SETUPAPI
  11. //
  12. // Define API decoration for direct importing of DLL references.
  13. //
  14. #if !defined(_SETUPAPI_)
  15. #define WINSETUPAPI DECLSPEC_IMPORT
  16. #else
  17. #define WINSETUPAPI
  18. #endif
  19. #include <pshpack1.h> // Assume byte packing throughout
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23. #ifndef __LPGUID_DEFINED__
  24. #define __LPGUID_DEFINED__
  25. typedef GUID *LPGUID;
  26. #endif
  27. //
  28. // Include commctrl.h for our use of HIMAGELIST and wizard support.
  29. //
  30. #include <commctrl.h>
  31. //
  32. // Define maximum string length constants as specified by
  33. // Windows 95.
  34. //
  35. #define LINE_LEN 256 // Win95-compatible maximum for displayable
  36. // strings coming from a device INF.
  37. #define MAX_INF_STRING_LENGTH 4096 // Actual maximum size of an INF string (including
  38. // string substitutions).
  39. #define MAX_TITLE_LEN 60
  40. #define MAX_INSTRUCTION_LEN 256
  41. #define MAX_LABEL_LEN 30
  42. #define MAX_SERVICE_NAME_LEN 256
  43. //
  44. // Define maximum length of a machine name in the format expected by ConfigMgr32
  45. // CM_Connect_Machine (i.e., "\\\\MachineName\0").
  46. //
  47. #define SP_MAX_MACHINENAME_LENGTH (MAX_COMPUTERNAME_LENGTH + 3)
  48. //
  49. // Define type for reference to loaded inf file
  50. //
  51. typedef PVOID HINF;
  52. //
  53. // Inf context structure. Applications must not interpret or
  54. // overwrite values in these structures.
  55. //
  56. typedef struct _INFCONTEXT {
  57. PVOID Inf;
  58. PVOID CurrentInf;
  59. UINT Section;
  60. UINT Line;
  61. } INFCONTEXT, *PINFCONTEXT;
  62. //
  63. // Inf file information structure.
  64. //
  65. typedef struct _SP_INF_INFORMATION {
  66. DWORD InfStyle;
  67. DWORD InfCount;
  68. BYTE VersionData[ANYSIZE_ARRAY];
  69. } SP_INF_INFORMATION, *PSP_INF_INFORMATION;
  70. //
  71. // SP_INF_INFORMATION.InfStyle values
  72. //
  73. #define INF_STYLE_NONE 0 // unrecognized or non-existent
  74. #define INF_STYLE_OLDNT 1 // winnt 3.x
  75. #define INF_STYLE_WIN4 2 // Win95
  76. //
  77. // Target directory specs.
  78. //
  79. #define DIRID_ABSOLUTE -1 // real 32-bit -1
  80. #define DIRID_ABSOLUTE_16BIT 0xffff // 16-bit -1 for compat w/setupx
  81. #define DIRID_NULL 0
  82. #define DIRID_SRCPATH 1
  83. #define DIRID_WINDOWS 10
  84. #define DIRID_SYSTEM 11 // system32
  85. #define DIRID_DRIVERS 12
  86. #define DIRID_IOSUBSYS DIRID_DRIVERS
  87. #define DIRID_INF 17
  88. #define DIRID_HELP 18
  89. #define DIRID_FONTS 20
  90. #define DIRID_VIEWERS 21
  91. #define DIRID_COLOR 23
  92. #define DIRID_APPS 24
  93. #define DIRID_SHARED 25
  94. #define DIRID_BOOT 30
  95. #define DIRID_SYSTEM16 50
  96. #define DIRID_SPOOL 51
  97. #define DIRID_SPOOLDRIVERS 52
  98. #define DIRID_USERPROFILE 53
  99. #define DIRID_LOADER 54
  100. #define DIRID_PRINTPROCESSOR 55
  101. #define DIRID_DEFAULT DIRID_SYSTEM
  102. //
  103. // First user-definable dirid. See SetupSetDirectoryId().
  104. //
  105. #define DIRID_USER 0x8000
  106. //
  107. // Setup callback notification routine type
  108. //
  109. typedef UINT (CALLBACK* PSP_FILE_CALLBACK_A)(
  110. IN PVOID Context,
  111. IN UINT Notification,
  112. IN UINT Param1,
  113. IN UINT Param2
  114. );
  115. typedef UINT (CALLBACK* PSP_FILE_CALLBACK_W)(
  116. IN PVOID Context,
  117. IN UINT Notification,
  118. IN UINT Param1,
  119. IN UINT Param2
  120. );
  121. #ifdef UNICODE
  122. #define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_W
  123. #else
  124. #define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_A
  125. #endif
  126. //
  127. // Operation/queue start/end notification. These are ordinal values.
  128. //
  129. #define SPFILENOTIFY_STARTQUEUE 0x00000001
  130. #define SPFILENOTIFY_ENDQUEUE 0x00000002
  131. #define SPFILENOTIFY_STARTSUBQUEUE 0x00000003
  132. #define SPFILENOTIFY_ENDSUBQUEUE 0x00000004
  133. #define SPFILENOTIFY_STARTDELETE 0x00000005
  134. #define SPFILENOTIFY_ENDDELETE 0x00000006
  135. #define SPFILENOTIFY_DELETEERROR 0x00000007
  136. #define SPFILENOTIFY_STARTRENAME 0x00000008
  137. #define SPFILENOTIFY_ENDRENAME 0x00000009
  138. #define SPFILENOTIFY_RENAMEERROR 0x0000000a
  139. #define SPFILENOTIFY_STARTCOPY 0x0000000b
  140. #define SPFILENOTIFY_ENDCOPY 0x0000000c
  141. #define SPFILENOTIFY_COPYERROR 0x0000000d
  142. #define SPFILENOTIFY_NEEDMEDIA 0x0000000e
  143. #define SPFILENOTIFY_QUEUESCAN 0x0000000f
  144. //
  145. // These are used with SetupIterateCabinet().
  146. //
  147. #define SPFILENOTIFY_CABINETINFO 0x00000010
  148. #define SPFILENOTIFY_FILEINCABINET 0x00000011
  149. #define SPFILENOTIFY_NEEDNEWCABINET 0x00000012
  150. #define SPFILENOTIFY_FILEEXTRACTED 0x00000013
  151. #define SPFILENOTIFY_FILEOPDELAYED 0x00000014
  152. //
  153. // Copy notification. These are bit flags that may be combined.
  154. //
  155. #define SPFILENOTIFY_LANGMISMATCH 0x00010000
  156. #define SPFILENOTIFY_TARGETEXISTS 0x00020000
  157. #define SPFILENOTIFY_TARGETNEWER 0x00040000
  158. //
  159. // File operation codes and callback outcomes.
  160. //
  161. #define FILEOP_COPY 0
  162. #define FILEOP_RENAME 1
  163. #define FILEOP_DELETE 2
  164. #define FILEOP_ABORT 0
  165. #define FILEOP_DOIT 1
  166. #define FILEOP_SKIP 2
  167. #define FILEOP_RETRY FILEOP_DOIT
  168. #define FILEOP_NEWPATH 4
  169. //
  170. // Flags in inf copy sections
  171. //
  172. #define COPYFLG_WARN_IF_SKIP 0x00000001 // warn if user tries to skip file
  173. #define COPYFLG_NOSKIP 0x00000002 // disallow skipping this file
  174. #define COPYFLG_NOVERSIONCHECK 0x00000004 // ignore versions and overwrite target
  175. #define COPYFLG_FORCE_FILE_IN_USE 0x00000008 // force file-in-use behavior
  176. #define COPYFLG_NO_OVERWRITE 0x00000010 // do not copy if file exists on target
  177. #define COPYFLG_NO_VERSION_DIALOG 0x00000020 // do not copy if target is newer
  178. #define COPYFLG_OVERWRITE_OLDER_ONLY 0x00000040 // leave target alone if version same as source
  179. #define COPYFLG_REPLACEONLY 0x00000400 // copy only if file exists on target
  180. //
  181. // Flags in inf delete sections
  182. // New flags go in high word
  183. //
  184. #define DELFLG_IN_USE 0x00000001 // queue in-use file for delete
  185. #define DELFLG_IN_USE1 0x00010000 // high-word version of DELFLG_IN_USE
  186. //
  187. // Source and file paths. Used when notifying queue callback
  188. // of SPFILENOTIFY_STARTxxx, SPFILENOTIFY_ENDxxx, and SPFILENOTIFY_xxxERROR.
  189. //
  190. typedef struct _FILEPATHS_A {
  191. PCSTR Target;
  192. PCSTR Source; // not used for delete operations
  193. UINT Win32Error;
  194. DWORD Flags; // such as SP_COPY_NOSKIP for copy errors
  195. } FILEPATHS_A, *PFILEPATHS_A;
  196. typedef struct _FILEPATHS_W {
  197. PCWSTR Target;
  198. PCWSTR Source; // not used for delete operations
  199. UINT Win32Error;
  200. DWORD Flags; // such as SP_COPY_NOSKIP for copy errors
  201. } FILEPATHS_W, *PFILEPATHS_W;
  202. #ifdef UNICODE
  203. typedef FILEPATHS_W FILEPATHS;
  204. typedef PFILEPATHS_W PFILEPATHS;
  205. #else
  206. typedef FILEPATHS_A FILEPATHS;
  207. typedef PFILEPATHS_A PFILEPATHS;
  208. #endif
  209. //
  210. // Structure used with SPFILENOTIFY_NEEDMEDIA
  211. //
  212. typedef struct _SOURCE_MEDIA_A {
  213. PCSTR Reserved;
  214. PCSTR Tagfile; // may be NULL
  215. PCSTR Description;
  216. //
  217. // Pathname part and filename part of source file
  218. // that caused us to need the media.
  219. //
  220. PCSTR SourcePath;
  221. PCSTR SourceFile;
  222. DWORD Flags; // subset of SP_COPY_xxx
  223. } SOURCE_MEDIA_A, *PSOURCE_MEDIA_A;
  224. typedef struct _SOURCE_MEDIA_W {
  225. PCWSTR Reserved;
  226. PCWSTR Tagfile; // may be NULL
  227. PCWSTR Description;
  228. //
  229. // Pathname part and filename part of source file
  230. // that caused us to need the media.
  231. //
  232. PCWSTR SourcePath;
  233. PCWSTR SourceFile;
  234. DWORD Flags; // subset of SP_COPY_xxx
  235. } SOURCE_MEDIA_W, *PSOURCE_MEDIA_W;
  236. #ifdef UNICODE
  237. typedef SOURCE_MEDIA_W SOURCE_MEDIA;
  238. typedef PSOURCE_MEDIA_W PSOURCE_MEDIA;
  239. #else
  240. typedef SOURCE_MEDIA_A SOURCE_MEDIA;
  241. typedef PSOURCE_MEDIA_A PSOURCE_MEDIA;
  242. #endif
  243. //
  244. // Structure used with SPFILENOTIFY_CABINETINFO and
  245. // SPFILENOTIFY_NEEDNEWCABINET
  246. //
  247. typedef struct _CABINET_INFO_A {
  248. PCSTR CabinetPath;
  249. PCSTR CabinetFile;
  250. PCSTR DiskName;
  251. USHORT SetId;
  252. USHORT CabinetNumber;
  253. } CABINET_INFO_A, *PCABINET_INFO_A;
  254. typedef struct _CABINET_INFO_W {
  255. PCWSTR CabinetPath;
  256. PCWSTR CabinetFile;
  257. PCWSTR DiskName;
  258. USHORT SetId;
  259. USHORT CabinetNumber;
  260. } CABINET_INFO_W, *PCABINET_INFO_W;
  261. #ifdef UNICODE
  262. typedef CABINET_INFO_W CABINET_INFO;
  263. typedef PCABINET_INFO_W PCABINET_INFO;
  264. #else
  265. typedef CABINET_INFO_A CABINET_INFO;
  266. typedef PCABINET_INFO_A PCABINET_INFO;
  267. #endif
  268. //
  269. // Structure used with SPFILENOTIFY_FILEINCABINET
  270. //
  271. typedef struct _FILE_IN_CABINET_INFO_A {
  272. PCSTR NameInCabinet;
  273. DWORD FileSize;
  274. DWORD Win32Error;
  275. WORD DosDate;
  276. WORD DosTime;
  277. WORD DosAttribs;
  278. CHAR FullTargetName[MAX_PATH];
  279. } FILE_IN_CABINET_INFO_A, *PFILE_IN_CABINET_INFO_A;
  280. typedef struct _FILE_IN_CABINET_INFO_W {
  281. PCWSTR NameInCabinet;
  282. DWORD FileSize;
  283. DWORD Win32Error;
  284. WORD DosDate;
  285. WORD DosTime;
  286. WORD DosAttribs;
  287. WCHAR FullTargetName[MAX_PATH];
  288. } FILE_IN_CABINET_INFO_W, *PFILE_IN_CABINET_INFO_W;
  289. #ifdef UNICODE
  290. typedef FILE_IN_CABINET_INFO_W FILE_IN_CABINET_INFO;
  291. typedef PFILE_IN_CABINET_INFO_W PFILE_IN_CABINET_INFO;
  292. #else
  293. typedef FILE_IN_CABINET_INFO_A FILE_IN_CABINET_INFO;
  294. typedef PFILE_IN_CABINET_INFO_A PFILE_IN_CABINET_INFO;
  295. #endif
  296. //
  297. // Define type for setup file queue
  298. //
  299. typedef PVOID HSPFILEQ;
  300. //
  301. // Define type for setup disk space list
  302. //
  303. typedef PVOID HDSKSPC;
  304. //
  305. // Define type for reference to device information set
  306. //
  307. typedef PVOID HDEVINFO;
  308. //
  309. // Device information structure (references a device instance
  310. // that is a member of a device information set)
  311. //
  312. typedef struct _SP_DEVINFO_DATA {
  313. DWORD cbSize;
  314. GUID ClassGuid;
  315. DWORD DevInst; // DEVINST handle
  316. DWORD Reserved;
  317. } SP_DEVINFO_DATA, *PSP_DEVINFO_DATA;
  318. //
  319. // Device interface information structure (references a device
  320. // interface that is associated with the device information
  321. // element that owns it).
  322. //
  323. typedef struct _SP_DEVICE_INTERFACE_DATA {
  324. DWORD cbSize;
  325. GUID InterfaceClassGuid;
  326. DWORD Flags;
  327. DWORD Reserved;
  328. } SP_DEVICE_INTERFACE_DATA, *PSP_DEVICE_INTERFACE_DATA;
  329. //
  330. // Flags for SP_DEVICE_INTERFACE_DATA.Flags field.
  331. //
  332. #define SPINT_ACTIVE 0x00000001
  333. #define SPINT_DEFAULT 0x00000002
  334. #define SPINT_REMOVED 0x00000004
  335. //
  336. // Backward compatibility--do not use.
  337. //
  338. typedef SP_DEVICE_INTERFACE_DATA SP_INTERFACE_DEVICE_DATA;
  339. typedef PSP_DEVICE_INTERFACE_DATA PSP_INTERFACE_DEVICE_DATA;
  340. #define SPID_ACTIVE SPINT_ACTIVE
  341. #define SPID_DEFAULT SPINT_DEFAULT
  342. #define SPID_REMOVED SPINT_REMOVED
  343. typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_A {
  344. DWORD cbSize;
  345. CHAR DevicePath[ANYSIZE_ARRAY];
  346. } SP_DEVICE_INTERFACE_DETAIL_DATA_A, *PSP_DEVICE_INTERFACE_DETAIL_DATA_A;
  347. typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_W {
  348. DWORD cbSize;
  349. WCHAR DevicePath[ANYSIZE_ARRAY];
  350. } SP_DEVICE_INTERFACE_DETAIL_DATA_W, *PSP_DEVICE_INTERFACE_DETAIL_DATA_W;
  351. #ifdef UNICODE
  352. typedef SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_DEVICE_INTERFACE_DETAIL_DATA;
  353. typedef PSP_DEVICE_INTERFACE_DETAIL_DATA_W PSP_DEVICE_INTERFACE_DETAIL_DATA;
  354. #else
  355. typedef SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_DEVICE_INTERFACE_DETAIL_DATA;
  356. typedef PSP_DEVICE_INTERFACE_DETAIL_DATA_A PSP_DEVICE_INTERFACE_DETAIL_DATA;
  357. #endif
  358. //
  359. // Backward compatibility--do not use.
  360. //
  361. typedef SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_INTERFACE_DEVICE_DETAIL_DATA_W;
  362. typedef PSP_DEVICE_INTERFACE_DETAIL_DATA_W PSP_INTERFACE_DEVICE_DETAIL_DATA_W;
  363. typedef SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_INTERFACE_DEVICE_DETAIL_DATA_A;
  364. typedef PSP_DEVICE_INTERFACE_DETAIL_DATA_A PSP_INTERFACE_DEVICE_DETAIL_DATA_A;
  365. #ifdef UNICODE
  366. typedef SP_INTERFACE_DEVICE_DETAIL_DATA_W SP_INTERFACE_DEVICE_DETAIL_DATA;
  367. typedef PSP_INTERFACE_DEVICE_DETAIL_DATA_W PSP_INTERFACE_DEVICE_DETAIL_DATA;
  368. #else
  369. typedef SP_INTERFACE_DEVICE_DETAIL_DATA_A SP_INTERFACE_DEVICE_DETAIL_DATA;
  370. typedef PSP_INTERFACE_DEVICE_DETAIL_DATA_A PSP_INTERFACE_DEVICE_DETAIL_DATA;
  371. #endif
  372. //
  373. // Structure for detailed information on a device information set (used for
  374. // SetupDiGetDeviceInfoListDetail which supercedes the functionality of
  375. // SetupDiGetDeviceInfoListClass).
  376. //
  377. typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_A {
  378. DWORD cbSize;
  379. GUID ClassGuid;
  380. HANDLE RemoteMachineHandle;
  381. CHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH];
  382. } SP_DEVINFO_LIST_DETAIL_DATA_A, *PSP_DEVINFO_LIST_DETAIL_DATA_A;
  383. typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_W {
  384. DWORD cbSize;
  385. GUID ClassGuid;
  386. HANDLE RemoteMachineHandle;
  387. WCHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH];
  388. } SP_DEVINFO_LIST_DETAIL_DATA_W, *PSP_DEVINFO_LIST_DETAIL_DATA_W;
  389. #ifdef UNICODE
  390. typedef SP_DEVINFO_LIST_DETAIL_DATA_W SP_DEVINFO_LIST_DETAIL_DATA;
  391. typedef PSP_DEVINFO_LIST_DETAIL_DATA_W PSP_DEVINFO_LIST_DETAIL_DATA;
  392. #else
  393. typedef SP_DEVINFO_LIST_DETAIL_DATA_A SP_DEVINFO_LIST_DETAIL_DATA;
  394. typedef PSP_DEVINFO_LIST_DETAIL_DATA_A PSP_DEVINFO_LIST_DETAIL_DATA;
  395. #endif
  396. //
  397. // Class installer function codes
  398. //
  399. #define DIF_SELECTDEVICE 0x00000001
  400. #define DIF_INSTALLDEVICE 0x00000002
  401. #define DIF_ASSIGNRESOURCES 0x00000003
  402. #define DIF_PROPERTIES 0x00000004
  403. #define DIF_REMOVE 0x00000005
  404. #define DIF_FIRSTTIMESETUP 0x00000006
  405. #define DIF_FOUNDDEVICE 0x00000007
  406. #define DIF_SELECTCLASSDRIVERS 0x00000008
  407. #define DIF_VALIDATECLASSDRIVERS 0x00000009
  408. #define DIF_INSTALLCLASSDRIVERS 0x0000000A
  409. #define DIF_CALCDISKSPACE 0x0000000B
  410. #define DIF_DESTROYPRIVATEDATA 0x0000000C
  411. #define DIF_VALIDATEDRIVER 0x0000000D
  412. #define DIF_MOVEDEVICE 0x0000000E
  413. #define DIF_DETECT 0x0000000F
  414. #define DIF_INSTALLWIZARD 0x00000010
  415. #define DIF_DESTROYWIZARDDATA 0x00000011
  416. #define DIF_PROPERTYCHANGE 0x00000012
  417. #define DIF_ENABLECLASS 0x00000013
  418. #define DIF_DETECTVERIFY 0x00000014
  419. #define DIF_INSTALLDEVICEFILES 0x00000015
  420. #define DIF_UNREMOVE 0x00000016
  421. #define DIF_SELECTBESTCOMPATDRV 0x00000017
  422. #define DIF_ALLOW_INSTALL 0x00000018
  423. #define DIF_REGISTERDEVICE 0x00000019
  424. #define DIF_INSTALLINTERFACES 0x00000020
  425. #define DIF_DETECTCANCEL 0x00000021
  426. #define DIF_REGISTER_COINSTALLERS 0x00000022
  427. typedef UINT DI_FUNCTION; // Function type for device installer
  428. //
  429. // Device installation parameters structure (associated with a
  430. // particular device information element, or globally with a device
  431. // information set)
  432. //
  433. typedef struct _SP_DEVINSTALL_PARAMS_A {
  434. DWORD cbSize;
  435. DWORD Flags;
  436. DWORD FlagsEx;
  437. HWND hwndParent;
  438. PSP_FILE_CALLBACK InstallMsgHandler;
  439. PVOID InstallMsgHandlerContext;
  440. HSPFILEQ FileQueue;
  441. DWORD ClassInstallReserved;
  442. DWORD Reserved;
  443. CHAR DriverPath[MAX_PATH];
  444. } SP_DEVINSTALL_PARAMS_A, *PSP_DEVINSTALL_PARAMS_A;
  445. typedef struct _SP_DEVINSTALL_PARAMS_W {
  446. DWORD cbSize;
  447. DWORD Flags;
  448. DWORD FlagsEx;
  449. HWND hwndParent;
  450. PSP_FILE_CALLBACK InstallMsgHandler;
  451. PVOID InstallMsgHandlerContext;
  452. HSPFILEQ FileQueue;
  453. DWORD ClassInstallReserved;
  454. DWORD Reserved;
  455. WCHAR DriverPath[MAX_PATH];
  456. } SP_DEVINSTALL_PARAMS_W, *PSP_DEVINSTALL_PARAMS_W;
  457. #ifdef UNICODE
  458. typedef SP_DEVINSTALL_PARAMS_W SP_DEVINSTALL_PARAMS;
  459. typedef PSP_DEVINSTALL_PARAMS_W PSP_DEVINSTALL_PARAMS;
  460. #else
  461. typedef SP_DEVINSTALL_PARAMS_A SP_DEVINSTALL_PARAMS;
  462. typedef PSP_DEVINSTALL_PARAMS_A PSP_DEVINSTALL_PARAMS;
  463. #endif
  464. //
  465. // SP_DEVINSTALL_PARAMS.Flags values
  466. //
  467. // Flags for choosing a device
  468. //
  469. #define DI_SHOWOEM 0x00000001L // support Other... button
  470. #define DI_SHOWCOMPAT 0x00000002L // show compatibility list
  471. #define DI_SHOWCLASS 0x00000004L // show class list
  472. #define DI_SHOWALL 0x00000007L // both class & compat list shown
  473. #define DI_NOVCP 0x00000008L // don't create a new copy queue--use
  474. // caller-supplied FileQueue
  475. #define DI_DIDCOMPAT 0x00000010L // Searched for compatible devices
  476. #define DI_DIDCLASS 0x00000020L // Searched for class devices
  477. #define DI_AUTOASSIGNRES 0x00000040L // No UI for resources if possible
  478. // flags returned by DiInstallDevice to indicate need to reboot/restart
  479. #define DI_NEEDRESTART 0x00000080L // Reboot required to take effect
  480. #define DI_NEEDREBOOT 0x00000100L // ""
  481. // flags for device installation
  482. #define DI_NOBROWSE 0x00000200L // no Browse... in InsertDisk
  483. // Flags set by DiBuildDriverInfoList
  484. #define DI_MULTMFGS 0x00000400L // Set if multiple manufacturers in
  485. // class driver list
  486. // Flag indicates that device is disabled
  487. #define DI_DISABLED 0x00000800L // Set if device disabled
  488. // Flags for Device/Class Properties
  489. #define DI_GENERALPAGE_ADDED 0x00001000L
  490. #define DI_RESOURCEPAGE_ADDED 0x00002000L
  491. // Flag to indicate the setting properties for this Device (or class) caused a change
  492. // so the Dev Mgr UI probably needs to be updatd.
  493. #define DI_PROPERTIES_CHANGE 0x00004000L
  494. // Flag to indicate that the sorting from the INF file should be used.
  495. #define DI_INF_IS_SORTED 0x00008000L
  496. // Flag to indicate that only the the INF specified by SP_DEVINSTALL_PARAMS.DriverPath
  497. // should be searched.
  498. #define DI_ENUMSINGLEINF 0x00010000L
  499. // Flag that prevents ConfigMgr from removing/re-enumerating devices during device
  500. // registration, installation, and deletion.
  501. #define DI_DONOTCALLCONFIGMG 0x00020000L
  502. // The following flag can be used to install a device disabled
  503. #define DI_INSTALLDISABLED 0x00040000L
  504. // Flag that causes SetupDiBuildDriverInfoList to build a device's compatible driver
  505. // list from its existing class driver list, instead of the normal INF search.
  506. #define DI_COMPAT_FROM_CLASS 0x00080000L
  507. // This flag is set if the Class Install params should be used.
  508. #define DI_CLASSINSTALLPARAMS 0x00100000L
  509. // This flag is set if the caller of DiCallClassInstaller does NOT
  510. // want the internal default action performed if the Class installer
  511. // returns ERROR_DI_DO_DEFAULT.
  512. #define DI_NODI_DEFAULTACTION 0x00200000L
  513. // The setupx flag, DI_NOSYNCPROCESSING (0x00400000L) is not support in the Setup APIs.
  514. // flags for device installation
  515. #define DI_QUIETINSTALL 0x00800000L // don't confuse the user with
  516. // questions or excess info
  517. #define DI_NOFILECOPY 0x01000000L // No file Copy necessary
  518. #define DI_FORCECOPY 0x02000000L // Force files to be copied from install path
  519. #define DI_DRIVERPAGE_ADDED 0x04000000L // Prop provider added Driver page.
  520. #define DI_USECI_SELECTSTRINGS 0x08000000L // Use Class Installer Provided strings in the Select Device Dlg
  521. #define DI_OVERRIDE_INFFLAGS 0x10000000L // Override INF flags
  522. #define DI_PROPS_NOCHANGEUSAGE 0x20000000L // No Enable/Disable in General Props
  523. #define DI_NOSELECTICONS 0x40000000L // No small icons in select device dialogs
  524. #define DI_NOWRITE_IDS 0x80000000L // Don't write HW & Compat IDs on install
  525. //
  526. // SP_DEVINSTALL_PARAMS.FlagsEx values
  527. //
  528. #define DI_FLAGSEX_USEOLDINFSEARCH 0x00000001L // Inf Search functions should not use Index Search
  529. #define DI_FLAGSEX_AUTOSELECTRANK0 0x00000002L // SetupDiSelectDevice doesn't prompt user if rank 0 match
  530. #define DI_FLAGSEX_CI_FAILED 0x00000004L // Failed to Load/Call class installer
  531. #define DI_FLAGSEX_DIDINFOLIST 0x00000010L // Did the Class Info List
  532. #define DI_FLAGSEX_DIDCOMPATINFO 0x00000020L // Did the Compat Info List
  533. #define DI_FLAGSEX_FILTERCLASSES 0x00000040L
  534. #define DI_FLAGSEX_SETFAILEDINSTALL 0x00000080L
  535. #define DI_FLAGSEX_DEVICECHANGE 0x00000100L
  536. #define DI_FLAGSEX_ALWAYSWRITEIDS 0x00000200L
  537. #define DI_FLAGSEX_ALLOWEXCLUDEDDRVS 0x00000800L
  538. #define DI_FLAGSEX_NOUIONQUERYREMOVE 0x00001000L
  539. #define DI_FLAGSEX_USECLASSFORCOMPAT 0x00002000L // Use the device's class when building compat drv list.
  540. // (Ignored if DI_COMPAT_FROM_CLASS flag is specified.)
  541. #define DI_FLAGSEX_OLDINF_IN_CLASSLIST 0x00004000L // Search legacy INFs when building class driver list.
  542. #define DI_FLAGSEX_NO_DRVREG_MODIFY 0x00008000L // Don't run AddReg and DelReg for device's software (driver) key.
  543. #define DI_FLAGSEX_IN_SYSTEM_SETUP 0x00010000L // Installation is occurring during initial system setup.
  544. #define DI_FLAGSEX_INET_DRIVER 0x00020000L // Driver came from Windows Update
  545. #define DI_FLAGSEX_APPENDDRIVERLIST 0x00040000L // Cause SetupDiBuildDriverInfoList to append
  546. // a new driver list to an existing list.
  547. //
  548. // Class installation parameters header. This must be the first field of any class install
  549. // parameter structure. The InstallFunction field must be set to the function code
  550. // corresponding to the structure, and the cbSize field must be set to the size of the
  551. // header structure. E.g.,
  552. //
  553. // SP_ENABLECLASS_PARAMS EnableClassParams;
  554. //
  555. // EnableClassParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
  556. // EnableClassParams.ClassInstallHeader.InstallFunction = DIF_ENABLECLASS;
  557. //
  558. typedef struct _SP_CLASSINSTALL_HEADER {
  559. DWORD cbSize;
  560. DI_FUNCTION InstallFunction;
  561. } SP_CLASSINSTALL_HEADER, *PSP_CLASSINSTALL_HEADER;
  562. //
  563. // Structure corresponding to a DIF_ENABLECLASS install function.
  564. //
  565. typedef struct _SP_ENABLECLASS_PARAMS {
  566. SP_CLASSINSTALL_HEADER ClassInstallHeader;
  567. GUID ClassGuid;
  568. DWORD EnableMessage;
  569. } SP_ENABLECLASS_PARAMS, *PSP_ENABLECLASS_PARAMS;
  570. #define ENABLECLASS_QUERY 0
  571. #define ENABLECLASS_SUCCESS 1
  572. #define ENABLECLASS_FAILURE 2
  573. //
  574. // Structure corresponding to a DIF_MOVEDEVICE install function.
  575. //
  576. typedef struct _SP_MOVEDEV_PARAMS {
  577. SP_CLASSINSTALL_HEADER ClassInstallHeader;
  578. SP_DEVINFO_DATA SourceDeviceInfoData;
  579. } SP_MOVEDEV_PARAMS, *PSP_MOVEDEV_PARAMS;
  580. //
  581. // Values indicating a change in a device's state
  582. //
  583. #define DICS_ENABLE 0x00000001
  584. #define DICS_DISABLE 0x00000002
  585. #define DICS_PROPCHANGE 0x00000003
  586. #define DICS_START 0x00000004
  587. #define DICS_STOP 0x00000005
  588. //
  589. // Values specifying the scope of a device property change
  590. //
  591. #define DICS_FLAG_GLOBAL 0x00000001 // make change in all hardware profiles
  592. #define DICS_FLAG_CONFIGSPECIFIC 0x00000002 // make change in specified profile only
  593. #define DICS_FLAG_CONFIGGENERAL 0x00000004 // 1 or more hardware profile-specific
  594. // changes to follow.
  595. //
  596. // Structure corresponding to a DIF_PROPERTYCHANGE install function.
  597. //
  598. typedef struct _SP_PROPCHANGE_PARAMS {
  599. SP_CLASSINSTALL_HEADER ClassInstallHeader;
  600. DWORD StateChange;
  601. DWORD Scope;
  602. DWORD HwProfile;
  603. } SP_PROPCHANGE_PARAMS, *PSP_PROPCHANGE_PARAMS;
  604. //
  605. // Structure corresponding to a DIF_REMOVE install function.
  606. //
  607. typedef struct _SP_REMOVEDEVICE_PARAMS {
  608. SP_CLASSINSTALL_HEADER ClassInstallHeader;
  609. DWORD Scope;
  610. DWORD HwProfile;
  611. } SP_REMOVEDEVICE_PARAMS, *PSP_REMOVEDEVICE_PARAMS;
  612. #define DI_REMOVEDEVICE_GLOBAL 0x00000001
  613. #define DI_REMOVEDEVICE_CONFIGSPECIFIC 0x00000002
  614. //
  615. // Structure corresponding to a DIF_UNREMOVE install function.
  616. //
  617. typedef struct _SP_UNREMOVEDEVICE_PARAMS {
  618. SP_CLASSINSTALL_HEADER ClassInstallHeader;
  619. DWORD Scope;
  620. DWORD HwProfile;
  621. } SP_UNREMOVEDEVICE_PARAMS, *PSP_UNREMOVEDEVICE_PARAMS;
  622. #define DI_UNREMOVEDEVICE_CONFIGSPECIFIC 0x00000002
  623. //
  624. // Structure corresponding to a DIF_SELECTDEVICE install function.
  625. //
  626. typedef struct _SP_SELECTDEVICE_PARAMS_A {
  627. SP_CLASSINSTALL_HEADER ClassInstallHeader;
  628. CHAR Title[MAX_TITLE_LEN];
  629. CHAR Instructions[MAX_INSTRUCTION_LEN];
  630. CHAR ListLabel[MAX_LABEL_LEN];
  631. BYTE Reserved[2]; // DWORD size alignment
  632. } SP_SELECTDEVICE_PARAMS_A, *PSP_SELECTDEVICE_PARAMS_A;
  633. typedef struct _SP_SELECTDEVICE_PARAMS_W {
  634. SP_CLASSINSTALL_HEADER ClassInstallHeader;
  635. WCHAR Title[MAX_TITLE_LEN];
  636. WCHAR Instructions[MAX_INSTRUCTION_LEN];
  637. WCHAR ListLabel[MAX_LABEL_LEN];
  638. } SP_SELECTDEVICE_PARAMS_W, *PSP_SELECTDEVICE_PARAMS_W;
  639. #ifdef UNICODE
  640. typedef SP_SELECTDEVICE_PARAMS_W SP_SELECTDEVICE_PARAMS;
  641. typedef PSP_SELECTDEVICE_PARAMS_W PSP_SELECTDEVICE_PARAMS;
  642. #else
  643. typedef SP_SELECTDEVICE_PARAMS_A SP_SELECTDEVICE_PARAMS;
  644. typedef PSP_SELECTDEVICE_PARAMS_A PSP_SELECTDEVICE_PARAMS;
  645. #endif
  646. //
  647. // Structure corresponding to a DIF_DETECT install function.
  648. //
  649. typedef BOOL (CALLBACK* PDETECT_PROGRESS_NOTIFY)(
  650. IN PVOID ProgressNotifyParam,
  651. IN DWORD DetectComplete
  652. );
  653. // where:
  654. // ProgressNotifyParam - value supplied by caller requesting detection.
  655. // DetectComplete - Percent completion, to be incremented by class
  656. // installer, as it steps thru its detection.
  657. //
  658. // Return Value - If TRUE, then detection is cancelled. Allows caller
  659. // requesting detection to stop detection asap.
  660. //
  661. typedef struct _SP_DETECTDEVICE_PARAMS {
  662. SP_CLASSINSTALL_HEADER ClassInstallHeader;
  663. PDETECT_PROGRESS_NOTIFY DetectProgressNotify;
  664. PVOID ProgressNotifyParam;
  665. } SP_DETECTDEVICE_PARAMS, *PSP_DETECTDEVICE_PARAMS;
  666. //
  667. // 'Add New Device' installation wizard structure
  668. //
  669. // Structure corresponding to a DIF_INSTALLWIZARD install function.
  670. // (NOTE: This structure is also applicable for DIF_DESTROYWIZARDDATA,
  671. // but DIF_INSTALLWIZARD is the associated function code in the class
  672. // installation parameter structure in both cases.)
  673. //
  674. // Define maximum number of dynamic wizard pages that can be added to
  675. // hardware install wizard.
  676. //
  677. #define MAX_INSTALLWIZARD_DYNAPAGES 20
  678. typedef struct _SP_INSTALLWIZARD_DATA {
  679. SP_CLASSINSTALL_HEADER ClassInstallHeader;
  680. DWORD Flags;
  681. HPROPSHEETPAGE DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES];
  682. DWORD NumDynamicPages;
  683. DWORD DynamicPageFlags;
  684. DWORD PrivateFlags;
  685. LPARAM PrivateData;
  686. HWND hwndWizardDlg;
  687. } SP_INSTALLWIZARD_DATA, *PSP_INSTALLWIZARD_DATA;
  688. //
  689. // SP_INSTALLWIZARD_DATA.Flags values
  690. //
  691. #define NDW_INSTALLFLAG_DIDFACTDEFS 0x00000001
  692. #define NDW_INSTALLFLAG_HARDWAREALLREADYIN 0x00000002
  693. #define NDW_INSTALLFLAG_NEEDRESTART DI_NEEDRESTART
  694. #define NDW_INSTALLFLAG_NEEDREBOOT DI_NEEDREBOOT
  695. #define NDW_INSTALLFLAG_NEEDSHUTDOWN 0x00000200
  696. #define NDW_INSTALLFLAG_EXPRESSINTRO 0x00000400
  697. #define NDW_INSTALLFLAG_SKIPISDEVINSTALLED 0x00000800
  698. #define NDW_INSTALLFLAG_NODETECTEDDEVS 0x00001000
  699. #define NDW_INSTALLFLAG_INSTALLSPECIFIC 0x00002000
  700. #define NDW_INSTALLFLAG_SKIPCLASSLIST 0x00004000
  701. #define NDW_INSTALLFLAG_CI_PICKED_OEM 0x00008000
  702. #define NDW_INSTALLFLAG_PCMCIAMODE 0x00010000
  703. #define NDW_INSTALLFLAG_PCMCIADEVICE 0x00020000
  704. #define NDW_INSTALLFLAG_USERCANCEL 0x00040000
  705. #define NDW_INSTALLFLAG_KNOWNCLASS 0x00080000
  706. //
  707. // SP_INSTALLWIZARD_DATA.DynamicPageFlags values
  708. //
  709. // This flag is set if a Class installer has added pages to the
  710. // install wizard.
  711. //
  712. #define DYNAWIZ_FLAG_PAGESADDED 0x00000001
  713. //
  714. // The following flags will control the button states when displaying
  715. // the InstallDetectedDevs dialog.
  716. //
  717. #define DYNAWIZ_FLAG_INSTALLDET_NEXT 0x00000002
  718. #define DYNAWIZ_FLAG_INSTALLDET_PREV 0x00000004
  719. // Set this flag if you jump to the analyze page, and want it to
  720. // handle conflicts for you. NOTE. You will not get control back
  721. // in the event of a conflict if you set this flag.
  722. //
  723. // BUGBUG (lonnym): Not currently implemented!
  724. //
  725. #define DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT 0x00000008
  726. //
  727. // Define wizard page resource IDs to be used when adding custom pages
  728. // to the hardware install wizard.
  729. //
  730. // Resource ID for the first page that the install wizard will go to after
  731. // adding the class installer pages.
  732. //
  733. #define IDD_DYNAWIZ_FIRSTPAGE 10000
  734. //
  735. // Resource ID for the page that the Select Device page will go back to.
  736. //
  737. #define IDD_DYNAWIZ_SELECT_PREVPAGE 10001
  738. //
  739. // Resource ID for the page that the Select Device page will go forward to.
  740. //
  741. #define IDD_DYNAWIZ_SELECT_NEXTPAGE 10002
  742. //
  743. // Resource ID for the page that the Analyze dialog should go back to
  744. // This will only be used in the event that there is a problem, and the user
  745. // selects Back from the analyze proc.
  746. //
  747. #define IDD_DYNAWIZ_ANALYZE_PREVPAGE 10003
  748. //
  749. // Resource ID for the page that the Analyze dialog should go to if it
  750. // continue from the analyze proc. the wAnalyzeResult in the INSTALLDATA
  751. // struct will contain the anaysis results.
  752. //
  753. #define IDD_DYNAWIZ_ANALYZE_NEXTPAGE 10004
  754. //
  755. // Resource ID for that page that the Install detected devices page will go
  756. // back to.
  757. //
  758. #define IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE 10006
  759. //
  760. // Resource ID for the page that the Install detected devices page will go
  761. // forward to.
  762. //
  763. #define IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE 10007
  764. //
  765. // Resource ID for the page that the Install detected devices page will go
  766. // to in the event that no devices are detected.
  767. //
  768. #define IDD_DYNAWIZ_INSTALLDETECTED_NODEVS 10008
  769. //
  770. // Resource ID of the hardware install wizard's select device page.
  771. // This ID can be used to go directly to the hardware install wizard's select
  772. // device page.
  773. //
  774. #define IDD_DYNAWIZ_SELECTDEV_PAGE 10009
  775. //
  776. // Resource ID of the hardware install wizard's device analysis page.
  777. // This ID can be use to go directly to the hardware install wizard's analysis
  778. // page.
  779. //
  780. #define IDD_DYNAWIZ_ANALYZEDEV_PAGE 10010
  781. //
  782. // Resource ID of the hardware install wizard's install detected devices page.
  783. // This ID can be use to go directly to the hardware install wizard's install
  784. // detected devices page.
  785. //
  786. #define IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE 10011
  787. //
  788. // Resource ID of the hardware install wizard's select class page.
  789. // This ID can be use to go directly to the hardware install wizard's select
  790. // class page.
  791. //
  792. #define IDD_DYNAWIZ_SELECTCLASS_PAGE 10012
  793. //
  794. // Driver information structure (member of a driver info list that may be associated
  795. // with a particular device instance, or (globally) with a device information set)
  796. //
  797. typedef struct _SP_DRVINFO_DATA_A {
  798. DWORD cbSize;
  799. DWORD DriverType;
  800. DWORD Reserved;
  801. CHAR Description[LINE_LEN];
  802. CHAR MfgName[LINE_LEN];
  803. CHAR ProviderName[LINE_LEN];
  804. } SP_DRVINFO_DATA_A, *PSP_DRVINFO_DATA_A;
  805. typedef struct _SP_DRVINFO_DATA_W {
  806. DWORD cbSize;
  807. DWORD DriverType;
  808. DWORD Reserved;
  809. WCHAR Description[LINE_LEN];
  810. WCHAR MfgName[LINE_LEN];
  811. WCHAR ProviderName[LINE_LEN];
  812. } SP_DRVINFO_DATA_W, *PSP_DRVINFO_DATA_W;
  813. #ifdef UNICODE
  814. typedef SP_DRVINFO_DATA_W SP_DRVINFO_DATA;
  815. typedef PSP_DRVINFO_DATA_W PSP_DRVINFO_DATA;
  816. #else
  817. typedef SP_DRVINFO_DATA_A SP_DRVINFO_DATA;
  818. typedef PSP_DRVINFO_DATA_A PSP_DRVINFO_DATA;
  819. #endif
  820. //
  821. // Driver information details structure (provides detailed information about a
  822. // particular driver information structure)
  823. //
  824. typedef struct _SP_DRVINFO_DETAIL_DATA_A {
  825. DWORD cbSize;
  826. FILETIME InfDate;
  827. DWORD CompatIDsOffset;
  828. DWORD CompatIDsLength;
  829. DWORD Reserved;
  830. CHAR SectionName[LINE_LEN];
  831. CHAR InfFileName[MAX_PATH];
  832. CHAR DrvDescription[LINE_LEN];
  833. CHAR HardwareID[ANYSIZE_ARRAY];
  834. } SP_DRVINFO_DETAIL_DATA_A, *PSP_DRVINFO_DETAIL_DATA_A;
  835. typedef struct _SP_DRVINFO_DETAIL_DATA_W {
  836. DWORD cbSize;
  837. FILETIME InfDate;
  838. DWORD CompatIDsOffset;
  839. DWORD CompatIDsLength;
  840. DWORD Reserved;
  841. WCHAR SectionName[LINE_LEN];
  842. WCHAR InfFileName[MAX_PATH];
  843. WCHAR DrvDescription[LINE_LEN];
  844. WCHAR HardwareID[ANYSIZE_ARRAY];
  845. } SP_DRVINFO_DETAIL_DATA_W, *PSP_DRVINFO_DETAIL_DATA_W;
  846. #ifdef UNICODE
  847. typedef SP_DRVINFO_DETAIL_DATA_W SP_DRVINFO_DETAIL_DATA;
  848. typedef PSP_DRVINFO_DETAIL_DATA_W PSP_DRVINFO_DETAIL_DATA;
  849. #else
  850. typedef SP_DRVINFO_DETAIL_DATA_A SP_DRVINFO_DETAIL_DATA;
  851. typedef PSP_DRVINFO_DETAIL_DATA_A PSP_DRVINFO_DETAIL_DATA;
  852. #endif
  853. //
  854. // Driver installation parameters (associated with a particular driver
  855. // information element)
  856. //
  857. typedef struct _SP_DRVINSTALL_PARAMS {
  858. DWORD cbSize;
  859. DWORD Rank;
  860. DWORD Flags;
  861. DWORD PrivateData;
  862. DWORD Reserved;
  863. } SP_DRVINSTALL_PARAMS, *PSP_DRVINSTALL_PARAMS;
  864. //
  865. // SP_DRVINSTALL_PARAMS.Flags values
  866. //
  867. #define DNF_DUPDESC 0x00000001 // Multiple providers have same desc
  868. #define DNF_OLDDRIVER 0x00000002 // Driver node specifies old/current driver
  869. #define DNF_EXCLUDEFROMLIST 0x00000004 // If set, this driver node will not be
  870. // displayed in any driver select dialogs.
  871. #define DNF_NODRIVER 0x00000008 // if we want to install no driver
  872. // (e.g no mouse drv)
  873. #define DNF_LEGACYINF 0x00000010 // this driver node comes from an old-style INF
  874. //
  875. // Setup callback routine for comparing detection signatures
  876. //
  877. typedef DWORD (CALLBACK* PSP_DETSIG_CMPPROC)(
  878. IN HDEVINFO DeviceInfoSet,
  879. IN PSP_DEVINFO_DATA NewDeviceData,
  880. IN PSP_DEVINFO_DATA ExistingDeviceData,
  881. IN PVOID CompareContext OPTIONAL
  882. );
  883. //
  884. // Define context structure handed to co-installers
  885. //
  886. typedef struct _COINSTALLER_CONTEXT_DATA {
  887. BOOL PostProcessing;
  888. DWORD InstallResult;
  889. PVOID PrivateData;
  890. } COINSTALLER_CONTEXT_DATA, *PCOINSTALLER_CONTEXT_DATA;
  891. //
  892. // Structure containing class image list information.
  893. //
  894. typedef struct _SP_CLASSIMAGELIST_DATA {
  895. DWORD cbSize;
  896. HIMAGELIST ImageList;
  897. DWORD Reserved;
  898. } SP_CLASSIMAGELIST_DATA, *PSP_CLASSIMAGELIST_DATA;
  899. //
  900. // Structure to be passed as first parameter (LPVOID lpv) to ExtensionPropSheetPageProc
  901. // entry point in setupapi.dll or to "EnumPropPages32" or "BasicProperties32" entry
  902. // points provided by class/device property page providers. Used to retrieve a handle
  903. // (or, potentially, multiple handles) to property pages for a specified property page type.
  904. //
  905. typedef struct _SP_PROPSHEETPAGE_REQUEST {
  906. DWORD cbSize;
  907. DWORD PageRequested;
  908. HDEVINFO DeviceInfoSet;
  909. PSP_DEVINFO_DATA DeviceInfoData;
  910. } SP_PROPSHEETPAGE_REQUEST, *PSP_PROPSHEETPAGE_REQUEST;
  911. //
  912. // Property sheet codes used in SP_PROPSHEETPAGE_REQUEST.PageRequested
  913. //
  914. #define SPPSR_SELECT_DEVICE_RESOURCES 1 // supplied by setupapi.dll
  915. #define SPPSR_ENUM_BASIC_DEVICE_PROPERTIES 2 // supplied by device's BasicProperties32 provider
  916. #define SPPSR_ENUM_ADV_DEVICE_PROPERTIES 3 // supplied by class and/or device's EnumPropPages32 provider
  917. //
  918. // Setupapi-specific error codes
  919. //
  920. // Inf parse outcomes
  921. //
  922. #define ERROR_EXPECTED_SECTION_NAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0)
  923. #define ERROR_BAD_SECTION_NAME_LINE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|1)
  924. #define ERROR_SECTION_NAME_TOO_LONG (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|2)
  925. #define ERROR_GENERAL_SYNTAX (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|3)
  926. //
  927. // Inf runtime errors
  928. //
  929. #define ERROR_WRONG_INF_STYLE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x100)
  930. #define ERROR_SECTION_NOT_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x101)
  931. #define ERROR_LINE_NOT_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x102)
  932. //
  933. // Device Installer errors
  934. //
  935. #define ERROR_NO_ASSOCIATED_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x200)
  936. #define ERROR_CLASS_MISMATCH (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x201)
  937. #define ERROR_DUPLICATE_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x202)
  938. #define ERROR_NO_DRIVER_SELECTED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x203)
  939. #define ERROR_KEY_DOES_NOT_EXIST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x204)
  940. #define ERROR_INVALID_DEVINST_NAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x205)
  941. #define ERROR_INVALID_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x206)
  942. #define ERROR_DEVINST_ALREADY_EXISTS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x207)
  943. #define ERROR_DEVINFO_NOT_REGISTERED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x208)
  944. #define ERROR_INVALID_REG_PROPERTY (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x209)
  945. #define ERROR_NO_INF (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20A)
  946. #define ERROR_NO_SUCH_DEVINST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20B)
  947. #define ERROR_CANT_LOAD_CLASS_ICON (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20C)
  948. #define ERROR_INVALID_CLASS_INSTALLER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20D)
  949. #define ERROR_DI_DO_DEFAULT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20E)
  950. #define ERROR_DI_NOFILECOPY (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20F)
  951. #define ERROR_INVALID_HWPROFILE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x210)
  952. #define ERROR_NO_DEVICE_SELECTED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x211)
  953. #define ERROR_DEVINFO_LIST_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x212)
  954. #define ERROR_DEVINFO_DATA_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x213)
  955. #define ERROR_DI_BAD_PATH (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x214)
  956. #define ERROR_NO_CLASSINSTALL_PARAMS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x215)
  957. #define ERROR_FILEQUEUE_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x216)
  958. #define ERROR_BAD_SERVICE_INSTALLSECT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x217)
  959. #define ERROR_NO_CLASS_DRIVER_LIST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x218)
  960. #define ERROR_NO_ASSOCIATED_SERVICE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x219)
  961. #define ERROR_NO_DEFAULT_DEVICE_INTERFACE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21A)
  962. #define ERROR_DEVICE_INTERFACE_ACTIVE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21B)
  963. #define ERROR_DEVICE_INTERFACE_REMOVED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21C)
  964. #define ERROR_BAD_INTERFACE_INSTALLSECT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21D)
  965. #define ERROR_NO_SUCH_INTERFACE_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21E)
  966. #define ERROR_INVALID_REFERENCE_STRING (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21F)
  967. #define ERROR_INVALID_MACHINENAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x220)
  968. #define ERROR_REMOTE_COMM_FAILURE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x221)
  969. #define ERROR_MACHINE_UNAVAILABLE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x222)
  970. #define ERROR_NO_CONFIGMGR_SERVICES (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x223)
  971. #define ERROR_INVALID_PROPPAGE_PROVIDER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x224)
  972. #define ERROR_NO_SUCH_DEVICE_INTERFACE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x225)
  973. #define ERROR_DI_POSTPROCESSING_REQUIRED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x226)
  974. #define ERROR_INVALID_COINSTALLER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x227)
  975. #define ERROR_NO_COMPAT_DRIVERS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x228)
  976. #define ERROR_NO_DEVICE_ICON (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x229)
  977. #define ERROR_INVALID_INF_LOGCONFIG (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22A)
  978. #define ERROR_DI_DONT_INSTALL (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22B)
  979. #define ERROR_INVALID_FILTER_DRIVER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22C)
  980. //
  981. // Backward compatibility--do not use.
  982. //
  983. #define ERROR_NO_DEFAULT_INTERFACE_DEVICE ERROR_NO_DEFAULT_DEVICE_INTERFACE
  984. #define ERROR_INTERFACE_DEVICE_ACTIVE ERROR_DEVICE_INTERFACE_ACTIVE
  985. #define ERROR_INTERFACE_DEVICE_REMOVED ERROR_DEVICE_INTERFACE_REMOVED
  986. #define ERROR_NO_SUCH_INTERFACE_DEVICE ERROR_NO_SUCH_DEVICE_INTERFACE
  987. //
  988. // Win9x migration DLL error code
  989. //
  990. #define ERROR_NOT_INSTALLED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x1000)
  991. WINSETUPAPI
  992. BOOL
  993. WINAPI
  994. SetupGetInfInformationA(
  995. IN LPCVOID InfSpec,
  996. IN DWORD SearchControl,
  997. OUT PSP_INF_INFORMATION ReturnBuffer, OPTIONAL
  998. IN DWORD ReturnBufferSize,
  999. OUT PDWORD RequiredSize OPTIONAL
  1000. );
  1001. WINSETUPAPI
  1002. BOOL
  1003. WINAPI
  1004. SetupGetInfInformationW(
  1005. IN LPCVOID InfSpec,
  1006. IN DWORD SearchControl,
  1007. OUT PSP_INF_INFORMATION ReturnBuffer, OPTIONAL
  1008. IN DWORD ReturnBufferSize,
  1009. OUT PDWORD RequiredSize OPTIONAL
  1010. );
  1011. //
  1012. // SearchControl flags for SetupGetInfInformation
  1013. //
  1014. #define INFINFO_INF_SPEC_IS_HINF 1
  1015. #define INFINFO_INF_NAME_IS_ABSOLUTE 2
  1016. #define INFINFO_DEFAULT_SEARCH 3
  1017. #define INFINFO_REVERSE_DEFAULT_SEARCH 4
  1018. #define INFINFO_INF_PATH_LIST_SEARCH 5
  1019. #ifdef UNICODE
  1020. #define SetupGetInfInformation SetupGetInfInformationW
  1021. #else
  1022. #define SetupGetInfInformation SetupGetInfInformationA
  1023. #endif
  1024. WINSETUPAPI
  1025. BOOL
  1026. WINAPI
  1027. SetupQueryInfFileInformationA(
  1028. IN PSP_INF_INFORMATION InfInformation,
  1029. IN UINT InfIndex,
  1030. OUT PSTR ReturnBuffer, OPTIONAL
  1031. IN DWORD ReturnBufferSize,
  1032. OUT PDWORD RequiredSize OPTIONAL
  1033. );
  1034. WINSETUPAPI
  1035. BOOL
  1036. WINAPI
  1037. SetupQueryInfFileInformationW(
  1038. IN PSP_INF_INFORMATION InfInformation,
  1039. IN UINT InfIndex,
  1040. OUT PWSTR ReturnBuffer, OPTIONAL
  1041. IN DWORD ReturnBufferSize,
  1042. OUT PDWORD RequiredSize OPTIONAL
  1043. );
  1044. #ifdef UNICODE
  1045. #define SetupQueryInfFileInformation SetupQueryInfFileInformationW
  1046. #else
  1047. #define SetupQueryInfFileInformation SetupQueryInfFileInformationA
  1048. #endif
  1049. WINSETUPAPI
  1050. BOOL
  1051. WINAPI
  1052. SetupQueryInfVersionInformationA(
  1053. IN PSP_INF_INFORMATION InfInformation,
  1054. IN UINT InfIndex,
  1055. IN PCSTR Key, OPTIONAL
  1056. OUT PSTR ReturnBuffer, OPTIONAL
  1057. IN DWORD ReturnBufferSize,
  1058. OUT PDWORD RequiredSize OPTIONAL
  1059. );
  1060. WINSETUPAPI
  1061. BOOL
  1062. WINAPI
  1063. SetupQueryInfVersionInformationW(
  1064. IN PSP_INF_INFORMATION InfInformation,
  1065. IN UINT InfIndex,
  1066. IN PCWSTR Key, OPTIONAL
  1067. OUT PWSTR ReturnBuffer, OPTIONAL
  1068. IN DWORD ReturnBufferSize,
  1069. OUT PDWORD RequiredSize OPTIONAL
  1070. );
  1071. #ifdef UNICODE
  1072. #define SetupQueryInfVersionInformation SetupQueryInfVersionInformationW
  1073. #else
  1074. #define SetupQueryInfVersionInformation SetupQueryInfVersionInformationA
  1075. #endif
  1076. WINSETUPAPI
  1077. BOOL
  1078. WINAPI
  1079. SetupGetInfFileListA(
  1080. IN PCSTR DirectoryPath, OPTIONAL
  1081. IN DWORD InfStyle,
  1082. OUT PSTR ReturnBuffer, OPTIONAL
  1083. IN DWORD ReturnBufferSize,
  1084. OUT PDWORD RequiredSize OPTIONAL
  1085. );
  1086. WINSETUPAPI
  1087. BOOL
  1088. WINAPI
  1089. SetupGetInfFileListW(
  1090. IN PCWSTR DirectoryPath, OPTIONAL
  1091. IN DWORD InfStyle,
  1092. OUT PWSTR ReturnBuffer, OPTIONAL
  1093. IN DWORD ReturnBufferSize,
  1094. OUT PDWORD RequiredSize OPTIONAL
  1095. );
  1096. #ifdef UNICODE
  1097. #define SetupGetInfFileList SetupGetInfFileListW
  1098. #else
  1099. #define SetupGetInfFileList SetupGetInfFileListA
  1100. #endif
  1101. WINSETUPAPI
  1102. HINF
  1103. WINAPI
  1104. SetupOpenInfFileW(
  1105. IN PCWSTR FileName,
  1106. IN PCWSTR InfClass, OPTIONAL
  1107. IN DWORD InfStyle,
  1108. OUT PUINT ErrorLine OPTIONAL
  1109. );
  1110. WINSETUPAPI
  1111. HINF
  1112. WINAPI
  1113. SetupOpenInfFileA(
  1114. IN PCSTR FileName,
  1115. IN PCSTR InfClass, OPTIONAL
  1116. IN DWORD InfStyle,
  1117. OUT PUINT ErrorLine OPTIONAL
  1118. );
  1119. #ifdef UNICODE
  1120. #define SetupOpenInfFile SetupOpenInfFileW
  1121. #else
  1122. #define SetupOpenInfFile SetupOpenInfFileA
  1123. #endif
  1124. WINSETUPAPI
  1125. HINF
  1126. WINAPI
  1127. SetupOpenMasterInf(
  1128. VOID
  1129. );
  1130. WINSETUPAPI
  1131. BOOL
  1132. WINAPI
  1133. SetupOpenAppendInfFileW(
  1134. IN PCWSTR FileName, OPTIONAL
  1135. IN HINF InfHandle,
  1136. OUT PUINT ErrorLine OPTIONAL
  1137. );
  1138. WINSETUPAPI
  1139. BOOL
  1140. WINAPI
  1141. SetupOpenAppendInfFileA(
  1142. IN PCSTR FileName, OPTIONAL
  1143. IN HINF InfHandle,
  1144. OUT PUINT ErrorLine OPTIONAL
  1145. );
  1146. #ifdef UNICODE
  1147. #define SetupOpenAppendInfFile SetupOpenAppendInfFileW
  1148. #else
  1149. #define SetupOpenAppendInfFile SetupOpenAppendInfFileA
  1150. #endif
  1151. WINSETUPAPI
  1152. VOID
  1153. WINAPI
  1154. SetupCloseInfFile(
  1155. IN HINF InfHandle
  1156. );
  1157. WINSETUPAPI
  1158. BOOL
  1159. WINAPI
  1160. SetupFindFirstLineA(
  1161. IN HINF InfHandle,
  1162. IN PCSTR Section,
  1163. IN PCSTR Key, OPTIONAL
  1164. OUT PINFCONTEXT Context
  1165. );
  1166. WINSETUPAPI
  1167. BOOL
  1168. WINAPI
  1169. SetupFindFirstLineW(
  1170. IN HINF InfHandle,
  1171. IN PCWSTR Section,
  1172. IN PCWSTR Key, OPTIONAL
  1173. OUT PINFCONTEXT Context
  1174. );
  1175. #ifdef UNICODE
  1176. #define SetupFindFirstLine SetupFindFirstLineW
  1177. #else
  1178. #define SetupFindFirstLine SetupFindFirstLineA
  1179. #endif
  1180. WINSETUPAPI
  1181. BOOL
  1182. WINAPI
  1183. SetupFindNextLine(
  1184. IN PINFCONTEXT ContextIn,
  1185. OUT PINFCONTEXT ContextOut
  1186. );
  1187. WINSETUPAPI
  1188. BOOL
  1189. WINAPI
  1190. SetupFindNextMatchLineA(
  1191. IN PINFCONTEXT ContextIn,
  1192. IN PCSTR Key, OPTIONAL
  1193. OUT PINFCONTEXT ContextOut
  1194. );
  1195. WINSETUPAPI
  1196. BOOL
  1197. WINAPI
  1198. SetupFindNextMatchLineW(
  1199. IN PINFCONTEXT ContextIn,
  1200. IN PCWSTR Key, OPTIONAL
  1201. OUT PINFCONTEXT ContextOut
  1202. );
  1203. #ifdef UNICODE
  1204. #define SetupFindNextMatchLine SetupFindNextMatchLineW
  1205. #else
  1206. #define SetupFindNextMatchLine SetupFindNextMatchLineA
  1207. #endif
  1208. WINSETUPAPI
  1209. BOOL
  1210. WINAPI
  1211. SetupGetLineByIndexA(
  1212. IN HINF InfHandle,
  1213. IN PCSTR Section,
  1214. IN DWORD Index,
  1215. OUT PINFCONTEXT Context
  1216. );
  1217. WINSETUPAPI
  1218. BOOL
  1219. WINAPI
  1220. SetupGetLineByIndexW(
  1221. IN HINF InfHandle,
  1222. IN PCWSTR Section,
  1223. IN DWORD Index,
  1224. OUT PINFCONTEXT Context
  1225. );
  1226. #ifdef UNICODE
  1227. #define SetupGetLineByIndex SetupGetLineByIndexW
  1228. #else
  1229. #define SetupGetLineByIndex SetupGetLineByIndexA
  1230. #endif
  1231. WINSETUPAPI
  1232. LONG
  1233. WINAPI
  1234. SetupGetLineCountA(
  1235. IN HINF InfHandle,
  1236. IN PCSTR Section
  1237. );
  1238. WINSETUPAPI
  1239. LONG
  1240. WINAPI
  1241. SetupGetLineCountW(
  1242. IN HINF InfHandle,
  1243. IN PCWSTR Section
  1244. );
  1245. #ifdef UNICODE
  1246. #define SetupGetLineCount SetupGetLineCountW
  1247. #else
  1248. #define SetupGetLineCount SetupGetLineCountA
  1249. #endif
  1250. WINSETUPAPI
  1251. BOOL
  1252. WINAPI
  1253. SetupGetLineTextA(
  1254. IN PINFCONTEXT Context, OPTIONAL
  1255. IN HINF InfHandle, OPTIONAL
  1256. IN PCSTR Section, OPTIONAL
  1257. IN PCSTR Key, OPTIONAL
  1258. OUT PSTR ReturnBuffer, OPTIONAL
  1259. IN DWORD ReturnBufferSize,
  1260. OUT PDWORD RequiredSize OPTIONAL
  1261. );
  1262. WINSETUPAPI
  1263. BOOL
  1264. WINAPI
  1265. SetupGetLineTextW(
  1266. IN PINFCONTEXT Context, OPTIONAL
  1267. IN HINF InfHandle, OPTIONAL
  1268. IN PCWSTR Section, OPTIONAL
  1269. IN PCWSTR Key, OPTIONAL
  1270. OUT PWSTR ReturnBuffer, OPTIONAL
  1271. IN DWORD ReturnBufferSize,
  1272. OUT PDWORD RequiredSize OPTIONAL
  1273. );
  1274. #ifdef UNICODE
  1275. #define SetupGetLineText SetupGetLineTextW
  1276. #else
  1277. #define SetupGetLineText SetupGetLineTextA
  1278. #endif
  1279. WINSETUPAPI
  1280. DWORD
  1281. WINAPI
  1282. SetupGetFieldCount(
  1283. IN PINFCONTEXT Context
  1284. );
  1285. WINSETUPAPI
  1286. BOOL
  1287. WINAPI
  1288. SetupGetStringFieldA(
  1289. IN PINFCONTEXT Context,
  1290. IN DWORD FieldIndex,
  1291. OUT PSTR ReturnBuffer, OPTIONAL
  1292. IN DWORD ReturnBufferSize,
  1293. OUT PDWORD RequiredSize OPTIONAL
  1294. );
  1295. WINSETUPAPI
  1296. BOOL
  1297. WINAPI
  1298. SetupGetStringFieldW(
  1299. IN PINFCONTEXT Context,
  1300. IN DWORD FieldIndex,
  1301. OUT PWSTR ReturnBuffer, OPTIONAL
  1302. IN DWORD ReturnBufferSize,
  1303. OUT PDWORD RequiredSize OPTIONAL
  1304. );
  1305. #ifdef UNICODE
  1306. #define SetupGetStringField SetupGetStringFieldW
  1307. #else
  1308. #define SetupGetStringField SetupGetStringFieldA
  1309. #endif
  1310. WINSETUPAPI
  1311. BOOL
  1312. WINAPI
  1313. SetupGetIntField(
  1314. IN PINFCONTEXT Context,
  1315. IN DWORD FieldIndex,
  1316. OUT PINT IntegerValue
  1317. );
  1318. WINSETUPAPI
  1319. BOOL
  1320. WINAPI
  1321. SetupGetMultiSzFieldA(
  1322. IN PINFCONTEXT Context,
  1323. IN DWORD FieldIndex,
  1324. OUT PSTR ReturnBuffer, OPTIONAL
  1325. IN DWORD ReturnBufferSize,
  1326. OUT LPDWORD RequiredSize OPTIONAL
  1327. );
  1328. WINSETUPAPI
  1329. BOOL
  1330. WINAPI
  1331. SetupGetMultiSzFieldW(
  1332. IN PINFCONTEXT Context,
  1333. IN DWORD FieldIndex,
  1334. OUT PWSTR ReturnBuffer, OPTIONAL
  1335. IN DWORD ReturnBufferSize,
  1336. OUT LPDWORD RequiredSize OPTIONAL
  1337. );
  1338. #ifdef UNICODE
  1339. #define SetupGetMultiSzField SetupGetMultiSzFieldW
  1340. #else
  1341. #define SetupGetMultiSzField SetupGetMultiSzFieldA
  1342. #endif
  1343. WINSETUPAPI
  1344. BOOL
  1345. WINAPI
  1346. SetupGetBinaryField(
  1347. IN PINFCONTEXT Context,
  1348. IN DWORD