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 |
Library | NCrypt.lib |
[DLL] | NCrypt.dll |