Menggunakan SecBufferDesc dan SecBuffer
Komunikasi sering melibatkan data dalam jumlah besar atau data dengan panjang yang tidak diketahui. Mengirim dan menerima data dilakukan dengan cara yang serupa atau identik dalam kedua kasus ini. Untuk menangani panjang yang tidak diketahui dan data dalam jumlah yang berpotensi besar, komunikasi SSPI dilakukan menggunakan dua struktur, SecBufferDesc dan SecBuffer.
Struktur SecBufferDesc adalah kontainer untuk array struktur SecBuffer . Struktur SecBufferDesc memiliki anggota berikut:
Struktur SecBuffer berisi tiga anggota berikut:
- Jumlah byte dalam buffer
- Jenis informasi yang terkandung dalam item data
- Byte itu sendiri
Seluruh pesan SSPI sering terdiri dari array struktur SecBuffer .
Jenis data buffer berikut didefinisikan sebagai berikut.
Jenis buffer | Makna |
---|---|
SECBUFFER_EMPTY | Tidak terdefinisi, digantikan oleh fungsi paket keamanan |
SECBUFFER_DATA | Data paket |
SECBUFFER_TOKEN | Token keamanan |
SECBUFFER_PKG_PARAMS | Parameter khusus paket |
SECBUFFER_MISSING | Indikator data yang hilang |
SECBUFFER_EXTRA | Data tambahan |
SECBUFFER_STREAM | Data aliran keamanan |
SECBUFFER_STREAM_TRAILER | Trailer aliran keamanan |
SECBUFFER_STREAM_HEADER | Header aliran keamanan |
Jenis buffer di atas dapat dikombinasikan menggunakan operasi bitwise-OR dengan salah satu jenis buffer berikut.
Jenis buffer | Makna |
---|---|
SECBUFFER_ATTRMASK | Mask atribut keamanan dengan memisahkan bendera atribut dari jenis buffer. |
SECBUFFER_READONLY | Buffer bersifat baca-saja |
Sebelum setiap panggilan ke API SSPI yang memerlukan parameter SecBufferDesc , satu atau beberapa elemen array SecBuffer dideklarasikan dan diinisialisasi. Misalnya, mungkin ada dua buffer keamanan: satu yang berisi data pesan input dan yang lainnya untuk token keamanan buram output yang dikembalikan oleh paket keamanan. Urutan buffer keamanan dalam deskriptor buffer keamanan tidak penting, tetapi setiap buffer harus ditandai dengan jenis yang sesuai. Tag baca-saja dapat digunakan dengan buffer input apa pun yang tidak boleh dimodifikasi oleh paket keamanan.
Ukuran buffer output yang diharapkan berisi token keamanan adalah penting. Aplikasi dapat menemukan ukuran token maksimum untuk paket keamanan selama penyiapan awal. Panggilan ke EnumerateSecurityPackages mengembalikan array pointer ke informasi paket keamanan. Struktur informasi paket keamanan berisi ukuran token maksimum untuk setiap paket. Dalam contoh, informasi ada di anggota cbMaxToken dari struktur SecPkgInfo . Informasi yang sama dapat diperoleh nanti menggunakan QuerySecurityPackageInfo.
Aplikasi ini menginisialisasi penunjuk dan ukuran buffer dalam deskripsi buffer untuk menunjukkan di mana data pesan dan informasi lain dapat ditemukan.
Untuk detailnya, lihat Kode Contoh SecBuffer dan SecBufferDesc.