Share via


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。 如需如何儲存套件的詳細資訊,請參閱 儲存套件
 
這個方法可能會建立下列部分和關聯性:
  • 數位簽名來源部分
  • 數位簽名原始關聯性類型的套件關聯性
  • 包含簽章標記的一個簽章元件
  • 包含憑證的一或多個元件
  • 以簽章元件為目標的一個關聯性,其具有數位簽名來源元件作為其來源
  • 以包含憑證且具有另一個簽章部分作為其來源之簽章元件的一或多個關聯性

如果 Sign 失敗,則封裝物件可以在封裝中表示上述任何部分和關聯性。 如果方法傳回 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 範例

封裝數位簽名介面

封裝介面

參考

儲存套件