Поделиться через


Метод 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
Хотя бы один из параметров сертификата, signingOptions и digitalSignature имеет значение 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
Указанная часть не существует.
Ошибка шифрования
Код ошибки HRESULT из API шифрования .
Ошибка веб-служб Windows
Код ошибки HRESULT из API веб-служб Windows .

Комментарии

Этот метод использует объекты Packaging для внесения изменений в пакет. Результирующий изменения не сохраняются, пока не будет сохранен сам пакет.

Перед вызовом этого метода для создания сигнатуры вызовите методы IOpcSigningOptions::SetDefaultDigestMethod и IOpcSigningOptions::SetSignatureMethod .

Чтобы создать указатель интерфейса IOpcSigningOptions , необходимый для этого метода, вызовите метод CreateSigningOptions .

Важно Если пакет изменяется во время выполнения этого метода, функция Sign может завершиться ошибкой или создать несогласованную сигнатуру. Чтобы избежать повреждения пакета, используйте API для сохранения пакета перед вызовом Sign. Сведения о том, как сохранить пакет, см. в разделе Сохранение пакета.
 
Этот метод может создавать следующие части и связи:
  • Часть "Источник цифровой подписи"
  • Отношение пакета для типа связи источника цифровой подписи
  • Одна часть подписи, содержащая разметку подписи
  • Одна или несколько частей, содержащих сертификат
  • Одно отношение, которое предназначено для части подписи и имеет часть источника цифровой подписи в качестве источника.
  • Одно или несколько отношений, предназначенных для части подписи, содержащей сертификат, и которая имеет другую часть подписи в качестве источника

Если sign не удается, любая из указанных выше частей и связей может быть представлена в пакете объектами упаковки. Если метод возвращает OPC_E_DS_SIGNATURE_METHOD_NOT_SET или OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET код ошибки, пакет не был изменен.

При успешном выполнении sign значения дайджеста вычисляются для подписанных сущностей, а созданная сигнатура сериализуется как разметка подписи. Возможные подписанные сущности включают элемент Signature , ссылки, части, связи, а также элементы Object , относящиеся к конкретному пакету и приложению.

Ошибки, которые вводятся в сигнатуру пакета, когда вызывающий объект использует интерфейс IOpcSigningOptions для задания сведений о подписи, могут не предоставляться до вызова Sign .

Потокобезопасность

Объекты упаковки не являются потокобезопасны.

Дополнительные сведения см. в статье начало работы с помощью API упаковки.

Требования

Требование Значение
Минимальная версия клиента Windows 7 [только классические приложения]
Минимальная версия сервера Windows Server 2008 R2 [только классические приложения]
Целевая платформа Windows
Header msopc.h

См. также раздел

Основные интерфейсы упаковки

Цифровые сертификаты

Общие сведения о цифровых подписях

начало работы с помощью API упаковки

IOpcDigitalSignatureManager

Разделы общих сведений

Руководство по программированию API упаковки

Справочник по API упаковки

Примеры API упаковки

Упаковка интерфейсов цифровой подписи

Интерфейсы упаковки

Справочные материалы

Сохранение пакета