IsBadStringPtrA 関数 (winbase.h)
呼び出し元プロセスが、指定されたメモリ範囲への読み取りアクセス権を持っていることを確認します。
構文
BOOL IsBadStringPtrA(
[in] LPCSTR lpsz,
[in] UINT_PTR ucchMax
);
パラメーター
[in] lpsz
Null で終わる文字列 (Unicode または ASCII) へのポインター。
[in] ucchMax
TCHAR での文字列の最大サイズ。 関数は、文字列の終端 null 文字まで、またはこのパラメーターで指定された文字数のいずれか小さい方まで、すべての文字で読み取りアクセスをチェックします。 このパラメーターが 0 の場合、戻り値は 0 になります。
戻り値
呼び出し元のプロセスが、文字列の終端 null 文字まで、または ucchMax で指定された文字数までのすべての文字に対する読み取りアクセス権を持つ場合、戻り値は 0 になります。
呼び出し元のプロセスが、文字列の終端 null 文字まで、または ucchMax で指定された文字数までのすべての文字に対する読み取りアクセス権を持たない場合、戻り値は 0 以外になります。
アプリケーションがデバッグ バージョンとしてコンパイルされ、指定されたメモリ範囲全体に対する読み取りアクセス権がプロセスにない場合、関数はアサーションを実行し、デバッガーに分割します。 デバッガーを離れると、関数は通常どおりに続行され、0 以外の値を返します。この動作は、デバッグの補助として設計されています。
注釈
この関数は通常、サード パーティのライブラリから返されるポインターを操作する場合に使用されます。この場合、サード パーティ DLL のメモリ管理動作を判断できません。
プロセス内のスレッドは、他のスレッドが必要とするメモリを解放しないように連携することが期待されます。 この関数を使用しても、これを行う必要はありません。 これを行わないと、アプリケーションが予期しない方法で失敗する可能性があります。
逆参照すると、無効なポインターが他のスレッドのスタック拡張を無効にする可能性があります。 スタックの拡張が無効になっているときにスタックを使い果たすスレッドは、ポップアップ エラー ウィンドウや診断情報なしで、親プロセスを直ちに終了します。
呼び出し元プロセスが、指定されたメモリ範囲の一部 (すべてではない) への読み取りアクセス権を持つ場合、戻り値は 0 以外です。
プリエンプティブ マルチタスク環境では、他のスレッドがテスト対象のメモリへのプロセスのアクセスを変更できます。 関数が指定されたメモリへの読み取りアクセス権をプロセスに持っていることを示した場合でも、メモリへのアクセスを試みる場合は 、構造化例外処理 を使用する必要があります。 構造化例外処理を使用すると、システムはアクセス違反例外が発生した場合にプロセスに通知し、プロセスに例外を処理する機会を提供します。
注意
winbase.h ヘッダーは、ISBadStringPtr をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | winbase.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |