Strsafe.h hakkında

Zayıf arabellek işleme, arabellek taşmalarını içeren birçok güvenlik sorununa neden olur. Strsafe.h'de tanımlanan işlevler, kodunuzda uygun arabellek işleme için ek işleme sağlar. Bu nedenle, yerleşik C/C++ karşılıklarının yanı sıra belirli Windows uygulamalarını da değiştirmeleri amaçlanmıştır. Strsafe.h, Windows XP Service Pack 2 (SP2) ile başlayarak Windows SDK'da kullanılabilir.

Strsafe işlevlerinin avantajları şunlardır:

  • Hedef arabelleğin boyutu, işlevin arabelleğin sınırlarını aşarak yazmamasını sağlamak için her zaman işleve sağlanır.

  • İşlem istenen sonucu kesse bile arabelleklerin null olarak sonlandırılacağı garanti edilir.

  • Tüm işlevler, tek bir olası başarı koduyla (S_OK) HRESULT değeri döndürür.

  • Her işlev ilgili karakter sayısı ("cch") veya bayt sayısı ("cb") sürümünde kullanılabilir.

  • Çoğu işlev, gelişmiş işlevler için genişletilmiş ("Ex") sürüme sahiptir.

Ayrıntılar için aşağıdaki bölümlere bakın.

Karakter Sayma Fonksiyonları

Aşağıdaki işlevler bayt sayısı yerine karakter sayısı kullanır.

Fonksiyon Değiştirir
StringCchCat
StringCchCatEx
strcat, wcscat, _tcscat
lstrcat
strcat
StrCatBuff
StringCchCatN
StringCchCatNEx
strncat
StrNCat
StringCchCopy
StringCchCopyEx
strcpy, wcscpy, _tcscpy
lstrcpy
strcpy
StringCchCopyN
StringCchCopyNEx
strncpy, wcsncpy, _tcsncpy
StringCchGets
StringCchGetsEx
alır, _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

 

Bayt Sayısı İşlevleri

Aşağıdaki işlevler karakter sayısı yerine bayt sayısını kullanır.

Fonksiyon Değiştirir
StringCbCat
StringCbCatEx
strcat, wcscat, _tcscat
lstrcat
StrCat
StrCatBuff
StringCbCatN
StringCbCatNEx
strncat
StrNCat
StringCbCopy
StringCbCopyEx
strcpy, wcscpy, _tcscpy
lstrcpy
strcpy
StringCbCopyN
StringCbCopyNEx
strncpy, wcsncpy, _tcsncpy
StringCbGets
StringCbGetsEx
alır, _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

 

Strsafe.h kullanma

  • Strsafe işlevlerini satır içi kullanmak için, diğer tüm üst bilgi dosyalarının #include deyimlerini izleyerek, aşağıda gösterildiği gibi üst bilgi dosyasını ekleyin.

    #include <strsafe.h>

  • İşlevleri kitaplık biçiminde kullanmak için Strsafe.h'yi eklemeden önce aşağıdaki deyimi ekleyin. Ancak, satır içi işlevleri kullanmanız önerilir.

    #define STRSAFE_LIB

    Not

    : Aşağıdaki işlevler satır içi işlevler olarak kullanılmalıdır: StringCbGets, StringCbGetsEx, StringCchGetsve StringCchGetsEx.

     

  • Dosyanıza Strsafe.h eklediğinizde, Strsafe.h işlevleriyle değiştirilen eski işlevler kullanım dışı kalır. Bu eski işlevleri kullanma girişimleri, daha yeni işlevleri kullanmanızı söyleyen bir derleyici hatasına neden olur. Bu davranışı geçersiz kılmak istiyorsanız Strsafe.h dosyasını eklemeden önce aşağıdaki deyimi ekleyin.

    #define STRSAFE_NO_DEPRECATE

  • Yalnızca karakter sayısı işlevlerine izin vermek için Strsafe.h eklemeden önce aşağıdaki deyimi ekleyin.

    #define STRSAFE_NO_CB_FUNCTIONS

  • Yalnızca bayt sayısı işlevlerine izin vermek için Strsafe.h'yi eklemeden önce aşağıdaki deyimi ekleyin.

    #define STRSAFE_NO_CCH_FUNCTIONS

    Not

    STRSAFE_NO_CB_FUNCTIONS veya STRSAFE_NO_CCH_FUNCTIONStanımlayabilirsiniz, ancak ikisini birden tanımlamazsınız.

     

  • Bazı Strsafe işlevlerinin yerel ayar kullanan sürümleri vardır. Varsayılan olarak, üst bilgi bu işlevleri bildirmez. Bu bildirimleri etkinleştirmek için Strsafe.h dosyasını eklemeden önce aşağıdaki makro deyimini ekleyin.

    #define STRSAFE_LOCALE_FUNCTIONS

  • Desteklenen en fazla dize uzunluğu, ANSI veya Unicode olmak üzere 2.147.483.647 (STRSAFE_MAX_CCH) karakterdir.

Strsafe İşlevleri