From e24764a0c0ef91f77a4642d9aee3dbea204cb6ea Mon Sep 17 00:00:00 2001
From: lhyqy5 <lhyqy5@gmail.com>
Date: Wed, 31 Dec 2014 16:45:54 +0800
Subject: [PATCH] add a tool that can add soft certificate policy(just disallow
 policy) in commandline

---
 Windows/SoftCertPolicyAppender/.gitignore     | 182 ++++++++++++++++++
 .../SoftCertPolicyAppender.sln                |  22 +++
 .../CertPolicyAppender.cs                     | 150 +++++++++++++++
 .../SoftCertPolicyAppender/Program.cs         |  35 ++++
 .../Properties/AssemblyInfo.cs                |  36 ++++
 .../SoftCertPolicyAppender.csproj             |  65 +++++++
 .../SoftCertPolicyAppender/app.manifest       |  58 ++++++
 .../_libs/LocalPolicy.dll                     | Bin 0 -> 15360 bytes
 .../_libs/LocalPolicy.pdb                     | Bin 0 -> 44544 bytes
 9 files changed, 548 insertions(+)
 create mode 100644 Windows/SoftCertPolicyAppender/.gitignore
 create mode 100644 Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.sln
 create mode 100644 Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/CertPolicyAppender.cs
 create mode 100644 Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Program.cs
 create mode 100644 Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Properties/AssemblyInfo.cs
 create mode 100644 Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.csproj
 create mode 100644 Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/app.manifest
 create mode 100644 Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/_libs/LocalPolicy.dll
 create mode 100644 Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/_libs/LocalPolicy.pdb

