Condividi tramite


Metodo IOpcDigitalSignatureManager::Sign (msopc.h)

Firma il pacchetto generando una firma usando il certificato specificato e il puntatore dell'interfaccia IOpcSigningOptions . La firma risultante è rappresentata da un puntatore dell'interfaccia IOpcDigitalSignature .

Sintassi

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

Parametri

[in] certificate

Puntatore a una struttura CERT_CONTEXT contenente il certificato.

[in] signingOptions

Puntatore dell'interfaccia IOpcSigningOptions usato per generare la firma.

[out, retval] digitalSignature

Nuovo puntatore dell'interfaccia IOpcDigitalSignature che rappresenta la firma.

Valore restituito

Il metodo restituisce un HRESULT. I valori possibili includono, ma non sono limitati a, quelli indicati nella tabella seguente.

Codice/valore restituito Descrizione
S_OK
Il metodo è riuscito.
E_POINTER
Almeno uno dei parametri certificate, firmaOptions e digitalSignature è NULL.
OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET
0x80510047
Il metodo digest predefinito non è stato impostato; per impostarlo, chiamare IOpcSigningOptions::SetDefaultDigestMethod.
OPC_E_DS_DIGEST_VALUE_ERROR
0x8051001A
Impossibile ottenere il valore del digest di un componente del pacchetto o un elemento nel markup della firma a cui è stato fatto riferimento per la firma.
OPC_E_DS_INVALID_OPC_SIGNATURE_TIME_FORMAT
0x80510024
Il formato ora della firma non è un valore di enumerazione valido OPC_SIGNATURE_TIME_FORMAT .
OPC_E_DS_INVALID_RELATIONSHIPS_SIGNING_OPTION
0x80510023
Un'opzione di firma della relazione indicata non è un valore di enumerazione valido OPC_RELATIONSHIPS_SIGNING_OPTION .
OPC_E_DS_SIGNATURE_CORRUPT
0x80510019
Una firma nel pacchetto non è corretta. Impossibile ottenere il valore della firma.
OPC_E_DS_SIGNATURE_METHOD_NOT_SET
0x80510046
Il metodo di firma non è stato impostato. Chiamare IOpcSigningOptions::SetSignatureMethod per impostare il metodo di firma.
OPC_E_NO_SUCH_PART
0x80510018
La parte specificata non esiste.
Errore di crittografia
Codice di errore HRESULT da un'API di crittografia .
Errore di Servizi Web Windows
Codice di errore HRESULT da un'API di Servizi Web Windows .

Commenti

Questo metodo usa oggetti Packaging per apportare modifiche a un pacchetto. Le modifiche risultanti non vengono salvate finché il pacchetto stesso non viene salvato.

Prima di chiamare questo metodo per generare una firma, chiamare i metodi IOpcSigningOptions::SetDefaultDigestMethod e IOpcSigningOptions::SetSignatureMethod.

Per creare un puntatore dell'interfaccia IOpcSigningOptions , richiesto da questo metodo, chiamare il metodo CreateSigningOptions .

Importante Se il pacchetto viene modificato durante l'esecuzione di questo metodo, Sign potrebbe non riuscire o generare una firma incoerente. Per evitare il danneggiamento del pacchetto, usare le API per salvare il pacchetto prima di chiamare Sign. Per informazioni su come salvare un pacchetto, vedere Salvataggio di un pacchetto.
 
Questo metodo può creare le parti e le relazioni seguenti:
  • Parte Origine firma digitale
  • Relazione del pacchetto del tipo di relazione di origine della firma digitale
  • Una parte di firma che contiene il markup della firma
  • Una o più parti che contengono un certificato
  • Una relazione che punta a una parte di firma e che ha la parte Origine firma digitale come origine
  • Una o più relazioni che puntano a una parte di firma che contiene un certificato e che ha un'altra parte di firma come origine

Se Sign ha esito negativo, una delle parti e delle relazioni precedenti può essere rappresentata, nel pacchetto, dagli oggetti Packaging. Se il metodo restituisce il codice di errore OPC_E_DS_SIGNATURE_METHOD_NOT_SET o OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET , il pacchetto non è stato modificato.

Se Sign ha esito positivo, i valori del digest vengono calcolati per le entità firmate e la firma generata viene serializzata come markup di firma. Le entità firmate possibili includono l'elemento Signature , i riferimenti, le parti, le relazioni e gli elementi Object specifici del pacchetto e specifici del pacchetto.

Errori introdotti in una firma del pacchetto quando il chiamante usa l'interfaccia IOpcSigningOptions per impostare le informazioni sulla firma potrebbe non essere esposto finché Sign non viene chiamato.

Thread safety

Gli oggetti di creazione dei pacchetti non sono thread-safe.

Per altre informazioni, vedere l'Introduzione con l'API Creazione pacchetti.

Requisiti

Requisito Valore
Client minimo supportato Windows 7 [solo app desktop]
Server minimo supportato Windows Server 2008 R2 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione msopc.h

Vedi anche

Interfacce di creazione di pacchetti principali

Certificati digitali

Panoramica delle firme digitali

Introduzione con l'API Creazione pacchetti

IOpcDigitalSignatureManager

Cenni preliminari

Guida alla programmazione dell'API per la creazione di pacchetti

Informazioni di riferimento sulle API per la creazione di pacchetti

Esempi di API di creazione di pacchetti

Creazione di interfacce di firma digitale per la creazione di pacchetti

Interfacce di creazione pacchetti

Riferimento

Salvataggio di un pacchetto