Tentang Strsafe.h

Penanganan buffer yang buruk diimplikasikan dalam banyak masalah keamanan yang melibatkan buffer overruns. Fungsi yang ditentukan dalam Strsafe.h menyediakan pemrosesan tambahan untuk penanganan buffer yang tepat dalam kode Anda. Untuk alasan ini, mereka dimaksudkan untuk menggantikan rekan C/C++ bawaan mereka serta implementasi Windows tertentu. Strsafe.h tersedia di Windows SDK yang dimulai dengan Windows XP dengan Paket Layanan 2 (SP2).

Keuntungan dari fungsi Strsafe meliputi:

  • Ukuran buffer tujuan selalu disediakan untuk fungsi untuk memastikan bahwa fungsi tidak menulis melewati akhir buffer.

  • Buffer dijamin akan dihentikan null, bahkan jika operasi memotong hasil yang dimaksudkan.

  • Semua fungsi mengembalikan nilai HRESULT , dengan hanya satu kemungkinan kode keberhasilan (S_OK).

  • Setiap fungsi tersedia dalam jumlah karakter yang sesuai ("cch") atau jumlah byte ("cb") versi.

  • Sebagian besar fungsi memiliki versi yang diperluas ("Ex") yang tersedia untuk fungsionalitas tingkat lanjut.

Lihat bagian berikut untuk detail.

Fungsi Jumlah Karakter

Fungsi berikut menggunakan jumlah karakter daripada jumlah byte.

Fungsi Menggantikan
StringCchCat
StringCchCatEx
strcat, wcscat, _tcsat
lstrcat
StrCat
StrCatBuff
StringCchCatn
StringCchCatnEx
strncat
StrNCat
StringCchCopy
StringCchCopyEx
strcpy, wcscpy, _tcscpy
lstrcpy
StrCpy
StringCchCopyN
StringCchCopyNEx
strncpy, wcsncpy, _tcsncpy
StringCchGets
StringCchGetsEx
gets, _getws, _getts
StringCchPrintf
StringCchPrintfEx
sprintf, swprintf, _stprintf
wsprintf
wnsprintf
_snprintf, _snwprintf, _sntprintf
StringCchVPrintf
StringCchVPrintfEx
vsprintf, vswprintf, _vstprintf
vsnprintf, _vsnwprintf, _vsntprintf
wvsprintf
wvnsprintf
,
StringCchLength
strlen, wcslen, _tcslen

 

Fungsi Jumlah Byte

Fungsi berikut menggunakan jumlah byte daripada jumlah karakter.

Fungsi Menggantikan
StringCbCat
StringCbCatEx
strcat, wcscat, _tcsat
lstrcat
StrCat
StrCatBuff
StringCbCatN
StringCbCatNEx
strncat
StrNCat
StringCbCopy
StringCbCopyEx
strcpy, wcscpy, _tcscpy
lstrcpy
StrCpy
StringCbCopyN
StringCbCopyNEx
strncpy, wcsncpy, _tcsncpy
StringCbGets
StringCbGetsEx
gets, _getws, _getts
StringCbPrintf
StringCbPrintfEx
sprintf, swprintf, _stprintf
wsprintf
wnsprintf
_snprintf, _snwprintf, _sntprintf
StringCbVPrintf
StringCbVPrintfEx
vsprintf, vswprintf, _vstprintf
vsnprintf, _vsnwprintf, _vsntprintf
wvsprintf
wvnsprintf
StringCbLength
strlen, wcslen, _tcslen

 

Menggunakan Strsafe.h

  • Untuk menggunakan fungsi Strsafe sebaris, sertakan file header seperti yang diperlihatkan di sini, mengikuti pernyataan #include untuk semua file header lainnya.

    #include <strsafe.h>

  • Untuk menggunakan fungsi dalam formulir pustaka, sertakan pernyataan berikut sebelum menyertakan Strsafe.h. Namun, disarankan agar Anda menggunakan fungsi sebaris.

    #define STRSAFE_LIB

    Catatan

    : Fungsi berikut harus digunakan sebagai fungsi sebaris: StringCbGets, StringCbGetsEx, StringCchGets, dan StringCchGetsEx.

     

  • Ketika Anda menyertakan Strsafe.h dalam file Anda, fungsi lama yang digantikan oleh fungsi Strsafe.h tidak akan digunakan lagi. Upaya untuk menggunakan fungsi lama ini akan mengakibatkan kesalahan pengkompilasi yang memberi tahu Anda untuk menggunakan fungsi yang lebih baru. Jika Anda ingin mengambil alih perilaku ini, sertakan pernyataan berikut sebelum menyertakan Strsafe.h.

    #define STRSAFE_NO_DEPRECATE

  • Untuk mengizinkan hanya fungsi jumlah karakter, sertakan pernyataan berikut sebelum menyertakan Strsafe.h.

    #define STRSAFE_NO_CB_FUNCTIONS

  • Untuk mengizinkan hanya fungsi jumlah byte, sertakan pernyataan berikut sebelum menyertakan Strsafe.h.

    #define STRSAFE_NO_CCH_FUNCTIONS

    Catatan

    Anda dapat menentukan STRSAFE_NO_CB_FUNCTIONS atau STRSAFE_NO_CCH_FUNCTIONS, tetapi tidak keduanya.

     

  • Beberapa fungsi Strsafe memiliki versi yang sadar lokal. Secara default, header tidak mendeklarasikan fungsi-fungsi ini. Untuk mengaktifkan deklarasi ini, sertakan pernyataan makro berikut sebelum menyertakan Strsafe.h.

    #define STRSAFE_LOCALE_FUNCTIONS

  • Panjang string maksimum yang didukung adalah 2.147.483.647 (STRSAFE_MAX_CCH) karakter, baik ANSI atau Unicode.

Fungsi Strsafe