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