IOpcDigitalSignatureManager::Sign-Methode (msopc.h)

Signiert das Paket, indem eine Signatur mithilfe des angegebenen Zertifikats und des IOpcSigningOptions-Schnittstellenzeigers generiert wird. Die resultierende Signatur wird durch einen IOpcDigitalSignature-Schnittstellenzeiger dargestellt.

Syntax

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

Parameter

[in] certificate

Ein Zeiger auf eine CERT_CONTEXT Struktur, die das Zertifikat enthält.

[in] signingOptions

Ein IOpcSigningOptions-Schnittstellenzeiger , der zum Generieren der Signatur verwendet wird.

[out, retval] digitalSignature

Ein neuer IOpcDigitalSignature-Schnittstellenzeiger , der die Signatur darstellt.

Rückgabewert

Die Methode gibt ein HRESULT zurück. Mögliches Werte (aber nicht die Einzigen) sind die in der folgenden Tabelle.

Rückgabecode/-wert BESCHREIBUNG
S_OK
Die Methode wurde erfolgreich ausgeführt.
E_POINTER
Mindestens einer der Parameter certificate, signingOptions und digitalSignature ist NULL.
OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET
0x80510047
Die Standard-Digestmethode wurde nicht festgelegt. Rufen Sie zum Festlegen IOpcSigningOptions::SetDefaultDigestMethod auf.
OPC_E_DS_DIGEST_VALUE_ERROR
0x8051001A
Der Digestwert einer Paketkomponente oder eines Elements im Signaturmarkup, auf das für die Signatur verwiesen wurde, kann nicht abgerufen werden.
OPC_E_DS_INVALID_OPC_SIGNATURE_TIME_FORMAT
0x80510024
Das Zeitformat der Signatur ist kein gültiger OPC_SIGNATURE_TIME_FORMAT Enumerationswert.
OPC_E_DS_INVALID_RELATIONSHIPS_SIGNING_OPTION
0x80510023
Eine angegebene Beziehungssignaturoption ist kein gültiger OPC_RELATIONSHIPS_SIGNING_OPTION Enumerationswert.
OPC_E_DS_SIGNATURE_CORRUPT
0x80510019
Eine Signatur im Paket ist nicht ordnungsgemäß gebildet. Der Signaturwert kann nicht abgerufen werden.
OPC_E_DS_SIGNATURE_METHOD_NOT_SET
0x80510046
Die Signaturmethode wurde nicht festgelegt. Rufen Sie IOpcSigningOptions::SetSignatureMethod auf, um die Signaturmethode festzulegen.
OPC_E_NO_SUCH_PART
0x80510018
Der angegebene Teil ist nicht vorhanden.
Kryptografiefehler
Ein HRESULT-Fehlercode aus einer Kryptografie-API .
Fehler "Windows-Webdienste"
Ein HRESULT-Fehlercode aus einer Windows-Webdienst-API .

Hinweise

Diese Methode verwendet Packaging-Objekte, um Änderungen an einem Paket vorzunehmen. Die resultierenden Änderungen werden erst gespeichert, wenn das Paket selbst gespeichert ist.

Bevor diese Methode aufgerufen wird, um eine Signatur zu generieren, rufen Sie die Methoden IOpcSigningOptions::SetDefaultDigestMethod und IOpcSigningOptions::SetSignatureMethod auf.

Um einen IOpcSigningOptions-Schnittstellenzeiger zu erstellen, der für diese Methode erforderlich ist, rufen Sie die CreateSigningOptions-Methode auf.

Wichtig Wenn das Paket während der Ausführung dieser Methode geändert wird, schlägt Sign möglicherweise fehl oder generiert eine inkonsistente Signatur. Um eine Beschädigung des Pakets zu vermeiden, verwenden Sie die APIs, um das Paket vor dem Aufrufen von Sign zu speichern. Informationen zum Speichern eines Pakets finden Sie unter Speichern eines Pakets.
 
Diese Methode kann die folgenden Teile und Beziehungen erstellen:
  • Der Teil "Ursprung der digitalen Signatur"
  • Die Paketbeziehung des Beziehungstyps für den Ursprung der digitalen Signatur
  • Ein Signaturteil, das Signaturmarkup enthält
  • Mindestens ein Teil, der ein Zertifikat enthält
  • Eine Beziehung, die auf einen Signaturteil abzielt und die den Teil "Digital Signature Origin" als Quelle enthält
  • Mindestens eine Beziehung, die auf ein Signaturteil abzielt, das ein Zertifikat enthält und ein anderes Signaturteil als Quelle enthält

Wenn Sign fehlschlägt, kann einer der oben genannten Teile und Beziehungen im Paket durch Packaging-Objekte dargestellt werden. Wenn die Methode den OPC_E_DS_SIGNATURE_METHOD_NOT_SET oder OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET Fehlercode zurückgibt, wurde das Paket nicht geändert.

Wenn Sign erfolgreich ist, werden Digestwerte für signierte Entitäten berechnet, und die generierte Signatur wird als Signaturmarkup serialisiert. Mögliche signierte Entitäten umfassen das Signature-Element , Verweise, Teile, Beziehungen sowie paketspezifische und anwendungsspezifische Object-Elemente .

Fehler, die in eine Paketsignatur eingefügt werden, wenn der Aufrufer die IOpcSigningOptions-Schnittstelle zum Festlegen von Signaturinformationen verwendet, werden möglicherweise erst verfügbar gemacht, wenn Sign aufgerufen wird.

Threadsicherheit

Das Packen von Objekten ist nicht threadsicher.

Weitere Informationen finden Sie im Erste Schritte mit der Verpackungs-API.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 7 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 R2 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile msopc.h

Weitere Informationen

Kernverpackungsschnittstellen

Digitale Zertifikate

Übersicht über digitale Signaturen

Erste Schritte mit der Verpackungs-API

IOpcDigitalSignatureManager

Übersichten

Programmierhandbuch für die Paket-API

Verpackungs-API-Referenz

Beispiele für die Paket-API

Packen von Schnittstellen für digitale Signatur

Verpackungsschnittstellen

Referenz

Speichern eines Pakets