Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция NCryptStreamUpdate шифрует и расшифровывает блоки данных.
Синтаксис
SECURITY_STATUS NCryptStreamUpdate(
[in] NCRYPT_STREAM_HANDLE hStream,
[in] const BYTE *pbData,
SIZE_T cbData,
BOOL fFinal
);
Параметры
[in] hStream
Дескриптор объекта потока, созданного путем вызова NCryptStreamOpenToProtect или NCryptStreamOpenToUnprotect.
[in] pbData
Указатель на обрабатываемый массив байтов.
cbData
Число байтов в двоичном массиве, заданное параметром pbData .
fFinal
Логическое значение, указывающее, был ли обработан последний блок данных.
Возвращаемое значение
Возвращает код состояния, указывающий на успешное или неудачное выполнение функции. Возможные коды возврата включают, помимо прочего, следующие.
| Код возврата | Описание |
|---|---|
|
Функция выполнена успешно. |
|
Не удалось декодировать содержимое. |
|
Недопустимый дескриптор потока, на который указывает параметр hStream . |
|
Недостаточно памяти для обработки содержимого. |
Комментарии
Необходимо вызвать NCryptStreamOpenToProtect или NCryptStreamOpenToUnprotect, чтобы открыть поток перед вызовом NCryptStreamUpdate.
Сообщения могут быть настолько большими, что их одновременное обработка путем сохранения всего сообщения в памяти может оказаться сложной задачей. Однако можно обрабатывать большие сообщения путем секционирования обрабатываемых данных на управляемые блоки.
Для этого используйте NCryptStreamUpdate в цикле, который проходит через блок файла за блоком. При обработке потокового сообщения полученные выходные данные передаются приложению с помощью указанной функции обратного вызова. Процедура показана в следующем примере. Дополнительные сведения о функции обратного вызова см. в разделе PFNCryptStreamOutputCallback.
BOOL fFinal = FALSE;
PBYTE pbBuf = NULL;
// Determine the number of bytes to read.
DWORD cbData = GetFileSize( hFileIn, NULL );
// Call NCryptStreamUpdate while there is data left to read.
while(FALSE == fFinal)
{
// Read dwBlockSize bytes from the file.
if(dwBlockSize > 1)
{
if( !ReadFile(hFileIn, pbBuf, dwBlockSize, &cbResult, NULL) )
{
hr = HRESULT_FROM_WIN32(hr);
goto CleanUp;
}
}
// Decrement the number of bytes to read by the current amount read.
cbData -= cbResult;
// Set fFinal if there are no bytes left to read.
if (cbData <= 0) fFinal = TRUE;
// Encrypt (or decrypt) the bytes pointed to by pbBuf
hr = NCryptStreamUpdate(hStream, pbBuf, cbResult, fFinal);
if( FAILED(hr) )
{
goto CleanUp;
}
}
CleanUp:
if( NULL != hStream )
{
NCryptStreamClose(hStream);
}
if( NULL != hDescriptor )
{
NCryptCloseProtectionDescriptor( hDescriptor );
}
if(NULL != pbBuf)
{
LocalFree(pbBuf);
pbBuf = NULL;
}
Требования
| Требование | Значение |
|---|---|
| Минимальная версия клиента | Windows 8 [только классические приложения] |
| Минимальная версия сервера | Windows Server 2012 [только классические приложения] |
| Целевая платформа | Windows |
| Header | ncryptprotect.h |
| Библиотека | NCrypt.lib |
| DLL | NCrypt.dll |