許多系統安全性問題都是因為緩衝區處理不良和產生的緩衝區滿溢所造成。 不良的緩衝區處理通常與字串作作業相關聯。 C/C++語言運行時間連結庫所提供的標準字串作函式(strcat、 strcpy、 sprintf 等)不會防止寫入緩衝區結尾。
兩組新的字串作函式,稱為 安全字串函式,可為程式代碼中的適當緩衝區處理提供額外的處理。 這些安全字串函式可在 Windows 驅動程式開發套件 (WDK) 和適用於 Microsoft Windows XP SP1及更新版本的驅動程式開發工具套件 (DDK) 與 Windows 軟體開發套件 (SDK) 中取得。 它們的目的是要取代其內建的 C/C++ 對應專案,以及 Windows 所提供的類似例程。
一組安全字串函式可用於內核模式程式代碼。 這些函式是以名為 Ntstrsafe.h 的標頭檔建立原型。 WDK 中提供這個標頭檔與相關聯的連結庫。
另一組安全字串函式用於使用者模式應用程式。 對應的頭檔 Strsafe.h 包含這些函式的原型。 該檔案和相關聯的連結庫可在 Windows SDK 中使用。 如需 Strsafe.h 的詳細資訊,請參閱 使用 Strsafe.h 函式。
內核模式安全字串函式集包含下列兩個子集:
-
每一個函式都可在支援雙位元組 Unicode 字元的 W 後綴版本中使用,以及支援單一位元組 ANSI 字元的 A 後綴版本。 例如,串連兩個字串並限制附加字串長度的 RtlStringCbCatN 可作為 RtlStringCbCatNW 和 RtlStringCbCatNA。
-
每個函式都會接受 UNICODE_STRING 結構做為輸入或輸出參數或兩者。 例如, RtlStringCbCopyUnicodeString 接受 結構做為輸入參數, RtlUnicodeStringStryString 接受 結構做為輸出參數, 而 RtlUnicodeStringCopy 接受結構做為輸入和輸出參數。
內核模式安全字串函式提供下列功能:
每個安全字串函式都會接收目的地緩衝區的大小作為輸入。 因此,函式可確保它不會寫超出緩衝區結尾。
即使作業截斷預期的結果,Unicode 和 ANSI 字串函式仍會以 NULL 字元終止所有輸出字串。
所有安全字串函數都會傳回NTSTATUS值,只有一個可能的成功狀態碼(STATUS_SUCCESS)。
大多數安全字串函式都有提供位元組計數和字元計數兩種版本可供使用。 例如, RtlStringCbCata 會串連兩個字節計數位符串, 而 RtlStringCchCata 會串連兩個字元計數位符串。
大部分安全字串函式都可在提供額外功能的擴充前後綴版本中使用。 例如, RtlStringCbCatExa 會擴充 RtlStringCbCata 的功能。
本節包含下列主題: