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


Метод IXpsSignatureManager::Sign (xpsdigitalsignature.h)

Подписывает содержимое пакета XPS, как указано в параметрах подписи, и возвращает полученную цифровую подпись.

Синтаксис

HRESULT Sign(
  [in]          IXpsSigningOptions *signOptions,
  [in]          const CERT_CONTEXT *x509Certificate,
  [out, retval] IXpsSignature      **signature
);

Параметры

[in] signOptions

Указатель на интерфейс IXpsSigningOptions , содержащий параметры подписывания.

Примечание  

Свойства SignatureMethod и DigestMethod интерфейса IXpsSigningOptions должны быть инициализированы, прежде чем указатель на этот интерфейс можно будет использовать в параметре signOptions .

 

[in] x509Certificate

Указатель на структуру CERT_CONTEXT , содержащую сертификат X.509, используемый для подписи.

[out, retval] signature

Указатель на интерфейс IXpsSignature , содержащий новую цифровую подпись.

В случае успешного выполнения этот метод создает часть подписи, добавляет ее в пакет и в сигнатуре возвращает указатель на интерфейс этой части сигнатуры.

Возвращаемое значение

Метод возвращает HRESULT. Возможные значения включают, помимо прочего, значения в следующей таблице. Возвращаемые значения, не перечисленные в этой таблице, см. в разделах Ошибки API цифровой подписи XPS и Ошибки документа XPS.

Код возврата Описание
S_OK
Метод выполнен успешно.
XPS_E_MARKUP_COMPATIBILITY_ELEMENTS
Значение XPS_SIGN_FLAGS указывает, что элементы совместимости разметки не ожидаются; однако были найдены элементы совместимости разметки.
XPS_E_NO_CUSTOM_OBJECTS
signOptions не указывает на реализацию распознанного интерфейса. Пользовательская реализация интерфейсов API документов XPS не поддерживается.
XPS_E_PACKAGE_NOT_OPENED
Пакет XPS еще не открыт в диспетчере подписей.

Комментарии

Добавление новой сигнатуры не перезаписывает исходный файл или поток, который был прочитан путем вызова метода LoadPackageFile или LoadPackageStream . Подпись будет добавлена в копию пакета XPS в памяти, пока пакет не будет сохранен (путем вызова метода SavePackageToFile или SavePackageToStream ).

Если новая сигнатура содержит части, содержащие элементы совместимости разметки, по умолчанию этот метод завершается ошибкой XPS_E_MARKUP_COMPATIBILITY_ELEMENTS. Чтобы переопределить это поведение, вызовите IXpsSigningOptions::SetFlags; Будет задан флаг XPS_SIGN_FLAGS_IGNORE_MARKUP_COMPATIBILITY в интерфейсе IXpsSigningOptions , на который ссылается параметр signOptions .

Если этот метод возвращает значение HRESULT , которое отсутствует в списке возвращаемых значений, диспетчер подписей должен быть освобожден и повторно создан.

Этот метод будет успешным, даже если новая сигнатура нарушает существующие сигнатуры.

Требования

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

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

CERT_CONTEXT

IXpsSignature

IXpsSignatureManager

IXpsSigningOptions

XPS

Ошибки API цифровой подписи XPS

Ошибки документа XPS