Функция 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 .
Код возврата | Описание |
---|---|
|
Недопустимый тип сообщения. |
|
Произошла ошибка при выполнении криптографической операции. |
|
Идентификатор объекта имеет неправильный формат. |
|
Сообщение не закодировано должным образом. |
|
Алгоритм шифрования неизвестен. |
|
Один или несколько аргументов являются недопустимыми. |
|
Не хватает памяти. |
Распространенные ошибки могут возникать в любой из следующих функций:
Если функция завершается сбоем, GetLastError может вернуть ошибку кодирования и декодирования абстрактной синтаксической нотации 1 (ASN.1). Сведения об этих ошибках см. в разделе Кодирование и декодирование возвращаемых значений ASN.1.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | wincrypt.h |
Библиотека | Crypt32.lib |
DLL | Crypt32.dll |