我已经在硬件实验室工具包中使用 USB 设备完成了所有测试,现在可以准备 .hlkx 驱动程序包以在Microsoft网站上提交。
问题是 Windows 10 驱动程序需要 EV 证书。EV 证书随安全网 USB 令牌一起提供,并且此 USB 令牌远离安装了硬件实验室工具包的计算机,因此我无法在硬件实验室工具包中自动对 .hlkx 包进行签名。
问题是如何让我的 Windows 10 USB 驱动程序签名?我有未签名的驱动程序(系统,驾驶室,inf ...文件),我有来自硬件实验室工具包的未签名的 .hlkx 驱动程序包。我可以在不提交Microsoft网站的情况下为我的驱动程序签名吗?
你可以
- 将 HLK 工作室安装到插入 EV 令牌的计算机;
- 使用 EV 令牌将未签名的 .hlkx 文件复制到计算机;
- 当你从 pt1 启动 HLK Studio 时,它将打开 .hlkx 文件,指定它;
- 在 HLK Studio 的"包"选项卡上,照常创建包。
阿列克谢提供的答案对我不起作用,我最终使用了这个页面的源代码:
https://msdn.microsoft.com/en-us/library/windows/hardware/mt674914%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396
我不得不做一些额外的调整:
在使用它之前,请确保 EV 证书位于您的个人证书存储中。在USB令牌的工具中,您应该能够打开证书并选择"安装证书"。
在 Visual Studio 中创建一个新的控制台应用程序,并将此源代码粘贴到其中。安装 nugget 包 "WindowsBase" 以获取 System.IO.Packaging 命名空间。
通过一些额外的源代码,我们可以让它工作:
class Program
{
static void Main(string[] args)
{
X509Store store = new X509Store("My");
store.Open(OpenFlags.ReadOnly);
X509Certificate2 evCert = null;
foreach (X509Certificate2 mCert in store.Certificates)
{
if (mCert.Thumbprint == "3DF652D7EyourThumbprintF")
{
evCert = mCert;
}
}
Sign(@"C:PathToYourHLKXFile.hlkx", evCert);
}
public static void Sign(string package, X509Certificate2 certificate)
{
// Open the package to sign it
Package packageToSign = Package.Open(package);
// Specify that the digital signature should exist
// embedded in the signature part
PackageDigitalSignatureManager signatureManager = new PackageDigitalSignatureManager(packageToSign);
signatureManager.CertificateOption = CertificateEmbeddingOption.InCertificatePart;
// We want to sign every part in the package
List<Uri> partsToSign = new List<Uri>();
foreach (PackagePart part in packageToSign.GetParts())
{
partsToSign.Add(part.Uri);
}
// We will sign every relationship by type
// This will mean the signature is invalidated if *anything* is modified in //the package post-signing
List<PackageRelationshipSelector> relationshipSelectors = new List<PackageRelationshipSelector>();
foreach (PackageRelationship relationship in packageToSign.GetRelationships())
{
relationshipSelectors.Add(new PackageRelationshipSelector(relationship.SourceUri, PackageRelationshipSelectorType.Type, relationship.RelationshipType));
}
try
{
signatureManager.Sign(partsToSign, certificate, relationshipSelectors);
}
finally
{
packageToSign.Close();
}
}
}
将指纹替换为 EV 证书 SHA1。