Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions dev/Common/TerminalVelocityFeatures-PackageManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@
namespace features
{
feature_name Feature_PackageManager = { DisabledByDefault, FALSE };
feature_name Feature_PackageValidator = { DisabledByDefault, FALSE };
}
#endif // defined(__midlrt)

// Feature constants
#define WINDOWSAPPRUNTIME_MICROSOFT_WINDOWS_MANAGEMENT_DEPLOYMENT_FEATURE_PACKAGEMANAGER_ENABLED 1
#define WINDOWSAPPRUNTIME_MICROSOFT_WINDOWS_MANAGEMENT_DEPLOYMENT_FEATURE_PACKAGEVALIDATOR_ENABLED 1

#if defined(__cplusplus)

Expand All @@ -27,6 +29,12 @@ struct Feature_PackageManager
static constexpr bool IsEnabled() { return WINDOWSAPPRUNTIME_MICROSOFT_WINDOWS_MANAGEMENT_DEPLOYMENT_FEATURE_PACKAGEMANAGER_ENABLED == 1; }
};

__pragma(detect_mismatch("ODR_violation_WINDOWSAPPRUNTIME_MICROSOFT_WINDOWS_MANAGEMENT_DEPLOYMENT_FEATURE_PACKAGEVALIDATOR_ENABLED_mismatch", "AlwaysEnabled"))
struct Feature_PackageValidator
{
static constexpr bool IsEnabled() { return WINDOWSAPPRUNTIME_MICROSOFT_WINDOWS_MANAGEMENT_DEPLOYMENT_FEATURE_PACKAGEVALIDATOR_ENABLED == 1; }
};

} // namespace Microsoft.Windows.Management.Deployment

#endif // defined(__cplusplus)
9 changes: 9 additions & 0 deletions dev/Common/TerminalVelocityFeatures-PackageManager.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,13 @@
<channelToken>Stable</channelToken>
</alwaysDisabledChannelTokens>
</feature>
<feature>
<name>Feature_PackageValidator</name>
<description>Package Validator APIs</description>
<state>AlwaysEnabled</state>
<alwaysDisabledChannelTokens>
<channelToken>Preview</channelToken>
<channelToken>Stable</channelToken>
</alwaysDisabledChannelTokens>
</feature>
</features>
60 changes: 59 additions & 1 deletion dev/PackageManager/API/PackageManager.idl
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import "M.AM.DynamicDependency.idl";

namespace Microsoft.Windows.Management.Deployment
{
[contractversion(2)]
[contractversion(3)]
apicontract PackageDeploymentContract{};

/// Features can be queried if currently available/enabled.
Expand Down Expand Up @@ -200,6 +200,14 @@ namespace Microsoft.Windows.Management.Deployment

Boolean IsLimitToExistingPackagesSupported { get; }; // Requires Windows >= 10.0.22621.0 (aka Win11 22H2)
Boolean LimitToExistingPackages;

[contract(PackageDeploymentContract, 3)]
[feature(Feature_PackageValidator)]
Boolean IsPackageValidatorsSupported{ get; }; // Requires Windows >= 10.0.26100.0 (aka Win11 24H2)

[contract(PackageDeploymentContract, 3)]
[feature(Feature_PackageValidator)]
IVector<PackageValidatorEntry> PackageValidators{ get; };
}

// Requires Windows >= 10.0.19041.0 (aka 2004 aka 20H1)
Expand All @@ -224,6 +232,14 @@ namespace Microsoft.Windows.Management.Deployment

Boolean IsExpectedDigestsSupported { get; }; // Requires Windows >= 10.0.22621.0 (aka Win11 22H2)
IMap<Windows.Foundation.Uri, String> ExpectedDigests{ get; };

[contract(PackageDeploymentContract, 3)]
[feature(Feature_PackageValidator)]
Boolean IsPackageValidatorsSupported{ get; }; // Requires Windows >= 10.0.26100.0 (aka Win11 24H2)

[contract(PackageDeploymentContract, 3)]
[feature(Feature_PackageValidator)]
IVector<PackageValidatorEntry> PackageValidators{ get; };
}

// Requires Windows >= 10.0.19041.0 (aka 2004 aka 20H1)
Expand Down Expand Up @@ -525,4 +541,46 @@ namespace Microsoft.Windows.Management.Deployment
void RemovePackageSet(
Microsoft.Windows.Management.Deployment.PackageSetRuntimeDisposition packageSetRuntimeDisposition);
}

[contract(PackageDeploymentContract, 3)]
[feature(Feature_PackageValidator)]
[default_interface]
runtimeclass AppxPackagingObject
{
// This is an interop class for COM types defined in AppxPackaging.idl.
// The WinRT side has no methods or properties, but the object supports QueryInterface into the COM interfaces
// IAppxPackageReader or IAppxBundleReader, whichever is relevant for the object being read.
}

[contract(PackageDeploymentContract, 3)]
[feature(Feature_PackageValidator)]
interface IPackageValidator
{
// One can create custom validators if and when the need arises
Boolean IsPackageValid(AppxPackagingObject packagingObject);
}

[contract(PackageDeploymentContract, 3)]
[feature(Feature_PackageValidator)]
runtimeclass PackageIdentityValidator : [default] IPackageValidator
{
PackageIdentityValidator(String expectedPackageFamilyName, Int64 expectedMinimumVersion);
Boolean IsPackageValid(AppxPackagingObject packagingObject);
}

[contract(PackageDeploymentContract, 3)]
[feature(Feature_PackageValidator)]
runtimeclass PackageCertificateEkuValidator : [default] IPackageValidator
{
PackageCertificateEkuValidator(String expectedCertificateEku);
Boolean IsPackageValid(AppxPackagingObject packagingObject);
}

[contract(PackageDeploymentContract, 3)]
[feature(Feature_PackageValidator)]
runtimeclass PackageValidatorEntry
{
Windows.Foundation.Uri Uri;
IPackageValidator Validator;
}
}