winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

ConfigurationProcessor.h (10748B)


      1 // Copyright (c) Microsoft Corporation.
      2 // Licensed under the MIT License.
      3 #pragma once
      4 #include "ConfigurationProcessor.g.h"
      5 #include <winrt/Windows.Foundation.h>
      6 #include <winrt/Windows.Foundation.Collections.h>
      7 #include <winrt/Windows.Storage.Streams.h>
      8 #include "ConfigThreadGlobals.h"
      9 #include "ConfigurationStatus.h"
     10 #include "Database/ConfigurationDatabase.h"
     11 #include <winget/AsyncTokens.h>
     12 #include "ShutdownSynchronization.h"
     13 #include <winget/ILifetimeWatcher.h>
     14 
     15 #include <functional>
     16 #include <mutex>
     17 #include <string_view>
     18 
     19 namespace winrt::Microsoft::Management::Configuration::implementation
     20 {
     21     struct ConfigurationProcessor : ConfigurationProcessorT<ConfigurationProcessor, winrt::cloaked<AppInstaller::WinRT::ILifetimeWatcher>>, AppInstaller::WinRT::LifetimeWatcherBase
     22     {
     23         using ConfigurationSetChangeData = Configuration::ConfigurationSetChangeData;
     24         using ConfigurationUnit = Configuration::ConfigurationUnit;
     25         using ApplyConfigurationSetResult = Configuration::ApplyConfigurationSetResult;
     26         using TestConfigurationSetResult = Configuration::TestConfigurationSetResult;
     27         using TestConfigurationUnitResult = Configuration::TestConfigurationUnitResult;
     28         using GetConfigurationUnitSettingsResult = Configuration::GetConfigurationUnitSettingsResult;
     29         using GetAllConfigurationUnitSettingsResult = Configuration::GetAllConfigurationUnitSettingsResult;
     30         using GetConfigurationSetDetailsResult = Configuration::GetConfigurationSetDetailsResult;
     31         using GetConfigurationUnitDetailsResult = Configuration::GetConfigurationUnitDetailsResult;
     32 
     33 #if !defined(INCLUDE_ONLY_INTERFACE_METHODS)
     34         ConfigurationProcessor();
     35 #endif
     36 
     37         ConfigurationProcessor(const IConfigurationSetProcessorFactory& factory);
     38 
     39         event_token Diagnostics(const Windows::Foundation::EventHandler<IDiagnosticInformation>& handler);
     40         void Diagnostics(const event_token& token) noexcept;
     41 
     42         DiagnosticLevel MinimumLevel();
     43         void MinimumLevel(DiagnosticLevel value);
     44 
     45         hstring Caller() const;
     46         void Caller(hstring value);
     47 
     48         guid ActivityIdentifier();
     49         void ActivityIdentifier(const guid& value);
     50 
     51         bool GenerateTelemetryEvents();
     52         void GenerateTelemetryEvents(bool value);
     53 
     54         event_token ConfigurationChange(const Windows::Foundation::TypedEventHandler<Configuration::ConfigurationSet, Configuration::ConfigurationChangeData>& handler);
     55         void ConfigurationChange(const event_token& token) noexcept;
     56 
     57         Windows::Foundation::Collections::IVector<Configuration::ConfigurationSet> GetConfigurationHistory();
     58         Windows::Foundation::IAsyncOperation<Windows::Foundation::Collections::IVector<Configuration::ConfigurationSet>> GetConfigurationHistoryAsync();
     59 
     60         Configuration::OpenConfigurationSetResult OpenConfigurationSet(const Windows::Storage::Streams::IInputStream& stream);
     61         Windows::Foundation::IAsyncOperation<Configuration::OpenConfigurationSetResult> OpenConfigurationSetAsync(const Windows::Storage::Streams::IInputStream& stream);
     62 
     63         Windows::Foundation::Collections::IVector<ConfigurationConflict> CheckForConflicts(
     64             const Windows::Foundation::Collections::IVectorView<Configuration::ConfigurationSet>& configurationSets,
     65             bool includeConfigurationHistory);
     66         Windows::Foundation::IAsyncOperation<Windows::Foundation::Collections::IVector<ConfigurationConflict>> CheckForConflictsAsync(
     67             const Windows::Foundation::Collections::IVectorView<Configuration::ConfigurationSet>& configurationSets,
     68             bool includeConfigurationHistory);
     69 
     70         GetConfigurationSetDetailsResult GetSetDetails(const Configuration::ConfigurationSet& configurationSet, ConfigurationUnitDetailFlags detailFlags);
     71         Windows::Foundation::IAsyncOperationWithProgress<GetConfigurationSetDetailsResult, GetConfigurationUnitDetailsResult> GetSetDetailsAsync(const Configuration::ConfigurationSet& configurationSet, ConfigurationUnitDetailFlags detailFlags);
     72 
     73         GetConfigurationUnitDetailsResult GetUnitDetails(const ConfigurationUnit& unit, ConfigurationUnitDetailFlags detailFlags);
     74         Windows::Foundation::IAsyncOperation<GetConfigurationUnitDetailsResult> GetUnitDetailsAsync(const ConfigurationUnit& unit, ConfigurationUnitDetailFlags detailFlags);
     75 
     76         ApplyConfigurationSetResult ApplySet(const Configuration::ConfigurationSet& configurationSet, ApplyConfigurationSetFlags flags);
     77         Windows::Foundation::IAsyncOperationWithProgress<ApplyConfigurationSetResult, ConfigurationSetChangeData> ApplySetAsync(const Configuration::ConfigurationSet& configurationSet, ApplyConfigurationSetFlags flags);
     78 
     79         TestConfigurationSetResult TestSet(const Configuration::ConfigurationSet& configurationSet);
     80         Windows::Foundation::IAsyncOperationWithProgress<TestConfigurationSetResult, TestConfigurationUnitResult> TestSetAsync(const Configuration::ConfigurationSet& configurationSet);
     81 
     82         GetConfigurationUnitSettingsResult GetUnitSettings(const ConfigurationUnit& unit);
     83         Windows::Foundation::IAsyncOperation<GetConfigurationUnitSettingsResult> GetUnitSettingsAsync(const ConfigurationUnit& unit);
     84 
     85         GetAllConfigurationUnitSettingsResult GetAllUnitSettings(const ConfigurationUnit& unit);
     86         Windows::Foundation::IAsyncOperation<GetAllConfigurationUnitSettingsResult> GetAllUnitSettingsAsync(const ConfigurationUnit& unit);
     87 
     88         Configuration::GetAllConfigurationUnitsResult GetAllUnits(const ConfigurationUnit& unit);
     89         Windows::Foundation::IAsyncOperation<Configuration::GetAllConfigurationUnitsResult> GetAllUnitsAsync(const ConfigurationUnit& unit);
     90 
     91         Windows::Foundation::Collections::IVector<Configuration::IConfigurationUnitProcessorDetails> FindUnitProcessors(const Configuration::FindUnitProcessorsOptions& findOptions);
     92         Windows::Foundation::IAsyncOperation<Windows::Foundation::Collections::IVector<Configuration::IConfigurationUnitProcessorDetails>> FindUnitProcessorsAsync(const Configuration::FindUnitProcessorsOptions& findOptions);
     93 
     94         Configuration::ApplyConfigurationUnitResult ApplyUnit(const ConfigurationUnit& unit);
     95         Windows::Foundation::IAsyncOperation<Configuration::ApplyConfigurationUnitResult> ApplyUnitAsync(const ConfigurationUnit& unit);
     96         
     97         Configuration::TestConfigurationUnitResult TestUnit(const ConfigurationUnit& unit);
     98         Windows::Foundation::IAsyncOperation<Configuration::TestConfigurationUnitResult> TestUnitAsync(const ConfigurationUnit& unit);
     99 
    100         HRESULT STDMETHODCALLTYPE SetLifetimeWatcher(IUnknown* watcher);
    101 
    102 #if !defined(INCLUDE_ONLY_INTERFACE_METHODS)
    103         void ConfigurationSetProcessorFactory(const IConfigurationSetProcessorFactory& value);
    104 
    105         // Sends diagnostics objects to the event.
    106         void SendDiagnostics(DiagnosticLevel level, std::string_view message);
    107 
    108         // Sends diagnostics objects to the event.
    109         void SendDiagnostics(const IDiagnosticInformation& information);
    110 
    111         // Indicate a configuration change occurred.
    112         void ConfigurationChange(const Configuration::ConfigurationSet& set, const Configuration::ConfigurationChangeData& data);
    113 
    114     private:
    115         Windows::Foundation::Collections::IVector<Configuration::ConfigurationSet> GetConfigurationHistoryImpl(ShutdownAwareAsyncCancellation cancellation = {});
    116 
    117         GetConfigurationSetDetailsResult GetSetDetailsImpl(
    118             const Configuration::ConfigurationSet& configurationSet,
    119             ConfigurationUnitDetailFlags detailFlags,
    120             ShutdownAwareAsyncProgress<GetConfigurationSetDetailsResult, GetConfigurationUnitDetailsResult> progress = {});
    121 
    122         GetConfigurationUnitDetailsResult GetUnitDetailsImpl(const ConfigurationUnit& unit, ConfigurationUnitDetailFlags detailFlags);
    123 
    124         ApplyConfigurationSetResult ApplySetImpl(
    125             const Configuration::ConfigurationSet& configurationSet,
    126             ApplyConfigurationSetFlags flags,
    127             ShutdownAwareAsyncProgress<ApplyConfigurationSetResult, ConfigurationSetChangeData> progress = {});
    128 
    129         TestConfigurationSetResult TestSetImpl(
    130             const Configuration::ConfigurationSet& configurationSet,
    131             ShutdownAwareAsyncProgress<TestConfigurationSetResult, TestConfigurationUnitResult> progress = {});
    132 
    133         GetConfigurationUnitSettingsResult GetUnitSettingsImpl(const ConfigurationUnit& unit, ShutdownAwareAsyncCancellation cancellation = {});
    134 
    135         GetAllConfigurationUnitSettingsResult GetAllUnitSettingsImpl(const ConfigurationUnit& unit, ShutdownAwareAsyncCancellation cancellation = {});
    136 
    137         Configuration::GetAllConfigurationUnitsResult GetAllUnitsImpl(const ConfigurationUnit& unit, ShutdownAwareAsyncCancellation cancellation = {});
    138 
    139         Windows::Foundation::Collections::IVector<Configuration::IConfigurationUnitProcessorDetails> FindUnitProcessorsImpl(const Configuration::FindUnitProcessorsOptions& findOptions, ShutdownAwareAsyncCancellation cancellation = {});
    140 
    141         Configuration::ApplyConfigurationUnitResult ApplyUnitImpl(const ConfigurationUnit& unit, ShutdownAwareAsyncCancellation cancellation = {});
    142 
    143         Configuration::TestConfigurationUnitResult TestUnitImpl(const ConfigurationUnit& unit, ShutdownAwareAsyncCancellation cancellation = {});
    144 
    145         IConfigurationGroupProcessor GetSetGroupProcessor(const Configuration::ConfigurationSet& configurationSet);
    146 
    147         void SendDiagnosticsImpl(const IDiagnosticInformation& information);
    148 
    149         IConfigurationSetProcessorFactory m_factory = nullptr;
    150         event<Windows::Foundation::EventHandler<IDiagnosticInformation>> m_diagnostics;
    151         event<Windows::Foundation::TypedEventHandler<Configuration::ConfigurationSet, Configuration::ConfigurationChangeData>> m_configurationChange;
    152         ConfigThreadGlobals m_threadGlobals;
    153         IConfigurationSetProcessorFactory::Diagnostics_revoker m_factoryDiagnosticsEventRevoker;
    154         DiagnosticLevel m_minimumLevel = DiagnosticLevel::Informational;
    155         std::recursive_mutex m_diagnosticsMutex;
    156         ConfigurationDatabase m_database;
    157         bool m_isHandlingDiagnostics = false;
    158         std::shared_ptr<ConfigurationStatus::ChangeRegistration> m_changeRegistration;
    159 #endif
    160     };
    161 }
    162 
    163 #if !defined(INCLUDE_ONLY_INTERFACE_METHODS)
    164 namespace winrt::Microsoft::Management::Configuration::factory_implementation
    165 {
    166     struct ConfigurationProcessor : ConfigurationProcessorT<ConfigurationProcessor, implementation::ConfigurationProcessor>
    167     {
    168     };
    169 }
    170 #endif