diff --git a/Windows/SoftCertPolicyAppender/.gitignore b/Windows/SoftCertPolicyAppender/.gitignore
new file mode 100644
index 0000000..3dbb5b0
--- /dev/null
+++ b/Windows/SoftCertPolicyAppender/.gitignore
@@ -0,0 +1,182 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.sln.docstates
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+x64/
+build/
+bld/
+[Bb]in/
+[Oo]bj/
+
+# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets
+!packages/*/build/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+#NUNIT
+*.VisualState.xml
+TestResult.xml
+
+*_i.c
+*_p.c
+*_i.h
+*.ilk
+*.meta
+*.obj
+*.pch
+#*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opensdf
+*.sdf
+*.cachefile
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding addin-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+*.ncrunch*
+_NCrunch_*
+.*crunch*.local.xml
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+
+# NuGet Packages Directory
+## TODO: If you have NuGet Package Restore enabled, uncomment the next line
+#packages/
+## TODO: If the tool you use requires repositories.config, also uncomment the next line
+#!packages/repositories.config
+
+# Windows Azure Build Output
+csx/
+*.build.csdef
+
+# Windows Store app package directory
+AppPackages/
+
+# Others
+sql/
+*.Cache
+ClientBin/
+[Ss]tyle[Cc]op.*
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.pfx
+*.publishsettings
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file to a newer
+# Visual Studio version. Backup files are not needed, because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+App_Data/*.mdf
+App_Data/*.ldf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# =========================
+# Windows detritus
+# =========================
+
+# Windows image file caches
+Thumbs.db
+ehthumbs.db
+
+# Folder config file
+Desktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+#diff backup
+*.orig
diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.sln b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.sln
new file mode 100644
index 0000000..78ab15f
--- /dev/null
+++ b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.sln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.21005.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SoftCertPolicyAppender", "SoftCertPolicyAppender\SoftCertPolicyAppender.csproj", "{E09D425B-49C1-4E27-A7CE-72EE8C7B129F}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{E09D425B-49C1-4E27-A7CE-72EE8C7B129F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E09D425B-49C1-4E27-A7CE-72EE8C7B129F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E09D425B-49C1-4E27-A7CE-72EE8C7B129F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E09D425B-49C1-4E27-A7CE-72EE8C7B129F}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/CertPolicyAppender.cs b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/CertPolicyAppender.cs
new file mode 100644
index 0000000..d81e395
--- /dev/null
+++ b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/CertPolicyAppender.cs
@@ -0,0 +1,150 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Cryptography.X509Certificates;
+using LocalPolicy;
+using Microsoft.Win32;
+
+namespace SoftCertPolicyAppender
+{
+    public class CertPolicyAppender
+    {
+        private X509Certificate2 _cert;
+
+        public void Load(string certFile)
+        {
+            var cert = new X509Certificate2();
+            cert.Import(certFile);
+            _cert = cert;
+
+        }
+
+        /// <summary>
+        /// 构造写写入注册表的证书数据
+        /// </summary>
+        /// <returns></returns>
+        private byte[] CalcRegCertData()
+        {
+            var cert = _cert;
+            var thumbprintData = cert.Thumbprint.HexString2Bytes().ToArray();
+
+            var rtn = new List<byte>();
+
+            //添加数据头,格式是根据注册表的数据推算的,未注释部分为未知
+            rtn.AddRange(BitConverter.GetBytes(3)); //可能为版本号
+            rtn.AddRange(BitConverter.GetBytes(1)); //可能为次版本号
+            rtn.AddRange(BitConverter.GetBytes(thumbprintData.Length)); //证书宅指纹长度
+            rtn.AddRange(thumbprintData);           //证书指纹数据
+            rtn.AddRange(BitConverter.GetBytes(0x0d));
+            rtn.AddRange(BitConverter.GetBytes(1));
+            rtn.AddRange(BitConverter.GetBytes((short)2));
+            rtn.AddRange(BitConverter.GetBytes(0));
+            rtn.AddRange(BitConverter.GetBytes(0x1b));
+            rtn.AddRange(BitConverter.GetBytes(1));
+            rtn.AddRange(BitConverter.GetBytes(8));
+            rtn.AddRange(BitConverter.GetBytes(DateTime.Now.ToFileTime())); //时间戳
+            rtn.AddRange(BitConverter.GetBytes(0x20));
+            rtn.AddRange(BitConverter.GetBytes(1));
+            rtn.AddRange(BitConverter.GetBytes(cert.RawData.Length)); //证书长度
+            //添加证书数据
+            rtn.AddRange(cert.RawData);
+
+            return rtn.ToArray();
+        }
+
+        /// <summary>
+        /// 写入注册表项
+        /// </summary>
+        /// <returns></returns>
+        public void WriteRegisty()
+        {
+            var cer = _cert;
+            const string keyPath = @"Software\Microsoft\Windows\CurrentVersion\Group Policy Objects";
+            var rk = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Default);
+            var srk = rk.OpenSubKey(keyPath);
+            if (srk == null)
+            {
+                throw new ApplicationException("无法打开注册表项:" + keyPath);
+            }
+            var certKeys = srk.GetSubKeyNames()
+                .Where(x => x.EndsWith("Machine"))
+                .Select(
+                    x =>
+                        string.Format(
+                            "{0}\\{1}\\Software\\Policies\\Microsoft\\SystemCertificates\\Disallowed\\Certificates\\{2}",
+                            keyPath, x, cer.Thumbprint))
+                //.Where(x => rk.OpenSubKey(x) == null)
+                .ToList();
+
+            foreach (var key in certKeys.Select(rk.CreateSubKey))
+            {
+                key.SetValue("Blob", CalcRegCertData(), RegistryValueKind.Binary);
+            }
+
+
+        }
+
+
+        /// <summary>
+        /// 添加证书组策略
+        /// </summary>
+        /// <remarks>引用组件来自:https://bitbucket.org/MartinEden/local-policy/overview </remarks>
+        public void AddCertPolicy()
+        {
+            var cert = _cert;
+
+            var gpo = new ComputerGroupPolicyObject();
+            var keyPath = string.Format("Software\\Policies\\Microsoft\\SystemCertificates\\Disallowed\\Certificates\\{0}", cert.Thumbprint);
+            using (var machine = gpo.GetRootRegistryKey(GroupPolicySection.Machine))
+            {
+                using (var cerKey = machine.CreateSubKey(keyPath))
+                {
+                    cerKey.SetValue("Blob", CalcRegCertData(), RegistryValueKind.Binary);
+                }
+            }
+            gpo.Save();
+
+        }
+    }
+
+
+    /// <summary>
+    /// 工具类
+    /// </summary>
+    public static class Helper
+    {
+
+        /// <summary>
+        /// 解析16进制字符串为byte数组
+        /// </summary>
+        /// <param name="hexstring"></param>
+        /// <returns></returns>
+        public static IEnumerable<byte> HexString2Bytes(this string hexstring)
+        {
+            for (int i = 0; i < hexstring.Length; i += 2)
+            {
+                var hex = hexstring.Substring(i, 2);
+                yield return Convert.ToByte(hex, 16);
+            }
+        }
+
+        /// <summary>
+        ///     转换为16进制字符串
+        /// </summary>
+        /// <param name="bs"></param>
+        /// <param name="isLowcase"></param>
+        /// <param name="split"></param>
+        /// <returns></returns>
+        public static string ToHexString(this IEnumerable<byte> bs, bool isLowcase = false, string split = "")
+        {
+            var rtn = "";
+            foreach (var item in bs)
+            {
+                var fmtstr = isLowcase ? "x2" : "X2";
+                rtn += item.ToString(fmtstr) + split;
+            }
+            return rtn.TrimEnd(split.ToCharArray());
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Program.cs b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Program.cs
new file mode 100644
index 0000000..f2d33d6
--- /dev/null
+++ b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Program.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Linq;
+
+namespace SoftCertPolicyAppender
+{
+    class Program
+    {
+        [STAThread]
+        static void Main(string[] args)
+        {
+
+            var cers = args.Where(x => x.EndsWith(".cer") || x.EndsWith(".crt") || x.EndsWith(".pem"));
+
+            foreach (var s in cers)
+            {
+                try
+                {
+                    var appdender = new CertPolicyAppender();
+                    appdender.Load(s);
+                    appdender.WriteRegisty();
+                    appdender.AddCertPolicy();
+                }
+                catch (Exception e)
+                {
+                    Console.ForegroundColor = ConsoleColor.Red;
+                    Console.WriteLine(e);
+                    Console.ResetColor();
+                }
+            }
+            Console.ForegroundColor = ConsoleColor.Green;
+            Console.WriteLine("Success!");
+            Console.ResetColor();
+        }
+    }
+}
diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Properties/AssemblyInfo.cs b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..f0b9516
--- /dev/null
+++ b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的常规信息通过以下
+// 特性集控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("AutoAddSoftCertPolicy")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("AutoAddSoftCertPolicy")]
+[assembly: AssemblyCopyright("Copyright ©  2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 使此程序集中的类型
+// 对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型,
+// 则将该类型上的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("535c51a8-9378-4723-9c8f-3cd1caa8bf56")]
+
+// 程序集的版本信息由下面四个值组成: 
+//
+//      主版本
+//      次版本 
+//      生成号
+//      修订号
+//
+// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
+// 方法是按如下所示使用“*”: 
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.csproj b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.csproj
new file mode 100644
index 0000000..3f475b3
--- /dev/null
+++ b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.csproj
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{E09D425B-49C1-4E27-A7CE-72EE8C7B129F}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>SoftCertPolicyAppender</RootNamespace>
+    <AssemblyName>SoftCertPolicyAppender</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <ApplicationManifest>app.manifest</ApplicationManifest>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="LocalPolicy">
+      <HintPath>..\_libs\LocalPolicy.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="CertPolicyAppender.cs" />
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.manifest" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file
diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/app.manifest b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/app.manifest
new file mode 100644
index 0000000..ff414e8
--- /dev/null
+++ b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/app.manifest
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
+  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
+    <security>
+      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
+        <!-- UAC 清单选项
+            如果要更改 Windows 用户帐户控制级别,请用以下节点之一替换 
+            requestedExecutionLevel 节点。
+
+        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
+        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
+        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
+
+            指定 requestedExecutionLevel 节点将会禁用文件和注册表虚拟化。
+            如果要利用文件和注册表虚拟化实现向后 
+            兼容性,则删除 requestedExecutionLevel 节点。
+        -->
+        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
+      </requestedPrivileges>
+    </security>
+  </trustInfo>
+
+  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+    <application>
+      <!-- 此应用程序设计使用的所有 Windows 版本的列表。
+      Windows 将会自动选择最兼容的环境。-->
+
+      <!-- 如果应用程序设计为使用 Windows Vista,请取消注释以下 supportedOS 节点-->
+      <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>-->
+
+      <!-- 如果应用程序设计使用 Windows 7,请取消注释以下 supportedOS 节点-->
+      <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
+
+      <!-- 如果应用程序设计为使用 Windows 8,请取消注释以下 supportedOS 节点-->
+      <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>-->
+
+      <!-- 如果应用程序设计为使用 Windows 8.1,请取消对以下 supportedOS 节点的注释-->
+      <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>-->
+
+    </application>
+  </compatibility>
+
+  <!-- 启用 Windows 公共控件和对话框的主题(Windows XP 和更高版本) -->
+  <!-- <dependency>
+    <dependentAssembly>
+      <assemblyIdentity
+          type="win32"
+          name="Microsoft.Windows.Common-Controls"
+          version="6.0.0.0"
+          processorArchitecture="*"
+          publicKeyToken="6595b64144ccf1df"
+          language="*"
+        />
+    </dependentAssembly>
+  </dependency>-->
+
+</asmv1:assembly>
diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/_libs/LocalPolicy.dll b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/_libs/LocalPolicy.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ce6182b9df0b1bd80182a285ce8e346af164932f
GIT binary patch
literal 15360
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

literal 0
HcmV?d00001

diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/_libs/LocalPolicy.pdb b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/_libs/LocalPolicy.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..da00051e04e160dc37ae1ba86d32cd1caeac5ed3
GIT binary patch
literal 44544
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
Lz?cLsItlzge3Jx#

literal 0
HcmV?d00001

-- 
GitLab