IOpcDigitalSignatureManager::ReplaceSignatureXml 方法 (msopc.h)

替换存储在指定签名部件中的现有签名标记。

语法

HRESULT ReplaceSignatureXml(
  [in]          IOpcPartUri          *signaturePartName,
  [in]          const UINT8          *newSignatureXml,
  [in]          UINT32               count,
  [out, retval] IOpcDigitalSignature **digitalSignature
);

参数

[in] signaturePartName

一个 IOpcPartUri 接口指针,表示存储现有签名标记的签名部件的部件名称。

[in] newSignatureXml

包含将替换现有标记的签名标记的缓冲区。

[in] count

newSignatureXml 缓冲区的大小。

[out, retval] digitalSignature

指向新 IOpcDigitalSignature 接口的指针,该接口表示从 newSignatureXml 中传递的签名标记派生的签名。

返回值

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

返回代码/值 说明
S_OK
方法成功。
E_POINTER
至少一个 signaturePartNamenewSignatureXmldigitalSignature 参数为 NULL
OPC_E_DS_DUPLICATE_PACKAGE_OBJECT_REFERENCES
0x8051002D
newSignatureXml 缓冲区包含多个引用包 Object 元素的 Reference 元素,但只允许一个此类引用
OPC_E_DS_DUPLICATE_SIGNATURE_PROPERTY_ELEMENT
0x80510028
newSignatureXml 缓冲区包含多个具有相同 Id 属性的 SignatureProperty 元素。
OPC_E_DS_EXTERNAL_SIGNATURE_REFERENCE
0x8051002F
newSignatureXml 缓冲区中, Reference 元素引用包外部的对象。 引用 元素必须指向内部的部件或 Object 元素。
OPC_E_DS_INVALID_CANONICALIZATION_METHOD
0x80510022
在 newSignatureXml 缓冲区中请求或使用了不受支持的规范化方法。
OPC_E_DS_INVALID_RELATIONSHIP_TRANSFORM_XML
0x80510021
newSignatureXml 缓冲区中,指示关系转换的使用和转换选择条件的 Transform 元素不符合 OPC 中指定的架构。
OPC_E_DS_INVALID_SIGNATURE_COUNT
0x8051002B
newSignatureXml 缓冲区不包含一个签名的签名标记。
OPC_E_DS_INVALID_SIGNATURE_XML
0x8051002A
newSignatureXml 缓冲区的大小为 0,但此缓冲区的大小必须大于 0。
OPC_E_DS_MISSING_CANONICALIZATION_TRANSFORM
0x80510032
newSignatureXml 缓冲区中,关系转换不后跟规范化方法;关系转换必须后跟规范化方法。
OPC_E_DS_MISSING_PACKAGE_OBJECT_REFERENCE
0x8051002E
newSignatureXml 缓冲区中,找不到对包特定的 Object 元素的引用
OPC_E_DS_MISSING_SIGNATURE_ALGORITHM
0x8051002C
newSignatureXml 缓冲区中的签名标记未指定签名方法算法。
OPC_E_DS_MISSING_SIGNATURE_PROPERTIES_ELEMENT
0x80510026
newSignatureXml 缓冲区中,找不到 SignatureProperties 元素。
OPC_E_DS_MISSING_SIGNATURE_PROPERTY_ELEMENT
0x80510027
newSignatureXml 缓冲区中,找不到 SignatureProperties 元素的 SignatureProperty 子元素。
OPC_E_DS_MISSING_SIGNATURE_TIME_PROPERTY
0x80510029
newSignatureXml 缓冲区中,Id 属性值为“idSignatureTime”的 SignatureProperty 元素不存在或构造不正确。
OPC_E_DS_MULTIPLE_RELATIONSHIP_TRANSFORMS
0x80510031
newSignatureXml 缓冲区中,为 Reference 元素指定了多个关系转换,但只允许一个关系转换。
OPC_E_DS_REFERENCE_MISSING_CONTENT_TYPE
0x80510030
newSignatureXml 缓冲区中 Reference 元素的 URI 属性值不包括所引用部件的内容类型。
OPC_E_DS_SIGNATURE_PROPERTY_MISSING_TARGET
0x80510045
newSignatureXml 缓冲区中, SignatureProperty 元素缺少所需的 Target 属性。
OPC_E_DS_SIGNATURE_REFERENCE_MISSING_URI
0x80510043
NewSignatureXml 缓冲区中的 Reference 元素需要 URI 属性,但缺少该属性。
OPC_E_DS_UNSIGNED_PACKAGE
0x80510055
包未签名;因此,无法替换签名标记。
OPC_E_NO_SUCH_PART
0x80510018
指定的部件不存在。

注解

此方法不验证从 newSignatureXml 参数中的新签名标记派生的签名。

调用方必须确认新签名标记(替换指定签名部件中的现有签名标记)不会破坏签名。

此方法更改现有签名标记;保留具有指定签名部分作为其源的证书和关系。

线程安全性

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

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

要求

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

另请参阅

核心打包接口

数字签名概述

使用打包 API 入门

IOpcDigitalSignatureManager

概述

打包 API 编程指南

打包 API 参考

打包 API 示例

打包数字签名接口

打包接口

引用