Strsafe.h について
バッファー処理の不十分さは、バッファー オーバーランを伴う多くのセキュリティの問題に関係しています。 Strsafe.h で定義されている関数は、コード内で適切なバッファー処理を行うための追加処理を提供します。 このため、組み込みの C/C++ に対応する、および特定の Windows 実装を置き換えることを目的としています。 Strsafe.h は、Windows XP Service Pack 2 (SP2) 以降の Windows SDK で使用できます。
Strsafe 関数の利点は次のとおりです。
コピー先バッファーのサイズは常に関数に提供され、関数がバッファーの末尾を超えて書き込まれないことを確認します。
バッファーは、操作によって意図した結果が切り捨てられた場合でも、null で終了することが保証されます。
すべての関数は HRESULT 値を返します。成功コードは 1 つだけです (S_OK)。
各関数は、対応する文字カウント ("cch") またはバイト数 ("cb") バージョンで使用できます。
ほとんどの関数には、高度な機能に使用できる拡張 ("Ex") バージョンがあります。
詳細については、以下のセクションを参照してください。
文字数関数
次の関数では、バイト数ではなく文字数が使用されます。
機能 | 置き換えます |
---|---|
, | |
バイトカウント関数
次の関数は、文字数ではなくバイト数を使用します。
機能 | 置き換えます |
---|---|
Strsafe.h の使用
Strsafe 関数をインラインで使用するには、他のすべてのヘッダー ファイルの #include ステートメントに従って、ここに示すようにヘッダー ファイルを含めます。
#include <strsafe.h>
ライブラリ形式で関数を使用するには、Strsafe.h を含める前に次のステートメントを含めます。 ただし、インライン関数を使用することをお勧めします。
#define STRSAFE_LIB
注意
: インライン関数として使用する必要がある関数は、 StringCbGets、 StringCbGetsEx、 StringCchGets、 および StringCchGetsEx です。
ファイルに Strsafe.h を含めると、Strsafe.h 関数に置き換えられた古い関数は非推奨になります。 これらの古い関数を使用しようとすると、新しい関数を使用するように指示するコンパイラ エラーが発生します。 この動作をオーバーライドする場合は、Strsafe.h を含める前に次のステートメントを含めます。
#define STRSAFE_NO_DEPRECATE
文字数関数のみを許可するには、Strsafe.h を含める前に次のステートメントを含めます。
#define STRSAFE_NO_CB_FUNCTIONS
バイトカウント関数のみを許可するには、Strsafe.h を含める前に次のステートメントを含めます。
#define STRSAFE_NO_CCH_FUNCTIONS
注意
STRSAFE_NO_CB_FUNCTIONSまたはSTRSAFE_NO_CCH_FUNCTIONSを定義できますが、両方を定義することはできません。
一部の Strsafe 関数には、ロケール対応のバージョンがあります。 既定では、ヘッダーはこれらの関数を宣言しません。 これらの宣言を有効にするには、Strsafe.h を含める前に次のマクロ ステートメントを含めます。
#define STRSAFE_LOCALE_FUNCTIONS
サポートされる文字列の最大長は、ANSI または Unicode の 2,147,483,647 (STRSAFE_MAX_CCH) 文字です。
関連トピック
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示