使用安全字串函式
許多系統安全性問題都是因為緩衝區處理不佳和產生的緩衝區溢位所造成。 緩衝區處理不佳通常與字串操作作業相關聯。 C/C++ 語言執行平臺程式庫所提供的標準字串操作函式 (strcat、 strcpy、 sprintf等) 不會防止寫入超出緩衝區結尾。
兩組新的字串操作函式,稱為 安全字串函式,可為程式碼中的適當緩衝區處理提供額外的處理。 這些安全字串函式可在 Windows Driver Kit (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 接受 結構做為輸入參數, RtlUnicodeStringCopyString 接受結構做為輸出參數, 而 RtlUnicodeStringCopy 接受 結構做為輸入和輸出參數。
核心模式安全字串函式提供下列功能:
每個安全字串函式都會接收目的地緩衝區的大小作為輸入。 因此,函式可確保它不會寫入緩衝區結尾。
Unicode 和 ANSI 字串函式會以 Null 字元終止所有輸出字串,即使作業截斷預定的結果也一樣。
所有安全字串函式都會傳回 NTSTATUS 值,其中只有一個可能的成功程式碼 (STATUS_SUCCESS) 。
大部分安全字串函式都可在位元組計數和字元計數版本中使用。 例如, RtlStringCbCata 會串連兩個位元組計數位符串, 而 RtlStringCchCata 會串連兩個字元計數位符串。
大部分安全字串函式都可在提供額外功能的擴充 Ex-suffixed 版本中使用。 例如, RtlStringCbCatExa 會擴充 RtlStringCbCata的功能。
本節包含下列主題: