Skip to content

Commit c32be11

Browse files
committed
implement part of validators
1 parent 5fdb411 commit c32be11

8 files changed

+118
-10
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#pragma once
2+
3+
#include <winrt/base.h>
4+
#include <wil/com.h>
5+
#include <AppxPackaging.h>
6+
7+
namespace winrt::Microsoft::Windows::Management::Deployment::implementation
8+
{
9+
struct AppxPackagingObject : winrt::implements<AppxPackagingObject, IInspectable>
10+
{
11+
AppxPackagingObject(IUnknown* object)
12+
{
13+
m_object.copy_from(object);
14+
}
15+
16+
int32_t query_interface_tearoff(winrt::guid const& id, void** object) const noexcept override
17+
{
18+
return m_object.as(id, object);
19+
}
20+
21+
private:
22+
winrt::com_ptr<IUnknown> m_object;
23+
};
24+
25+
}

dev/PackageManager/API/M.W.M.D.PackageCertificateEkuValidator.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ namespace winrt::Microsoft::Windows::Management::Deployment::implementation
1313

1414
throw hresult_not_implemented();
1515
}
16+
1617
bool PackageCertificateEkuValidator::IsPackageValid(winrt::Windows::Foundation::IInspectable const& appxPackagingObject)
1718
{
1819
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Management::Deployment::Feature_PackageValidator::IsEnabled());

dev/PackageManager/API/M.W.M.D.PackageCertificateEkuValidator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ namespace winrt::Microsoft::Windows::Management::Deployment::implementation
1111
bool IsPackageValid(winrt::Windows::Foundation::IInspectable const& appxPackagingObject);
1212
};
1313
}
14+
1415
namespace winrt::Microsoft::Windows::Management::Deployment::factory_implementation
1516
{
1617
struct PackageCertificateEkuValidator : PackageCertificateEkuValidatorT<PackageCertificateEkuValidator, implementation::PackageCertificateEkuValidator>

dev/PackageManager/API/M.W.M.D.PackageFamilyNameValidator.cpp

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,55 @@
33
#include "Microsoft.Windows.Management.Deployment.PackageFamilyNameValidator.g.cpp"
44
#include <TerminalVelocityFeatures-PackageManager.h>
55

6+
#include <AppxPackaging.h>
7+
68
namespace winrt::Microsoft::Windows::Management::Deployment::implementation
79
{
810
PackageFamilyNameValidator::PackageFamilyNameValidator(hstring const& expectedPackageFamilyName)
911
{
1012
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Management::Deployment::Feature_PackageValidator::IsEnabled());
1113

12-
UNREFERENCED_PARAMETER(expectedPackageFamilyName);
13-
14-
throw hresult_not_implemented();
14+
m_packageFamilyName = expectedPackageFamilyName;
1515
}
16+
1617
bool PackageFamilyNameValidator::IsPackageValid(winrt::Windows::Foundation::IInspectable const& appxPackagingObject)
1718
{
1819
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Management::Deployment::Feature_PackageValidator::IsEnabled());
1920

20-
UNREFERENCED_PARAMETER(appxPackagingObject);
21+
winrt::com_ptr<IAppxPackageReader> packageReader;
22+
winrt::com_ptr<IAppxBundleReader> bundleReader;
23+
24+
if (SUCCEEDED(appxPackagingObject.as(IID_PPV_ARGS(&packageReader))))
25+
{
26+
winrt::com_ptr<IAppxManifestReader> manifestReader;
27+
THROW_IF_FAILED(packageReader->GetManifest(manifestReader.put()));
28+
29+
winrt::com_ptr<IAppxManifestPackageId> packageId;
30+
THROW_IF_FAILED(manifestReader->GetPackageId(packageId.put()));
31+
32+
return CheckIdentity(packageId.get());
33+
}
34+
else if (SUCCEEDED(appxPackagingObject.as(IID_PPV_ARGS(&bundleReader))))
35+
{
36+
winrt::com_ptr<IAppxBundleManifestReader> manifestReader;
37+
THROW_IF_FAILED(bundleReader->GetManifest(manifestReader.put()));
38+
39+
winrt::com_ptr<IAppxManifestPackageId> packageId;
40+
THROW_IF_FAILED(manifestReader->GetPackageId(packageId.put()));
41+
42+
return CheckIdentity(packageId.get());
43+
}
44+
else
45+
{
46+
THROW_WIN32(ERROR_NOT_SUPPORTED);
47+
}
48+
}
49+
50+
bool PackageFamilyNameValidator::CheckIdentity(IAppxManifestPackageId* packageId)
51+
{
52+
wil::unique_cotaskmem_string familyName;
53+
THROW_IF_FAILED(packageId->GetPackageFamilyName(&familyName));
2154

22-
throw hresult_not_implemented();
55+
return (CSTR_EQUAL == CompareStringOrdinal(familyName.get(), -1, m_packageFamilyName.c_str(), -1, true));
2356
}
2457
}

dev/PackageManager/API/M.W.M.D.PackageFamilyNameValidator.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#pragma once
22
#include "Microsoft.Windows.Management.Deployment.PackageFamilyNameValidator.g.h"
33

4+
#include <AppxPackaging.h>
5+
46
namespace winrt::Microsoft::Windows::Management::Deployment::implementation
57
{
68
struct PackageFamilyNameValidator : PackageFamilyNameValidatorT<PackageFamilyNameValidator>
@@ -9,8 +11,14 @@ namespace winrt::Microsoft::Windows::Management::Deployment::implementation
911

1012
PackageFamilyNameValidator(hstring const& expectedPackageFamilyName);
1113
bool IsPackageValid(winrt::Windows::Foundation::IInspectable const& appxPackagingObject);
14+
15+
private:
16+
bool CheckIdentity(IAppxManifestPackageId* packageId);
17+
18+
hstring m_packageFamilyName;
1219
};
1320
}
21+
1422
namespace winrt::Microsoft::Windows::Management::Deployment::factory_implementation
1523
{
1624
struct PackageFamilyNameValidator : PackageFamilyNameValidatorT<PackageFamilyNameValidator, implementation::PackageFamilyNameValidator>

dev/PackageManager/API/M.W.M.D.PackageMinimumVersionValidator.cpp

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,47 @@ namespace winrt::Microsoft::Windows::Management::Deployment::implementation
99
{
1010
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Management::Deployment::Feature_PackageValidator::IsEnabled());
1111

12-
UNREFERENCED_PARAMETER(minimumVersion);
13-
14-
throw hresult_not_implemented();
12+
m_minimumVersion = ::AppModel::Identity::PackageVersion{ minimumVersion }.Version;
1513
}
14+
1615
bool PackageMinimumVersionValidator::IsPackageValid(winrt::Windows::Foundation::IInspectable const& appxPackagingObject)
1716
{
1817
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Management::Deployment::Feature_PackageValidator::IsEnabled());
1918

20-
UNREFERENCED_PARAMETER(appxPackagingObject);
19+
winrt::com_ptr<IAppxPackageReader> packageReader;
20+
winrt::com_ptr<IAppxBundleReader> bundleReader;
21+
22+
if (SUCCEEDED(appxPackagingObject.as(IID_PPV_ARGS(&packageReader))))
23+
{
24+
winrt::com_ptr<IAppxManifestReader> manifestReader;
25+
THROW_IF_FAILED(packageReader->GetManifest(manifestReader.put()));
26+
27+
winrt::com_ptr<IAppxManifestPackageId> packageId;
28+
THROW_IF_FAILED(manifestReader->GetPackageId(packageId.put()));
29+
30+
return CheckIdentity(packageId.get());
31+
}
32+
else if (SUCCEEDED(appxPackagingObject.as(IID_PPV_ARGS(&bundleReader))))
33+
{
34+
winrt::com_ptr<IAppxBundleManifestReader> manifestReader;
35+
THROW_IF_FAILED(bundleReader->GetManifest(manifestReader.put()));
36+
37+
winrt::com_ptr<IAppxManifestPackageId> packageId;
38+
THROW_IF_FAILED(manifestReader->GetPackageId(packageId.put()));
39+
40+
return CheckIdentity(packageId.get());
41+
}
42+
else
43+
{
44+
THROW_WIN32(ERROR_NOT_SUPPORTED);
45+
}
46+
}
47+
48+
bool PackageMinimumVersionValidator::CheckIdentity(IAppxManifestPackageId* packageId)
49+
{
50+
UINT64 version;
51+
THROW_IF_FAILED(packageId->GetVersion(&version));
2152

22-
throw hresult_not_implemented();
53+
return (version >= m_minimumVersion);
2354
}
2455
}

dev/PackageManager/API/M.W.M.D.PackageMinimumVersionValidator.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#pragma once
22
#include "Microsoft.Windows.Management.Deployment.PackageMinimumVersionValidator.g.h"
33

4+
#include <AppxPackaging.h>
5+
46
namespace winrt::Microsoft::Windows::Management::Deployment::implementation
57
{
68
struct PackageMinimumVersionValidator : PackageMinimumVersionValidatorT<PackageMinimumVersionValidator>
@@ -9,8 +11,14 @@ namespace winrt::Microsoft::Windows::Management::Deployment::implementation
911

1012
PackageMinimumVersionValidator(winrt::Windows::ApplicationModel::PackageVersion const& minimumVersion);
1113
bool IsPackageValid(winrt::Windows::Foundation::IInspectable const& appxPackagingObject);
14+
15+
private:
16+
bool CheckIdentity(IAppxManifestPackageId* packageId);
17+
18+
UINT64 m_minimumVersion;
1219
};
1320
}
21+
1422
namespace winrt::Microsoft::Windows::Management::Deployment::factory_implementation
1523
{
1624
struct PackageMinimumVersionValidator : PackageMinimumVersionValidatorT<PackageMinimumVersionValidator, implementation::PackageMinimumVersionValidator>

dev/PackageManager/API/PackageManager.vcxitems

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
<ClCompile Include="$(MSBuildThisFileDirectory)PackageDeploymentResolver.cpp" />
3535
</ItemGroup>
3636
<ItemGroup>
37+
<ClInclude Include="$(MSBuildThisFileDirectory)AppxPackagingObject.h" />
3738
<ClInclude Include="$(MSBuildThisFileDirectory)M.W.M.D.AddPackageOptions.h" />
3839
<ClInclude Include="$(MSBuildThisFileDirectory)M.W.M.D.EnsureReadyOptions.h" />
3940
<ClInclude Include="$(MSBuildThisFileDirectory)M.W.M.D.PackageCertificateEkuValidator.h" />

0 commit comments

Comments
 (0)