Bagikan melalui


Fungsi NCryptStreamUpdate (ncryptprotect.h)

Fungsi NCryptStreamUpdate mengenkripsi dan mendekripsi blok data.

Sintaks

SECURITY_STATUS NCryptStreamUpdate(
  [in] NCRYPT_STREAM_HANDLE hStream,
  [in] const BYTE           *pbData,
       SIZE_T               cbData,
       BOOL                 fFinal
);

Parameter

[in] hStream

Tangani ke objek stream yang dibuat dengan memanggil NCryptStreamOpenToProtect atau NCryptStreamOpenToUnprotect.

[in] pbData

Penunjuk ke array byte yang akan diproses.

cbData

Jumlah byte dalam array biner yang ditentukan oleh parameter pbData .

fFinal

Nilai Boolean yang menentukan apakah blok data terakhir telah diproses.

Nilai kembali

Mengembalikan kode status yang menunjukkan keberhasilan atau kegagalan fungsi. Kemungkinan kode pengembalian termasuk, tetapi tidak terbatas pada, berikut ini.

Menampilkan kode Deskripsi
ERROR_SUCCESS
Fungsi berhasil.
NTE_BAD_DATA
Isi tidak dapat didekodekan.
NTE_INVALID_HANDLE
Handel aliran yang ditujukan oleh parameter hStream tidak valid.
NTE_NO_MEMORY
Tidak tersedia cukup memori untuk memproses isi.

Keterangan

Anda harus memanggil NCryptStreamOpenToProtect atau NCryptStreamOpenToUnprotect untuk membuka aliran sebelum memanggil NCryptStreamUpdate

Pesan bisa sangat besar sehingga memproses semuanya sekaligus dengan menyimpan seluruh pesan dalam memori bisa sulit. Namun, dimungkinkan untuk memproses pesan besar dengan mempartisi data yang akan diproses menjadi blok yang dapat dikelola.

Untuk melakukan ini, gunakan NCryptStreamUpdate dalam perulangan yang maju melalui blok file menurut blok. Saat pesan yang dialirkan diproses, data output yang dihasilkan diteruskan kembali ke aplikasi Anda dengan menggunakan fungsi panggilan balik yang Anda tentukan. Ini ditunjukkan oleh contoh berikut. Untuk informasi selengkapnya tentang fungsi panggilan balik, lihat PFNCryptStreamOutputCallback.

Catatan Sebaiknya jangan menggunakan ukuran blok yang terlalu kecil. Blok kecil membutuhkan lebih banyak panggilan dan oleh karena itu lebih banyak memanggil overhead. Selanjutnya, API streaming dioptimalkan untuk blok yang lebih besar. Anda harus bereksperimen untuk menemukan ukuran blok terbaik untuk data yang harus Anda proses.
 
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;
    }

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 8 [khusus aplikasi desktop]
Server minimum yang didukung Windows Server 2012 [hanya aplikasi desktop]
Target Platform Windows
Header ncryptprotect.h
Pustaka NCrypt.lib
DLL NCrypt.dll

Lihat juga

Fungsi CNG DPAPI

NCRYPT_PROTECT_STREAM_INFO

NCryptStreamOpenToProtect

NCryptStreamOpenToUnprotect