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


Функция CryptMsgUpdate (wincrypt.h)

Функция CryptMsgUpdate добавляет содержимое в сообщение шифрования. Использование этой функции позволяет создавать сообщения по частям с помощью повторяющихся вызовов CryptMsgUpdate. Добавленное содержимое сообщения либо кодируется, либо декодируется в зависимости от того, было ли сообщение открыто с помощью CryptMsgOpenToEncode или CryptMsgOpenToDecode.

Синтаксис

BOOL CryptMsgUpdate(
  [in] HCRYPTMSG  hCryptMsg,
  [in] const BYTE *pbData,
  [in] DWORD      cbData,
  [in] BOOL       fFinal
);

Параметры

[in] hCryptMsg

Криптографический дескриптор обновляемого сообщения.

[in] pbData

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

[in] cbData

Число байтов данных в буфере pbData .

[in] fFinal

Указывает, что обрабатывается последний блок данных для кодирования или декодирования. Правильное использование этого флага зависит от того, содержит ли обрабатываемые сообщения отсоединяемые данные. Включение отсоединяемых данных в сообщение определяется параметром dwFlags на CMSG_DETACHED_FLAG в вызове функции, открывшей сообщение.

Если CMSG_DETACHED_FLAG не задан и сообщение было открыто с помощью CryptMsgOpenToDecode или CryptMsgOpenToEncode, fFinal имеет значение TRUE, а CryptMsgUpdate вызывается только один раз.

Если флаг CMSG_DETACHED_FLAG установлен и сообщение открывается с помощью CryptMsgOpenToEncode, fFinal имеет значение TRUE только при последнем вызове CryptMsgUpdate.

Если был установлен флаг CMSG_DETACHED_FLAG и сообщение открывается с помощью CryptMsgOpenToDecode, то при обработке заголовка одним вызовом CryptMsgUpdatefFinal устанавливается значение TRUE. При обработке отсоединяемых данных в последующих вызовах CryptMsgUpdate устанавливается значение FALSE, пока не будет обработан последний блок отсоединяемых данных. При последнем вызове CryptMsgUpdate устанавливается значение TRUE.

При декодировании отсоединяемых данных заголовок и содержимое сообщения содержатся в разных BLOB-объектах. Для каждого большого двоичного объекта требуется, чтобы параметр fFinal был установлен в значение TRUE при последнем вызове функции для этого БОЛЬШОГО ДВОИЧНОГО ОБЪЕКТА.

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

Если функция выполнена успешно, возвращаемое значение не равно нулю (TRUE).

Если функция завершается ошибкой, возвращаемое значение равно нулю (FALSE). Для получения дополнительных сведений об ошибке вызовите Метод GetLastError.

Ошибки, возникающие в определяемой приложением функции обратного вызова, указанной pStreamInfo в CryptMsgOpenToDecode и CryptMsgOpenToEncode , могут распространяться на CryptMsgUpdate , если используется потоковая передача. В этом случае метод SetLastError не вызывается службой CryptMsgUpdate после возврата функции обратного вызова, которая сохраняет все возникшие ошибки под управлением приложения. Функция обратного вызова (или один из вызываемых ею API) отвечает за вызов SetLastError , если во время обработки приложением потоковых данных возникает ошибка.

В следующей таблице перечислены коды ошибок, наиболее часто возвращаемые функцией GetLastError .

Код возврата Описание
CRYPT_E_INVALID_MSG_TYPE
Недопустимый тип сообщения.
CRYPT_E_MSG_ERROR
Произошла ошибка при выполнении криптографической операции.
CRYPT_E_OID_FORMAT
Идентификатор объекта имеет неправильный формат.
CRYPT_E_UNEXPECTED_ENCODING
Сообщение не закодировано должным образом.
CRYPT_E_UNKNOWN_ALGO
Алгоритм шифрования неизвестен.
E_INVALIDARG
Один или несколько аргументов являются недопустимыми.
E_OUTOFMEMORY
Не хватает памяти.
 

Распространенные ошибки могут возникать в любой из следующих функций:

Если функция завершается сбоем, GetLastError может вернуть ошибку кодирования и декодирования абстрактной синтаксической нотации 1 (ASN.1). Сведения об этих ошибках см. в разделе Кодирование и декодирование возвращаемых значений ASN.1.

Требования

Требование Значение
Минимальная версия клиента Windows XP [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header wincrypt.h
Библиотека Crypt32.lib
DLL Crypt32.dll

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

CryptMsgGetParam

CryptMsgOpenToDecode

CryptMsgOpenToEncode

Низкоуровневые функции сообщений

Упрощенные функции сообщений