NCryptStreamUpdate 함수(ncryptprotect.h)
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 매개 변수가 가리키는 스트림 핸들이 잘못되었습니다. |
|
콘텐츠를 처리하는 데 사용할 수 있는 메모리가 부족했습니다. |
설명
NCryptStreamUpdate를 호출하기 전에 NCryptStreamOpenToProtect 또는 NCryptStreamOpenToUnprotect를 호출하여 스트림을 열어야 합니다.
메시지가 너무 커서 전체 메시지를 메모리에 저장하여 한 번에 모두 처리하는 것이 어려울 수 있습니다. 그러나 관리 가능한 블록으로 처리할 데이터를 분할하여 큰 메시지를 처리할 수 있습니다.
이렇게 하려면 블록별로 파일 블록을 통과하는 루프에서 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 |
헤더 | ncryptprotect.h |
라이브러리 | NCrypt.lib |
DLL | NCrypt.dll |