| // <copyright file="Setup.Configuration.h" company="Microsoft Corporation"> |
| // Copyright (C) Microsoft Corporation. All rights reserved. |
| // </copyright> |
| |
| // This file is licensed under "The MIT License(MIT)". |
| // This file is released by Visual Studio setup team for consumption by external applications. |
| // For more information please look at this git repo https://github.com/microsoft/vs-setup-samples |
| |
| #ifndef SetupConfiguration_h |
| #define SetupConfiguration_h |
| |
| #include <objbase.h> |
| |
| // Constants |
| // |
| #ifndef E_NOTFOUND |
| #define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND) |
| #endif |
| |
| #ifndef E_FILENOTFOUND |
| #define E_FILENOTFOUND HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) |
| #endif |
| |
| #if defined(_WIN32) && !defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) |
| |
| #ifndef _Outptr_result_maybenull_ |
| #define _Outptr_result_maybenull_ |
| #endif |
| #ifndef _Out_writes_to_ |
| #define _Out_writes_to_(x,y) |
| #endif |
| #ifndef _Reserved_ |
| #define _Reserved_ |
| #endif |
| #ifndef MAXUINT |
| #define MAXUINT ((UINT)~((UINT)0)) |
| #endif |
| |
| // Enumerations |
| // |
| /// <summary> |
| /// The state of an instance. |
| /// </summary> |
| enum InstanceState |
| { |
| /// <summary> |
| /// The instance state has not been determined. |
| /// </summary> |
| eNone = 0, |
| |
| /// <summary> |
| /// The instance installation path exists. |
| /// </summary> |
| eLocal = 1, |
| |
| /// <summary> |
| /// A product is registered to the instance. |
| /// </summary> |
| eRegistered = 2, |
| |
| /// <summary> |
| /// No reboot is required for the instance. |
| /// </summary> |
| eNoRebootRequired = 4, |
| |
| /// <summary> |
| /// The instance represents a complete install. |
| /// </summary> |
| eComplete = MAXUINT, |
| }; |
| |
| // Forward interface declarations |
| // |
| #ifndef __ISetupInstance_FWD_DEFINED__ |
| #define __ISetupInstance_FWD_DEFINED__ |
| typedef struct ISetupInstance ISetupInstance; |
| #endif |
| |
| #ifndef __ISetupInstance2_FWD_DEFINED__ |
| #define __ISetupInstance2_FWD_DEFINED__ |
| typedef struct ISetupInstance2 ISetupInstance2; |
| #endif |
| |
| #ifndef __IEnumSetupInstances_FWD_DEFINED__ |
| #define __IEnumSetupInstances_FWD_DEFINED__ |
| typedef struct IEnumSetupInstances IEnumSetupInstances; |
| #endif |
| |
| #ifndef __ISetupConfiguration_FWD_DEFINED__ |
| #define __ISetupConfiguration_FWD_DEFINED__ |
| typedef struct ISetupConfiguration ISetupConfiguration; |
| #endif |
| |
| #ifndef __ISetupConfiguration2_FWD_DEFINED__ |
| #define __ISetupConfiguration2_FWD_DEFINED__ |
| typedef struct ISetupConfiguration2 ISetupConfiguration2; |
| #endif |
| |
| #ifndef __ISetupPackageReference_FWD_DEFINED__ |
| #define __ISetupPackageReference_FWD_DEFINED__ |
| typedef struct ISetupPackageReference ISetupPackageReference; |
| #endif |
| |
| #ifndef __ISetupHelper_FWD_DEFINED__ |
| #define __ISetupHelper_FWD_DEFINED__ |
| typedef struct ISetupHelper ISetupHelper; |
| #endif |
| |
| // Forward class declarations |
| // |
| #ifndef __SetupConfiguration_FWD_DEFINED__ |
| #define __SetupConfiguration_FWD_DEFINED__ |
| |
| #ifdef __cplusplus |
| typedef class SetupConfiguration SetupConfiguration; |
| #endif |
| |
| #endif |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| // Interface definitions |
| // |
| EXTERN_C const IID IID_ISetupInstance; |
| |
| #if defined(__cplusplus) && !defined(CINTERFACE) |
| /// <summary> |
| /// Information about an instance of a product. |
| /// </summary> |
| struct DECLSPEC_UUID("B41463C3-8866-43B5-BC33-2B0676F7F42E") DECLSPEC_NOVTABLE ISetupInstance : public IUnknown |
| { |
| /// <summary> |
| /// Gets the instance identifier (should match the name of the parent instance directory). |
| /// </summary> |
| /// <param name="pbstrInstanceId">The instance identifier.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist.</returns> |
| STDMETHOD(GetInstanceId)( |
| _Out_ BSTR* pbstrInstanceId |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the local date and time when the installation was originally installed. |
| /// </summary> |
| /// <param name="pInstallDate">The local date and time when the installation was originally installed.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined.</returns> |
| STDMETHOD(GetInstallDate)( |
| _Out_ LPFILETIME pInstallDate |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the unique name of the installation, often indicating the branch and other information used for telemetry. |
| /// </summary> |
| /// <param name="pbstrInstallationName">The unique name of the installation, often indicating the branch and other information used for telemetry.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined.</returns> |
| STDMETHOD(GetInstallationName)( |
| _Out_ BSTR* pbstrInstallationName |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the path to the installation root of the product. |
| /// </summary> |
| /// <param name="pbstrInstallationPath">The path to the installation root of the product.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined.</returns> |
| STDMETHOD(GetInstallationPath)( |
| _Out_ BSTR* pbstrInstallationPath |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the version of the product installed in this instance. |
| /// </summary> |
| /// <param name="pbstrInstallationVersion">The version of the product installed in this instance.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined.</returns> |
| STDMETHOD(GetInstallationVersion)( |
| _Out_ BSTR* pbstrInstallationVersion |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the display name (title) of the product installed in this instance. |
| /// </summary> |
| /// <param name="lcid">The LCID for the display name.</param> |
| /// <param name="pbstrDisplayName">The display name (title) of the product installed in this instance.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined.</returns> |
| STDMETHOD(GetDisplayName)( |
| _In_ LCID lcid, |
| _Out_ BSTR* pbstrDisplayName |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the description of the product installed in this instance. |
| /// </summary> |
| /// <param name="lcid">The LCID for the description.</param> |
| /// <param name="pbstrDescription">The description of the product installed in this instance.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined.</returns> |
| STDMETHOD(GetDescription)( |
| _In_ LCID lcid, |
| _Out_ BSTR* pbstrDescription |
| ) = 0; |
| |
| /// <summary> |
| /// Resolves the optional relative path to the root path of the instance. |
| /// </summary> |
| /// <param name="pwszRelativePath">A relative path within the instance to resolve, or NULL to get the root path.</param> |
| /// <param name="pbstrAbsolutePath">The full path to the optional relative path within the instance. If the relative path is NULL, the root path will always terminate in a backslash.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined.</returns> |
| STDMETHOD(ResolvePath)( |
| _In_opt_z_ LPCOLESTR pwszRelativePath, |
| _Out_ BSTR* pbstrAbsolutePath |
| ) = 0; |
| }; |
| #endif |
| |
| EXTERN_C const IID IID_ISetupInstance2; |
| |
| #if defined(__cplusplus) && !defined(CINTERFACE) |
| /// <summary> |
| /// Information about an instance of a product. |
| /// </summary> |
| struct DECLSPEC_UUID("89143C9A-05AF-49B0-B717-72E218A2185C") DECLSPEC_NOVTABLE ISetupInstance2 : public ISetupInstance |
| { |
| /// <summary> |
| /// Gets the state of the instance. |
| /// </summary> |
| /// <param name="pState">The state of the instance.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist.</returns> |
| STDMETHOD(GetState)( |
| _Out_ InstanceState* pState |
| ) = 0; |
| |
| /// <summary> |
| /// Gets an array of package references registered to the instance. |
| /// </summary> |
| /// <param name="ppsaPackages">Pointer to an array of <see cref="ISetupPackageReference"/>.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the packages property is not defined.</returns> |
| STDMETHOD(GetPackages)( |
| _Out_ LPSAFEARRAY* ppsaPackages |
| ) = 0; |
| |
| /// <summary> |
| /// Gets a pointer to the <see cref="ISetupPackageReference"/> that represents the registered product. |
| /// </summary> |
| /// <param name="ppPackage">Pointer to an instance of <see cref="ISetupPackageReference"/>. This may be NULL if <see cref="GetState"/> does not return <see cref="eComplete"/>.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the packages property is not defined.</returns> |
| STDMETHOD(GetProduct)( |
| _Outptr_result_maybenull_ ISetupPackageReference** ppPackage |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the relative path to the product application, if available. |
| /// </summary> |
| /// <param name="pbstrProductPath">The relative path to the product application, if available.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist.</returns> |
| STDMETHOD(GetProductPath)( |
| _Outptr_result_maybenull_ BSTR* pbstrProductPath |
| ) = 0; |
| }; |
| #endif |
| |
| EXTERN_C const IID IID_IEnumSetupInstances; |
| |
| #if defined(__cplusplus) && !defined(CINTERFACE) |
| /// <summary> |
| /// A enumerator of installed <see cref="ISetupInstance"/> objects. |
| /// </summary> |
| struct DECLSPEC_UUID("6380BCFF-41D3-4B2E-8B2E-BF8A6810C848") DECLSPEC_NOVTABLE IEnumSetupInstances : public IUnknown |
| { |
| /// <summary> |
| /// Retrieves the next set of product instances in the enumeration sequence. |
| /// </summary> |
| /// <param name="celt">The number of product instances to retrieve.</param> |
| /// <param name="rgelt">A pointer to an array of <see cref="ISetupInstance"/>.</param> |
| /// <param name="pceltFetched">A pointer to the number of product instances retrieved. If celt is 1 this parameter may be NULL.</param> |
| /// <returns>S_OK if the number of elements were fetched, S_FALSE if nothing was fetched (at end of enumeration), E_INVALIDARG if celt is greater than 1 and pceltFetched is NULL, or E_OUTOFMEMORY if an <see cref="ISetupInstance"/> could not be allocated.</returns> |
| STDMETHOD(Next)( |
| _In_ ULONG celt, |
| _Out_writes_to_(celt, *pceltFetched) ISetupInstance** rgelt, |
| _Out_opt_ _Deref_out_range_(0, celt) ULONG* pceltFetched |
| ) = 0; |
| |
| /// <summary> |
| /// Skips the next set of product instances in the enumeration sequence. |
| /// </summary> |
| /// <param name="celt">The number of product instances to skip.</param> |
| /// <returns>S_OK if the number of elements could be skipped; otherwise, S_FALSE;</returns> |
| STDMETHOD(Skip)( |
| _In_ ULONG celt |
| ) = 0; |
| |
| /// <summary> |
| /// Resets the enumeration sequence to the beginning. |
| /// </summary> |
| /// <returns>Always returns S_OK;</returns> |
| STDMETHOD(Reset)(void) = 0; |
| |
| /// <summary> |
| /// Creates a new enumeration object in the same state as the current enumeration object: the new object points to the same place in the enumeration sequence. |
| /// </summary> |
| /// <param name="ppenum">A pointer to a pointer to a new <see cref="IEnumSetupInstances"/> interface. If the method fails, this parameter is undefined.</param> |
| /// <returns>S_OK if a clone was returned; otherwise, E_OUTOFMEMORY.</returns> |
| STDMETHOD(Clone)( |
| _Deref_out_opt_ IEnumSetupInstances** ppenum |
| ) = 0; |
| }; |
| #endif |
| |
| EXTERN_C const IID IID_ISetupConfiguration; |
| |
| #if defined(__cplusplus) && !defined(CINTERFACE) |
| /// <summary> |
| /// Gets information about product instances set up on the machine. |
| /// </summary> |
| struct DECLSPEC_UUID("42843719-DB4C-46C2-8E7C-64F1816EFD5B") DECLSPEC_NOVTABLE ISetupConfiguration : public IUnknown |
| { |
| /// <summary> |
| /// Enumerates all completed product instances installed. |
| /// </summary> |
| /// <param name="ppEnumInstances">An enumeration of completed, installed product instances.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(EnumInstances)( |
| _Out_ IEnumSetupInstances** ppEnumInstances |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the instance for the current process path. |
| /// </summary> |
| /// <param name="ppInstance">The instance for the current process path.</param> |
| /// <returns>The instance for the current process path, or E_NOTFOUND if not found.</returns> |
| STDMETHOD(GetInstanceForCurrentProcess)( |
| _Out_ ISetupInstance** ppInstance |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the instance for the given path. |
| /// </summary> |
| /// <param name="ppInstance">The instance for the given path.</param> |
| /// <returns>The instance for the given path, or E_NOTFOUND if not found.</returns> |
| STDMETHOD(GetInstanceForPath)( |
| _In_z_ LPCWSTR wzPath, |
| _Out_ ISetupInstance** ppInstance |
| ) = 0; |
| }; |
| #endif |
| |
| EXTERN_C const IID IID_ISetupConfiguration2; |
| |
| #if defined(__cplusplus) && !defined(CINTERFACE) |
| /// <summary> |
| /// Gets information about product instances. |
| /// </summary> |
| struct DECLSPEC_UUID("26AAB78C-4A60-49D6-AF3B-3C35BC93365D") DECLSPEC_NOVTABLE ISetupConfiguration2 : public ISetupConfiguration |
| { |
| /// <summary> |
| /// Enumerates all product instances. |
| /// </summary> |
| /// <param name="ppEnumInstances">An enumeration of all product instances.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(EnumAllInstances)( |
| _Out_ IEnumSetupInstances** ppEnumInstances |
| ) = 0; |
| }; |
| #endif |
| |
| EXTERN_C const IID IID_ISetupPackageReference; |
| |
| #if defined(__cplusplus) && !defined(CINTERFACE) |
| /// <summary> |
| /// A reference to a package. |
| /// </summary> |
| struct DECLSPEC_UUID("da8d8a16-b2b6-4487-a2f1-594ccccd6bf5") DECLSPEC_NOVTABLE ISetupPackageReference : public IUnknown |
| { |
| /// <summary> |
| /// Gets the general package identifier. |
| /// </summary> |
| /// <param name="pbstrId">The general package identifier.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(GetId)( |
| _Out_ BSTR* pbstrId |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the version of the package. |
| /// </summary> |
| /// <param name="pbstrVersion">The version of the package.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(GetVersion)( |
| _Out_ BSTR* pbstrVersion |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the target process architecture of the package. |
| /// </summary> |
| /// <param name="pbstrChip">The target process architecture of the package.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(GetChip)( |
| _Out_ BSTR* pbstrChip |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the language and optional region identifier. |
| /// </summary> |
| /// <param name="pbstrLanguage">The language and optional region identifier.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(GetLanguage)( |
| _Out_ BSTR* pbstrLanguage |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the build branch of the package. |
| /// </summary> |
| /// <param name="pbstrBranch">The build branch of the package.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(GetBranch)( |
| _Out_ BSTR* pbstrBranch |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the type of the package. |
| /// </summary> |
| /// <param name="pbstrType">The type of the package.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(GetType)( |
| _Out_ BSTR* pbstrType |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the unique identifier consisting of all defined tokens. |
| /// </summary> |
| /// <param name="pbstrUniqueId">The unique identifier consisting of all defined tokens.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_UNEXPECTED if no Id was defined (required).</returns> |
| STDMETHOD(GetUniqueId)( |
| _Out_ BSTR* pbstrUniqueId |
| ) = 0; |
| }; |
| #endif |
| |
| EXTERN_C const IID IID_ISetupHelper; |
| |
| #if defined(__cplusplus) && !defined(CINTERFACE) |
| /// <summary> |
| /// Helper functions. |
| /// </summary> |
| /// <remarks> |
| /// You can query for this interface from the <see cref="SetupConfiguration"/> class. |
| /// </remarks> |
| struct DECLSPEC_UUID("42b21b78-6192-463e-87bf-d577838f1d5c") DECLSPEC_NOVTABLE ISetupHelper : public IUnknown |
| { |
| /// <summary> |
| /// Parses a dotted quad version string into a 64-bit unsigned integer. |
| /// </summary> |
| /// <param name="pwszVersion">The dotted quad version string to parse, e.g. 1.2.3.4.</param> |
| /// <param name="pullVersion">A 64-bit unsigned integer representing the version. You can compare this to other versions.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(ParseVersion)( |
| _In_ LPCOLESTR pwszVersion, |
| _Out_ PULONGLONG pullVersion |
| ) = 0; |
| |
| /// <summary> |
| /// Parses a dotted quad version string into a 64-bit unsigned integer. |
| /// </summary> |
| /// <param name="pwszVersionRange">The string containing 1 or 2 dotted quad version strings to parse, e.g. [1.0,) that means 1.0.0.0 or newer.</param> |
| /// <param name="pullMinVersion">A 64-bit unsigned integer representing the minimum version, which may be 0. You can compare this to other versions.</param> |
| /// <param name="pullMaxVersion">A 64-bit unsigned integer representing the maximum version, which may be MAXULONGLONG. You can compare this to other versions.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(ParseVersionRange)( |
| _In_ LPCOLESTR pwszVersionRange, |
| _Out_ PULONGLONG pullMinVersion, |
| _Out_ PULONGLONG pullMaxVersion |
| ) = 0; |
| }; |
| #endif |
| |
| // Class declarations |
| // |
| EXTERN_C const CLSID CLSID_SetupConfiguration; |
| |
| #ifdef __cplusplus |
| /// <summary> |
| /// This class implements <see cref="ISetupConfiguration"/>, <see cref="ISetupConfiguration2"/>, and <see cref="ISetupHelper"/>. |
| /// </summary> |
| class DECLSPEC_UUID("177F0C4A-1CD3-4DE7-A32C-71DBBB9FA36D") SetupConfiguration; |
| #endif |
| |
| // Function declarations |
| // |
| /// <summary> |
| /// Gets an <see cref="ISetupConfiguration"/> that provides information about product instances installed on the machine. |
| /// </summary> |
| /// <param name="ppConfiguration">The <see cref="ISetupConfiguration"/> that provides information about product instances installed on the machine.</param> |
| /// <param name="pReserved">Reserved for future use.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHODIMP GetSetupConfiguration( |
| _Out_ ISetupConfiguration** ppConfiguration, |
| _Reserved_ LPVOID pReserved |
| ); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #else |
| |
| #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) |
| #define VS_SETUP_GCC_DIAGNOSTIC_PUSHED |
| #pragma GCC diagnostic push |
| #pragma GCC diagnostic ignored "-Wnon-virtual-dtor" |
| #endif |
| |
| #ifndef MAXUINT |
| #define MAXUINT ((UINT)~((UINT)0)) |
| #endif |
| |
| #ifndef DECLSPEC_NOVTABLE |
| #if (_MSC_VER >= 1100) && defined(__cplusplus) |
| #define DECLSPEC_NOVTABLE __declspec(novtable) |
| #else |
| #define DECLSPEC_NOVTABLE |
| #endif |
| #endif |
| |
| // Enumerations |
| // |
| /// <summary> |
| /// The state of an instance. |
| /// </summary> |
| enum InstanceState |
| { |
| /// <summary> |
| /// The instance state has not been determined. |
| /// </summary> |
| eNone = 0, |
| |
| /// <summary> |
| /// The instance installation path exists. |
| /// </summary> |
| eLocal = 1, |
| |
| /// <summary> |
| /// A product is registered to the instance. |
| /// </summary> |
| eRegistered = 2, |
| |
| /// <summary> |
| /// No reboot is required for the instance. |
| /// </summary> |
| eNoRebootRequired = 4, |
| |
| /// <summary> |
| /// The instance represents a complete install. |
| /// </summary> |
| eComplete = MAXUINT, |
| }; |
| |
| // Forward interface declarations |
| // |
| #ifndef __ISetupInstance_FWD_DEFINED__ |
| #define __ISetupInstance_FWD_DEFINED__ |
| typedef struct ISetupInstance ISetupInstance; |
| #endif |
| |
| #ifndef __ISetupInstance2_FWD_DEFINED__ |
| #define __ISetupInstance2_FWD_DEFINED__ |
| typedef struct ISetupInstance2 ISetupInstance2; |
| #endif |
| |
| #ifndef __IEnumSetupInstances_FWD_DEFINED__ |
| #define __IEnumSetupInstances_FWD_DEFINED__ |
| typedef struct IEnumSetupInstances IEnumSetupInstances; |
| #endif |
| |
| #ifndef __ISetupConfiguration_FWD_DEFINED__ |
| #define __ISetupConfiguration_FWD_DEFINED__ |
| typedef struct ISetupConfiguration ISetupConfiguration; |
| #endif |
| |
| #ifndef __ISetupConfiguration2_FWD_DEFINED__ |
| #define __ISetupConfiguration2_FWD_DEFINED__ |
| typedef struct ISetupConfiguration2 ISetupConfiguration2; |
| #endif |
| |
| #ifndef __ISetupPackageReference_FWD_DEFINED__ |
| #define __ISetupPackageReference_FWD_DEFINED__ |
| typedef struct ISetupPackageReference ISetupPackageReference; |
| #endif |
| |
| #ifndef __ISetupHelper_FWD_DEFINED__ |
| #define __ISetupHelper_FWD_DEFINED__ |
| typedef struct ISetupHelper ISetupHelper; |
| #endif |
| |
| // Forward class declarations |
| // |
| #ifndef __SetupConfiguration_FWD_DEFINED__ |
| #define __SetupConfiguration_FWD_DEFINED__ |
| |
| #ifdef __cplusplus |
| typedef class SetupConfiguration SetupConfiguration; |
| #endif |
| |
| #endif |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| // Interface definitions |
| // |
| EXTERN_C const IID IID_ISetupInstance; |
| |
| #if defined(__cplusplus) && !defined(CINTERFACE) |
| /// <summary> |
| /// Information about an instance of a product. |
| /// </summary> |
| struct DECLSPEC_UUID("B41463C3-8866-43B5-BC33-2B0676F7F42E") DECLSPEC_NOVTABLE ISetupInstance : public IUnknown |
| { |
| /// <summary> |
| /// Gets the instance identifier (should match the name of the parent instance directory). |
| /// </summary> |
| /// <param name="pbstrInstanceId">The instance identifier.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist.</returns> |
| STDMETHOD(GetInstanceId)( |
| BSTR* pbstrInstanceId |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the local date and time when the installation was originally installed. |
| /// </summary> |
| /// <param name="pInstallDate">The local date and time when the installation was originally installed.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined.</returns> |
| STDMETHOD(GetInstallDate)( |
| LPFILETIME pInstallDate |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the unique name of the installation, often indicating the branch and other information used for telemetry. |
| /// </summary> |
| /// <param name="pbstrInstallationName">The unique name of the installation, often indicating the branch and other information used for telemetry.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined.</returns> |
| STDMETHOD(GetInstallationName)( |
| BSTR* pbstrInstallationName |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the path to the installation root of the product. |
| /// </summary> |
| /// <param name="pbstrInstallationPath">The path to the installation root of the product.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined.</returns> |
| STDMETHOD(GetInstallationPath)( |
| BSTR* pbstrInstallationPath |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the version of the product installed in this instance. |
| /// </summary> |
| /// <param name="pbstrInstallationVersion">The version of the product installed in this instance.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined.</returns> |
| STDMETHOD(GetInstallationVersion)( |
| BSTR* pbstrInstallationVersion |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the display name (title) of the product installed in this instance. |
| /// </summary> |
| /// <param name="lcid">The LCID for the display name.</param> |
| /// <param name="pbstrDisplayName">The display name (title) of the product installed in this instance.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined.</returns> |
| STDMETHOD(GetDisplayName)( |
| LCID lcid, |
| BSTR* pbstrDisplayName |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the description of the product installed in this instance. |
| /// </summary> |
| /// <param name="lcid">The LCID for the description.</param> |
| /// <param name="pbstrDescription">The description of the product installed in this instance.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined.</returns> |
| STDMETHOD(GetDescription)( |
| LCID lcid, |
| BSTR* pbstrDescription |
| ) = 0; |
| |
| /// <summary> |
| /// Resolves the optional relative path to the root path of the instance. |
| /// </summary> |
| /// <param name="pwszRelativePath">A relative path within the instance to resolve, or NULL to get the root path.</param> |
| /// <param name="pbstrAbsolutePath">The full path to the optional relative path within the instance. If the relative path is NULL, the root path will always terminate in a backslash.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined.</returns> |
| STDMETHOD(ResolvePath)( |
| LPCOLESTR pwszRelativePath, |
| BSTR* pbstrAbsolutePath |
| ) = 0; |
| }; |
| #endif |
| |
| EXTERN_C const IID IID_ISetupInstance2; |
| |
| #if defined(__cplusplus) && !defined(CINTERFACE) |
| /// <summary> |
| /// Information about an instance of a product. |
| /// </summary> |
| struct DECLSPEC_UUID("89143C9A-05AF-49B0-B717-72E218A2185C") DECLSPEC_NOVTABLE ISetupInstance2 : public ISetupInstance |
| { |
| /// <summary> |
| /// Gets the state of the instance. |
| /// </summary> |
| /// <param name="pState">The state of the instance.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist.</returns> |
| STDMETHOD(GetState)( |
| InstanceState* pState |
| ) = 0; |
| |
| /// <summary> |
| /// Gets an array of package references registered to the instance. |
| /// </summary> |
| /// <param name="ppsaPackages">Pointer to an array of <see cref="ISetupPackageReference"/>.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the packages property is not defined.</returns> |
| STDMETHOD(GetPackages)( |
| LPSAFEARRAY* ppsaPackages |
| ) = 0; |
| |
| /// <summary> |
| /// Gets a pointer to the <see cref="ISetupPackageReference"/> that represents the registered product. |
| /// </summary> |
| /// <param name="ppPackage">Pointer to an instance of <see cref="ISetupPackageReference"/>. This may be NULL if <see cref="GetState"/> does not return <see cref="eComplete"/>.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the packages property is not defined.</returns> |
| STDMETHOD(GetProduct)( |
| ISetupPackageReference** ppPackage |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the relative path to the product application, if available. |
| /// </summary> |
| /// <param name="pbstrProductPath">The relative path to the product application, if available.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist.</returns> |
| STDMETHOD(GetProductPath)( |
| BSTR* pbstrProductPath |
| ) = 0; |
| }; |
| #endif |
| |
| EXTERN_C const IID IID_IEnumSetupInstances; |
| |
| #if defined(__cplusplus) && !defined(CINTERFACE) |
| /// <summary> |
| /// A enumerator of installed <see cref="ISetupInstance"/> objects. |
| /// </summary> |
| struct DECLSPEC_UUID("6380BCFF-41D3-4B2E-8B2E-BF8A6810C848") DECLSPEC_NOVTABLE IEnumSetupInstances : public IUnknown |
| { |
| /// <summary> |
| /// Retrieves the next set of product instances in the enumeration sequence. |
| /// </summary> |
| /// <param name="celt">The number of product instances to retrieve.</param> |
| /// <param name="rgelt">A pointer to an array of <see cref="ISetupInstance"/>.</param> |
| /// <param name="pceltFetched">A pointer to the number of product instances retrieved. If celt is 1 this parameter may be NULL.</param> |
| /// <returns>S_OK if the number of elements were fetched, S_FALSE if nothing was fetched (at end of enumeration), E_INVALIDARG if celt is greater than 1 and pceltFetched is NULL, or E_OUTOFMEMORY if an <see cref="ISetupInstance"/> could not be allocated.</returns> |
| STDMETHOD(Next)( |
| ULONG celt, |
| ISetupInstance** rgelt, |
| ULONG* pceltFetched |
| ) = 0; |
| |
| /// <summary> |
| /// Skips the next set of product instances in the enumeration sequence. |
| /// </summary> |
| /// <param name="celt">The number of product instances to skip.</param> |
| /// <returns>S_OK if the number of elements could be skipped; otherwise, S_FALSE;</returns> |
| STDMETHOD(Skip)( |
| ULONG celt |
| ) = 0; |
| |
| /// <summary> |
| /// Resets the enumeration sequence to the beginning. |
| /// </summary> |
| /// <returns>Always returns S_OK;</returns> |
| STDMETHOD(Reset)(void) = 0; |
| |
| /// <summary> |
| /// Creates a new enumeration object in the same state as the current enumeration object: the new object points to the same place in the enumeration sequence. |
| /// </summary> |
| /// <param name="ppenum">A pointer to a pointer to a new <see cref="IEnumSetupInstances"/> interface. If the method fails, this parameter is undefined.</param> |
| /// <returns>S_OK if a clone was returned; otherwise, E_OUTOFMEMORY.</returns> |
| STDMETHOD(Clone)( |
| IEnumSetupInstances** ppenum |
| ) = 0; |
| }; |
| #endif |
| |
| EXTERN_C const IID IID_ISetupConfiguration; |
| |
| #if defined(__cplusplus) && !defined(CINTERFACE) |
| /// <summary> |
| /// Gets information about product instances set up on the machine. |
| /// </summary> |
| struct DECLSPEC_UUID("42843719-DB4C-46C2-8E7C-64F1816EFD5B") DECLSPEC_NOVTABLE ISetupConfiguration : public IUnknown |
| { |
| /// <summary> |
| /// Enumerates all completed product instances installed. |
| /// </summary> |
| /// <param name="ppEnumInstances">An enumeration of completed, installed product instances.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(EnumInstances)( |
| IEnumSetupInstances** ppEnumInstances |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the instance for the current process path. |
| /// </summary> |
| /// <param name="ppInstance">The instance for the current process path.</param> |
| /// <returns>The instance for the current process path, or E_NOTFOUND if not found.</returns> |
| STDMETHOD(GetInstanceForCurrentProcess)( |
| ISetupInstance** ppInstance |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the instance for the given path. |
| /// </summary> |
| /// <param name="ppInstance">The instance for the given path.</param> |
| /// <returns>The instance for the given path, or E_NOTFOUND if not found.</returns> |
| STDMETHOD(GetInstanceForPath)( |
| LPCWSTR wzPath, |
| ISetupInstance** ppInstance |
| ) = 0; |
| }; |
| #endif |
| |
| EXTERN_C const IID IID_ISetupConfiguration2; |
| |
| #if defined(__cplusplus) && !defined(CINTERFACE) |
| /// <summary> |
| /// Gets information about product instances. |
| /// </summary> |
| struct DECLSPEC_UUID("26AAB78C-4A60-49D6-AF3B-3C35BC93365D") DECLSPEC_NOVTABLE ISetupConfiguration2 : public ISetupConfiguration |
| { |
| /// <summary> |
| /// Enumerates all product instances. |
| /// </summary> |
| /// <param name="ppEnumInstances">An enumeration of all product instances.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(EnumAllInstances)( |
| IEnumSetupInstances** ppEnumInstances |
| ) = 0; |
| }; |
| #endif |
| |
| EXTERN_C const IID IID_ISetupPackageReference; |
| |
| #if defined(__cplusplus) && !defined(CINTERFACE) |
| /// <summary> |
| /// A reference to a package. |
| /// </summary> |
| struct DECLSPEC_UUID("da8d8a16-b2b6-4487-a2f1-594ccccd6bf5") DECLSPEC_NOVTABLE ISetupPackageReference : public IUnknown |
| { |
| /// <summary> |
| /// Gets the general package identifier. |
| /// </summary> |
| /// <param name="pbstrId">The general package identifier.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(GetId)( |
| BSTR* pbstrId |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the version of the package. |
| /// </summary> |
| /// <param name="pbstrVersion">The version of the package.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(GetVersion)( |
| BSTR* pbstrVersion |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the target process architecture of the package. |
| /// </summary> |
| /// <param name="pbstrChip">The target process architecture of the package.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(GetChip)( |
| BSTR* pbstrChip |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the language and optional region identifier. |
| /// </summary> |
| /// <param name="pbstrLanguage">The language and optional region identifier.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(GetLanguage)( |
| BSTR* pbstrLanguage |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the build branch of the package. |
| /// </summary> |
| /// <param name="pbstrBranch">The build branch of the package.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(GetBranch)( |
| BSTR* pbstrBranch |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the type of the package. |
| /// </summary> |
| /// <param name="pbstrType">The type of the package.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(GetType)( |
| BSTR* pbstrType |
| ) = 0; |
| |
| /// <summary> |
| /// Gets the unique identifier consisting of all defined tokens. |
| /// </summary> |
| /// <param name="pbstrUniqueId">The unique identifier consisting of all defined tokens.</param> |
| /// <returns>Standard HRESULT indicating success or failure, including E_UNEXPECTED if no Id was defined (required).</returns> |
| STDMETHOD(GetUniqueId)( |
| BSTR* pbstrUniqueId |
| ) = 0; |
| }; |
| #endif |
| |
| EXTERN_C const IID IID_ISetupHelper; |
| |
| #if defined(__cplusplus) && !defined(CINTERFACE) |
| /// <summary> |
| /// Helper functions. |
| /// </summary> |
| /// <remarks> |
| /// You can query for this interface from the <see cref="SetupConfiguration"/> class. |
| /// </remarks> |
| struct DECLSPEC_UUID("42b21b78-6192-463e-87bf-d577838f1d5c") DECLSPEC_NOVTABLE ISetupHelper : public IUnknown |
| { |
| /// <summary> |
| /// Parses a dotted quad version string into a 64-bit unsigned integer. |
| /// </summary> |
| /// <param name="pwszVersion">The dotted quad version string to parse, e.g. 1.2.3.4.</param> |
| /// <param name="pullVersion">A 64-bit unsigned integer representing the version. You can compare this to other versions.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(ParseVersion)( |
| LPCOLESTR pwszVersion, |
| PULONGLONG pullVersion |
| ) = 0; |
| |
| /// <summary> |
| /// Parses a dotted quad version string into a 64-bit unsigned integer. |
| /// </summary> |
| /// <param name="pwszVersionRange">The string containing 1 or 2 dotted quad version strings to parse, e.g. [1.0,) that means 1.0.0.0 or newer.</param> |
| /// <param name="pullMinVersion">A 64-bit unsigned integer representing the minimum version, which may be 0. You can compare this to other versions.</param> |
| /// <param name="pullMaxVersion">A 64-bit unsigned integer representing the maximum version, which may be MAXULONGLONG. You can compare this to other versions.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHOD(ParseVersionRange)( |
| LPCOLESTR pwszVersionRange, |
| PULONGLONG pullMinVersion, |
| PULONGLONG pullMaxVersion |
| ) = 0; |
| }; |
| #endif |
| |
| // Class declarations |
| // |
| EXTERN_C const CLSID CLSID_SetupConfiguration; |
| |
| #ifdef __cplusplus |
| /// <summary> |
| /// This class implements <see cref="ISetupConfiguration"/>, <see cref="ISetupConfiguration2"/>, and <see cref="ISetupHelper"/>. |
| /// </summary> |
| class DECLSPEC_UUID("177F0C4A-1CD3-4DE7-A32C-71DBBB9FA36D") SetupConfiguration; |
| #endif |
| |
| // Function declarations |
| // |
| /// <summary> |
| /// Gets an <see cref="ISetupConfiguration"/> that provides information about product instances installed on the machine. |
| /// </summary> |
| /// <param name="ppConfiguration">The <see cref="ISetupConfiguration"/> that provides information about product instances installed on the machine.</param> |
| /// <param name="pReserved">Reserved for future use.</param> |
| /// <returns>Standard HRESULT indicating success or failure.</returns> |
| STDMETHODIMP GetSetupConfiguration( |
| ISetupConfiguration** ppConfiguration, |
| LPVOID pReserved |
| ); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #ifdef VS_SETUP_GCC_DIAGNOSTIC_PUSHED |
| #pragma GCC diagnostic pop |
| #undef VS_SETUP_GCC_DIAGNOSTIC_PUSHED |
| #endif |
| |
| #endif |
| #endif |