MSVCSetupApi.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534
  1. #pragma once
  2. #ifdef __GNUC__
  3. #pragma GCC diagnostic push
  4. #pragma GCC diagnostic ignored "-Wunused-parameter"
  5. #endif
  6. // <copyright file="Program.cpp" company="Microsoft Corporation">
  7. // Copyright (C) Microsoft Corporation. All rights reserved.
  8. // Licensed under the MIT license.
  9. // </copyright>
  10. // <license>
  11. // The MIT License (MIT)
  12. //
  13. // Copyright (C) Microsoft Corporation. All rights reserved.
  14. //
  15. // Permission is hereby granted, free of charge, to any person obtaining
  16. // a copy of this software and associated documentation files (the "Software"),
  17. // to deal in the Software without restriction, including without limitation the
  18. // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  19. // sell copies of the Software, and to permit persons to whom the Software is
  20. // furnished to do so, subject to the following conditions:
  21. //
  22. // The above copyright notice and this permission notice shall be included in
  23. // all copies or substantial portions of the Software.
  24. //
  25. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  26. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  27. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  28. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  29. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  30. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  31. // SOFTWARE.
  32. // </license>
  33. #pragma once
  34. #ifdef __clang__
  35. #pragma clang diagnostic push
  36. #pragma clang diagnostic ignored "-Wnon-virtual-dtor"
  37. #endif
  38. // Constants
  39. //
  40. #ifndef E_NOTFOUND
  41. #define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)
  42. #endif
  43. #ifndef E_FILENOTFOUND
  44. #define E_FILENOTFOUND HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)
  45. #endif
  46. // Enumerations
  47. //
  48. /// <summary>
  49. /// The state of an instance.
  50. /// </summary>
  51. enum InstanceState : unsigned {
  52. /// <summary>
  53. /// The instance state has not been determined.
  54. /// </summary>
  55. eNone = 0,
  56. /// <summary>
  57. /// The instance installation path exists.
  58. /// </summary>
  59. eLocal = 1,
  60. /// <summary>
  61. /// A product is registered to the instance.
  62. /// </summary>
  63. eRegistered = 2,
  64. /// <summary>
  65. /// No reboot is required for the instance.
  66. /// </summary>
  67. eNoRebootRequired = 4,
  68. /// <summary>
  69. /// The instance represents a complete install.
  70. /// </summary>
  71. eComplete = MAXUINT,
  72. };
  73. // Forward interface declarations
  74. //
  75. #ifndef __ISetupInstance_FWD_DEFINED__
  76. #define __ISetupInstance_FWD_DEFINED__
  77. typedef struct ISetupInstance ISetupInstance;
  78. #endif
  79. #ifndef __ISetupInstance2_FWD_DEFINED__
  80. #define __ISetupInstance2_FWD_DEFINED__
  81. typedef struct ISetupInstance2 ISetupInstance2;
  82. #endif
  83. #ifndef __IEnumSetupInstances_FWD_DEFINED__
  84. #define __IEnumSetupInstances_FWD_DEFINED__
  85. typedef struct IEnumSetupInstances IEnumSetupInstances;
  86. #endif
  87. #ifndef __ISetupConfiguration_FWD_DEFINED__
  88. #define __ISetupConfiguration_FWD_DEFINED__
  89. typedef struct ISetupConfiguration ISetupConfiguration;
  90. #endif
  91. #ifndef __ISetupConfiguration2_FWD_DEFINED__
  92. #define __ISetupConfiguration2_FWD_DEFINED__
  93. typedef struct ISetupConfiguration2 ISetupConfiguration2;
  94. #endif
  95. #ifndef __ISetupPackageReference_FWD_DEFINED__
  96. #define __ISetupPackageReference_FWD_DEFINED__
  97. typedef struct ISetupPackageReference ISetupPackageReference;
  98. #endif
  99. #ifndef __ISetupHelper_FWD_DEFINED__
  100. #define __ISetupHelper_FWD_DEFINED__
  101. typedef struct ISetupHelper ISetupHelper;
  102. #endif
  103. // Forward class declarations
  104. //
  105. #ifndef __SetupConfiguration_FWD_DEFINED__
  106. #define __SetupConfiguration_FWD_DEFINED__
  107. #ifdef __cplusplus
  108. typedef class SetupConfiguration SetupConfiguration;
  109. #endif
  110. #endif
  111. #ifdef __cplusplus
  112. extern "C" {
  113. #endif
  114. // Interface definitions
  115. //
  116. EXTERN_C const IID IID_ISetupInstance;
  117. #if defined(__cplusplus) && !defined(CINTERFACE)
  118. /// <summary>
  119. /// Information about an instance of a product.
  120. /// </summary>
  121. struct DECLSPEC_UUID("B41463C3-8866-43B5-BC33-2B0676F7F42E")
  122. DECLSPEC_NOVTABLE ISetupInstance : public IUnknown {
  123. /// <summary>
  124. /// Gets the instance identifier (should match the name of the parent instance
  125. /// directory).
  126. /// </summary>
  127. /// <param name="pbstrInstanceId">The instance identifier.</param>
  128. /// <returns>Standard HRESULT indicating success or failure, including
  129. /// E_FILENOTFOUND if the instance state does not exist.</returns>
  130. STDMETHOD(GetInstanceId)(_Out_ BSTR *pbstrInstanceId) = 0;
  131. /// <summary>
  132. /// Gets the local date and time when the installation was originally
  133. /// installed.
  134. /// </summary>
  135. /// <param name="pInstallDate">The local date and time when the installation
  136. /// was originally installed.</param>
  137. /// <returns>Standard HRESULT indicating success or failure, including
  138. /// E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the
  139. /// property is not defined.</returns>
  140. STDMETHOD(GetInstallDate)(_Out_ LPFILETIME pInstallDate) = 0;
  141. /// <summary>
  142. /// Gets the unique name of the installation, often indicating the branch and
  143. /// other information used for telemetry.
  144. /// </summary>
  145. /// <param name="pbstrInstallationName">The unique name of the installation,
  146. /// often indicating the branch and other information used for
  147. /// telemetry.</param>
  148. /// <returns>Standard HRESULT indicating success or failure, including
  149. /// E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the
  150. /// property is not defined.</returns>
  151. STDMETHOD(GetInstallationName)(_Out_ BSTR *pbstrInstallationName) = 0;
  152. /// <summary>
  153. /// Gets the path to the installation root of the product.
  154. /// </summary>
  155. /// <param name="pbstrInstallationPath">The path to the installation root of
  156. /// the product.</param>
  157. /// <returns>Standard HRESULT indicating success or failure, including
  158. /// E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the
  159. /// property is not defined.</returns>
  160. STDMETHOD(GetInstallationPath)(_Out_ BSTR *pbstrInstallationPath) = 0;
  161. /// <summary>
  162. /// Gets the version of the product installed in this instance.
  163. /// </summary>
  164. /// <param name="pbstrInstallationVersion">The version of the product
  165. /// installed in this instance.</param>
  166. /// <returns>Standard HRESULT indicating success or failure, including
  167. /// E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the
  168. /// property is not defined.</returns>
  169. STDMETHOD(GetInstallationVersion)(_Out_ BSTR *pbstrInstallationVersion) = 0;
  170. /// <summary>
  171. /// Gets the display name (title) of the product installed in this instance.
  172. /// </summary>
  173. /// <param name="lcid">The LCID for the display name.</param>
  174. /// <param name="pbstrDisplayName">The display name (title) of the product
  175. /// installed in this instance.</param>
  176. /// <returns>Standard HRESULT indicating success or failure, including
  177. /// E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the
  178. /// property is not defined.</returns>
  179. STDMETHOD(GetDisplayName)(_In_ LCID lcid, _Out_ BSTR *pbstrDisplayName) = 0;
  180. /// <summary>
  181. /// Gets the description of the product installed in this instance.
  182. /// </summary>
  183. /// <param name="lcid">The LCID for the description.</param>
  184. /// <param name="pbstrDescription">The description of the product installed in
  185. /// this instance.</param>
  186. /// <returns>Standard HRESULT indicating success or failure, including
  187. /// E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the
  188. /// property is not defined.</returns>
  189. STDMETHOD(GetDescription)(_In_ LCID lcid, _Out_ BSTR *pbstrDescription) = 0;
  190. /// <summary>
  191. /// Resolves the optional relative path to the root path of the instance.
  192. /// </summary>
  193. /// <param name="pwszRelativePath">A relative path within the instance to
  194. /// resolve, or NULL to get the root path.</param>
  195. /// <param name="pbstrAbsolutePath">The full path to the optional relative
  196. /// path within the instance. If the relative path is NULL, the root path will
  197. /// always terminate in a backslash.</param>
  198. /// <returns>Standard HRESULT indicating success or failure, including
  199. /// E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the
  200. /// property is not defined.</returns>
  201. STDMETHOD(ResolvePath)
  202. (_In_opt_z_ LPCOLESTR pwszRelativePath, _Out_ BSTR *pbstrAbsolutePath) = 0;
  203. };
  204. #endif
  205. EXTERN_C const IID IID_ISetupInstance2;
  206. #if defined(__cplusplus) && !defined(CINTERFACE)
  207. /// <summary>
  208. /// Information about an instance of a product.
  209. /// </summary>
  210. struct DECLSPEC_UUID("89143C9A-05AF-49B0-B717-72E218A2185C")
  211. DECLSPEC_NOVTABLE ISetupInstance2 : public ISetupInstance {
  212. /// <summary>
  213. /// Gets the state of the instance.
  214. /// </summary>
  215. /// <param name="pState">The state of the instance.</param>
  216. /// <returns>Standard HRESULT indicating success or failure, including
  217. /// E_FILENOTFOUND if the instance state does not exist.</returns>
  218. STDMETHOD(GetState)(_Out_ InstanceState *pState) = 0;
  219. /// <summary>
  220. /// Gets an array of package references registered to the instance.
  221. /// </summary>
  222. /// <param name="ppsaPackages">Pointer to an array of <see
  223. /// cref="ISetupPackageReference"/>.</param>
  224. /// <returns>Standard HRESULT indicating success or failure, including
  225. /// E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the
  226. /// packages property is not defined.</returns>
  227. STDMETHOD(GetPackages)(_Out_ LPSAFEARRAY *ppsaPackages) = 0;
  228. /// <summary>
  229. /// Gets a pointer to the <see cref="ISetupPackageReference"/> that represents
  230. /// the registered product.
  231. /// </summary>
  232. /// <param name="ppPackage">Pointer to an instance of <see
  233. /// cref="ISetupPackageReference"/>. This may be NULL if <see
  234. /// cref="GetState"/> does not return <see cref="eComplete"/>.</param>
  235. /// <returns>Standard HRESULT indicating success or failure, including
  236. /// E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the
  237. /// packages property is not defined.</returns>
  238. STDMETHOD(GetProduct)
  239. (_Outptr_result_maybenull_ ISetupPackageReference **ppPackage) = 0;
  240. /// <summary>
  241. /// Gets the relative path to the product application, if available.
  242. /// </summary>
  243. /// <param name="pbstrProductPath">The relative path to the product
  244. /// application, if available.</param>
  245. /// <returns>Standard HRESULT indicating success or failure, including
  246. /// E_FILENOTFOUND if the instance state does not exist.</returns>
  247. STDMETHOD(GetProductPath)
  248. (_Outptr_result_maybenull_ BSTR *pbstrProductPath) = 0;
  249. };
  250. #endif
  251. EXTERN_C const IID IID_IEnumSetupInstances;
  252. #if defined(__cplusplus) && !defined(CINTERFACE)
  253. /// <summary>
  254. /// A enumerator of installed <see cref="ISetupInstance"/> objects.
  255. /// </summary>
  256. struct DECLSPEC_UUID("6380BCFF-41D3-4B2E-8B2E-BF8A6810C848")
  257. DECLSPEC_NOVTABLE IEnumSetupInstances : public IUnknown {
  258. /// <summary>
  259. /// Retrieves the next set of product instances in the enumeration sequence.
  260. /// </summary>
  261. /// <param name="celt">The number of product instances to retrieve.</param>
  262. /// <param name="rgelt">A pointer to an array of <see
  263. /// cref="ISetupInstance"/>.</param>
  264. /// <param name="pceltFetched">A pointer to the number of product instances
  265. /// retrieved. If celt is 1 this parameter may be NULL.</param>
  266. /// <returns>S_OK if the number of elements were fetched, S_FALSE if nothing
  267. /// was fetched (at end of enumeration), E_INVALIDARG if celt is greater than
  268. /// 1 and pceltFetched is NULL, or E_OUTOFMEMORY if an <see
  269. /// cref="ISetupInstance"/> could not be allocated.</returns>
  270. STDMETHOD(Next)
  271. (_In_ ULONG celt, _Out_writes_to_(celt, *pceltFetched) ISetupInstance **rgelt,
  272. _Out_opt_ _Deref_out_range_(0, celt) ULONG *pceltFetched) = 0;
  273. /// <summary>
  274. /// Skips the next set of product instances in the enumeration sequence.
  275. /// </summary>
  276. /// <param name="celt">The number of product instances to skip.</param>
  277. /// <returns>S_OK if the number of elements could be skipped; otherwise,
  278. /// S_FALSE;</returns>
  279. STDMETHOD(Skip)(_In_ ULONG celt) = 0;
  280. /// <summary>
  281. /// Resets the enumeration sequence to the beginning.
  282. /// </summary>
  283. /// <returns>Always returns S_OK;</returns>
  284. STDMETHOD(Reset)(void) = 0;
  285. /// <summary>
  286. /// Creates a new enumeration object in the same state as the current
  287. /// enumeration object: the new object points to the same place in the
  288. /// enumeration sequence.
  289. /// </summary>
  290. /// <param name="ppenum">A pointer to a pointer to a new <see
  291. /// cref="IEnumSetupInstances"/> interface. If the method fails, this
  292. /// parameter is undefined.</param>
  293. /// <returns>S_OK if a clone was returned; otherwise, E_OUTOFMEMORY.</returns>
  294. STDMETHOD(Clone)(_Deref_out_opt_ IEnumSetupInstances **ppenum) = 0;
  295. };
  296. #endif
  297. EXTERN_C const IID IID_ISetupConfiguration;
  298. #if defined(__cplusplus) && !defined(CINTERFACE)
  299. /// <summary>
  300. /// Gets information about product instances set up on the machine.
  301. /// </summary>
  302. struct DECLSPEC_UUID("42843719-DB4C-46C2-8E7C-64F1816EFD5B")
  303. DECLSPEC_NOVTABLE ISetupConfiguration : public IUnknown {
  304. /// <summary>
  305. /// Enumerates all completed product instances installed.
  306. /// </summary>
  307. /// <param name="ppEnumInstances">An enumeration of completed, installed
  308. /// product instances.</param>
  309. /// <returns>Standard HRESULT indicating success or failure.</returns>
  310. STDMETHOD(EnumInstances)(_Out_ IEnumSetupInstances **ppEnumInstances) = 0;
  311. /// <summary>
  312. /// Gets the instance for the current process path.
  313. /// </summary>
  314. /// <param name="ppInstance">The instance for the current process
  315. /// path.</param>
  316. /// <returns>The instance for the current process path, or E_NOTFOUND if not
  317. /// found.</returns>
  318. STDMETHOD(GetInstanceForCurrentProcess)
  319. (_Out_ ISetupInstance **ppInstance) = 0;
  320. /// <summary>
  321. /// Gets the instance for the given path.
  322. /// </summary>
  323. /// <param name="ppInstance">The instance for the given path.</param>
  324. /// <returns>The instance for the given path, or E_NOTFOUND if not
  325. /// found.</returns>
  326. STDMETHOD(GetInstanceForPath)
  327. (_In_z_ LPCWSTR wzPath, _Out_ ISetupInstance **ppInstance) = 0;
  328. };
  329. #endif
  330. EXTERN_C const IID IID_ISetupConfiguration2;
  331. #if defined(__cplusplus) && !defined(CINTERFACE)
  332. /// <summary>
  333. /// Gets information about product instances.
  334. /// </summary>
  335. struct DECLSPEC_UUID("26AAB78C-4A60-49D6-AF3B-3C35BC93365D")
  336. DECLSPEC_NOVTABLE ISetupConfiguration2 : public ISetupConfiguration {
  337. /// <summary>
  338. /// Enumerates all product instances.
  339. /// </summary>
  340. /// <param name="ppEnumInstances">An enumeration of all product
  341. /// instances.</param>
  342. /// <returns>Standard HRESULT indicating success or failure.</returns>
  343. STDMETHOD(EnumAllInstances)(_Out_ IEnumSetupInstances **ppEnumInstances) = 0;
  344. };
  345. #endif
  346. EXTERN_C const IID IID_ISetupPackageReference;
  347. #if defined(__cplusplus) && !defined(CINTERFACE)
  348. /// <summary>
  349. /// A reference to a package.
  350. /// </summary>
  351. struct DECLSPEC_UUID("da8d8a16-b2b6-4487-a2f1-594ccccd6bf5")
  352. DECLSPEC_NOVTABLE ISetupPackageReference : public IUnknown {
  353. /// <summary>
  354. /// Gets the general package identifier.
  355. /// </summary>
  356. /// <param name="pbstrId">The general package identifier.</param>
  357. /// <returns>Standard HRESULT indicating success or failure.</returns>
  358. STDMETHOD(GetId)(_Out_ BSTR *pbstrId) = 0;
  359. /// <summary>
  360. /// Gets the version of the package.
  361. /// </summary>
  362. /// <param name="pbstrVersion">The version of the package.</param>
  363. /// <returns>Standard HRESULT indicating success or failure.</returns>
  364. STDMETHOD(GetVersion)(_Out_ BSTR *pbstrVersion) = 0;
  365. /// <summary>
  366. /// Gets the target process architecture of the package.
  367. /// </summary>
  368. /// <param name="pbstrChip">The target process architecture of the
  369. /// package.</param>
  370. /// <returns>Standard HRESULT indicating success or failure.</returns>
  371. STDMETHOD(GetChip)(_Out_ BSTR *pbstrChip) = 0;
  372. /// <summary>
  373. /// Gets the language and optional region identifier.
  374. /// </summary>
  375. /// <param name="pbstrLanguage">The language and optional region
  376. /// identifier.</param>
  377. /// <returns>Standard HRESULT indicating success or failure.</returns>
  378. STDMETHOD(GetLanguage)(_Out_ BSTR *pbstrLanguage) = 0;
  379. /// <summary>
  380. /// Gets the build branch of the package.
  381. /// </summary>
  382. /// <param name="pbstrBranch">The build branch of the package.</param>
  383. /// <returns>Standard HRESULT indicating success or failure.</returns>
  384. STDMETHOD(GetBranch)(_Out_ BSTR *pbstrBranch) = 0;
  385. /// <summary>
  386. /// Gets the type of the package.
  387. /// </summary>
  388. /// <param name="pbstrType">The type of the package.</param>
  389. /// <returns>Standard HRESULT indicating success or failure.</returns>
  390. STDMETHOD(GetType)(_Out_ BSTR *pbstrType) = 0;
  391. /// <summary>
  392. /// Gets the unique identifier consisting of all defined tokens.
  393. /// </summary>
  394. /// <param name="pbstrUniqueId">The unique identifier consisting of all
  395. /// defined tokens.</param>
  396. /// <returns>Standard HRESULT indicating success or failure, including
  397. /// E_UNEXPECTED if no Id was defined (required).</returns>
  398. STDMETHOD(GetUniqueId)(_Out_ BSTR *pbstrUniqueId) = 0;
  399. };
  400. #endif
  401. EXTERN_C const IID IID_ISetupHelper;
  402. #if defined(__cplusplus) && !defined(CINTERFACE)
  403. /// <summary>
  404. /// Helper functions.
  405. /// </summary>
  406. /// <remarks>
  407. /// You can query for this interface from the <see cref="SetupConfiguration"/>
  408. /// class.
  409. /// </remarks>
  410. struct DECLSPEC_UUID("42b21b78-6192-463e-87bf-d577838f1d5c")
  411. DECLSPEC_NOVTABLE ISetupHelper : public IUnknown {
  412. /// <summary>
  413. /// Parses a dotted quad version string into a 64-bit unsigned integer.
  414. /// </summary>
  415. /// <param name="pwszVersion">The dotted quad version string to parse, e.g.
  416. /// 1.2.3.4.</param>
  417. /// <param name="pullVersion">A 64-bit unsigned integer representing the
  418. /// version. You can compare this to other versions.</param>
  419. /// <returns>Standard HRESULT indicating success or failure.</returns>
  420. STDMETHOD(ParseVersion)
  421. (_In_ LPCOLESTR pwszVersion, _Out_ PULONGLONG pullVersion) = 0;
  422. /// <summary>
  423. /// Parses a dotted quad version string into a 64-bit unsigned integer.
  424. /// </summary>
  425. /// <param name="pwszVersionRange">The string containing 1 or 2 dotted quad
  426. /// version strings to parse, e.g. [1.0,) that means 1.0.0.0 or newer.</param>
  427. /// <param name="pullMinVersion">A 64-bit unsigned integer representing the
  428. /// minimum version, which may be 0. You can compare this to other
  429. /// versions.</param>
  430. /// <param name="pullMaxVersion">A 64-bit unsigned integer representing the
  431. /// maximum version, which may be MAXULONGLONG. You can compare this to other
  432. /// versions.</param>
  433. /// <returns>Standard HRESULT indicating success or failure.</returns>
  434. STDMETHOD(ParseVersionRange)
  435. (_In_ LPCOLESTR pwszVersionRange, _Out_ PULONGLONG pullMinVersion,
  436. _Out_ PULONGLONG pullMaxVersion) = 0;
  437. };
  438. #endif
  439. // Class declarations
  440. //
  441. EXTERN_C const CLSID CLSID_SetupConfiguration;
  442. #ifdef __cplusplus
  443. /// <summary>
  444. /// This class implements <see cref="ISetupConfiguration"/>, <see
  445. /// cref="ISetupConfiguration2"/>, and <see cref="ISetupHelper"/>.
  446. /// </summary>
  447. class DECLSPEC_UUID("177F0C4A-1CD3-4DE7-A32C-71DBBB9FA36D") SetupConfiguration;
  448. #endif
  449. // Function declarations
  450. //
  451. /// <summary>
  452. /// Gets an <see cref="ISetupConfiguration"/> that provides information about
  453. /// product instances installed on the machine.
  454. /// </summary>
  455. /// <param name="ppConfiguration">The <see cref="ISetupConfiguration"/> that
  456. /// provides information about product instances installed on the
  457. /// machine.</param>
  458. /// <param name="pReserved">Reserved for future use.</param>
  459. /// <returns>Standard HRESULT indicating success or failure.</returns>
  460. STDMETHODIMP GetSetupConfiguration(_Out_ ISetupConfiguration **ppConfiguration,
  461. _Reserved_ LPVOID pReserved);
  462. #ifdef __cplusplus
  463. }
  464. #endif
  465. #ifdef __clang__
  466. #pragma clang diagnostic pop
  467. #endif
  468. #ifdef __GNUC__
  469. #pragma GCC diagnostic pop
  470. #endif