IOpcDigitalSignatureManager::Sign 方法 (msopc.h)

通过使用指定的证书和 IOpcSigningOptions 接口指针生成签名来对包进行签名。 生成的签名由 IOpcDigitalSignature 接口指针表示。

语法

HRESULT Sign(
  [in]          const CERT_CONTEXT   *certificate,
  [in]          IOpcSigningOptions   *signingOptions,
  [out, retval] IOpcDigitalSignature **digitalSignature
);

参数

[in] certificate

指向包含证书 的CERT_CONTEXT 结构的指针。

[in] signingOptions

用于生成签名的 IOpcSigningOptions 接口指针。

[out, retval] digitalSignature

表示签名的新 IOpcDigitalSignature 接口指针。

返回值

该方法返回 HRESULT。 可能的值包括(但并不限于)下表中的项。

返回代码/值 说明
S_OK
方法成功。
E_POINTER
至少一个 证书signingOptionsdigitalSignature 参数为 NULL
OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET
0x80510047
尚未设置默认摘要方法;若要设置它,请调用 IOpcSigningOptions::SetDefaultDigestMethod
OPC_E_DS_DIGEST_VALUE_ERROR
0x8051001A
无法获取用于签名的引用的包组件或签名标记中的元素的摘要值。
OPC_E_DS_INVALID_OPC_SIGNATURE_TIME_FORMAT
0x80510024
签名的时间格式不是有效的 OPC_SIGNATURE_TIME_FORMAT 枚举值。
OPC_E_DS_INVALID_RELATIONSHIPS_SIGNING_OPTION
0x80510023
指示的关系签名选项不是有效的 OPC_RELATIONSHIPS_SIGNING_OPTION 枚举值。
OPC_E_DS_SIGNATURE_CORRUPT
0x80510019
包中的签名格式不正确。 无法获取签名值。
OPC_E_DS_SIGNATURE_METHOD_NOT_SET
0x80510046
尚未设置签名方法。 调用 IOpcSigningOptions::SetSignatureMethod 来设置签名方法。
OPC_E_NO_SUCH_PART
0x80510018
指定的部件不存在。
加密错误
来自加密 API 的HRESULT 错误代码。
Windows Web 服务错误
来自 Windows Web 服务 API 的 HRESULT 错误代码。

注解

此方法使用 Packaging 对象对包进行更改。 在保存包本身之前,不会保存生成的更改。

在调用此方法以生成签名之前,请调用 IOpcSigningOptions::SetDefaultDigestMethodIOpcSigningOptions::SetSignatureMethod 方法。

若要创建 此方法所需的 IOpcSigningOptions 接口指针,请调用 CreateSigningOptions 方法。

重要 如果在执行此方法时修改包, 则签名 可能会失败或生成不一致的签名。 若要避免包损坏,请在调用 Sign 之前使用 API 保存包。 有关如何保存包的信息,请参阅 保存包
 
此方法可能会创建以下部分和关系:
  • 数字签名源部件
  • 数字签名源关系类型的包关系
  • 一个包含签名标记的签名部件
  • 包含证书的一个或多个部件
  • 一个以签名部件为目标且以数字签名源部件为源的关系
  • 一个或多个关系,该关系面向包含证书且具有另一个签名部件作为其源的签名部件

如果 Sign 失败,上述任何部分和关系都可以在包中由 Packaging 对象表示。 如果方法返回 OPC_E_DS_SIGNATURE_METHOD_NOT_SETOPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET 错误代码,则未更改包。

如果 Sign 成功,则会计算已签名实体的摘要值,并将生成的签名序列化为签名标记。 可能的签名实体包括 Signature 元素、引用、部件、关系以及特定于包和特定于应用程序的 Object 元素。

调用方使用 IOpcSigningOptions 接口设置签名信息时引入包签名的错误在调用 Sign 之前可能不会公开。

线程安全性

打包对象不是线程安全的。

有关详细信息,请参阅打包 API 的入门

要求

要求
最低受支持的客户端 Windows 7 [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 R2 [仅限桌面应用]
目标平台 Windows
标头 msopc.h

另请参阅

核心打包接口

数字证书

数字签名概述

使用打包 API 入门

IOpcDigitalSignatureManager

概述

打包 API 编程指南

打包 API 参考

打包 API 示例

打包数字签名接口

打包接口

引用

保存包