IsBadReadPtr 関数 (winbase.h)
呼び出し元のプロセスが、指定したメモリ範囲への読み取りアクセス権を持っていることを確認します。
構文
BOOL IsBadReadPtr(
[in] const VOID *lp,
[in] UINT_PTR ucb
);
パラメーター
[in] lp
メモリ ブロックの最初のバイトへのポインター。
[in] ucb
メモリ ブロックのサイズ (バイト単位)。 このパラメーターが 0 の場合、戻り値は 0 です。
戻り値
呼び出し元プロセスが、指定したメモリ範囲内のすべてのバイトへの読み取りアクセス権を持つ場合、戻り値は 0 になります。
呼び出し元のプロセスが、指定されたメモリ範囲内のすべてのバイトへの読み取りアクセス権を持たない場合、戻り値は 0 以外です。
アプリケーションがデバッグ バージョンとしてコンパイルされ、指定されたメモリ範囲内のすべてのバイトに対する読み取りアクセス権がない場合、関数はアサーションを発生させ、デバッガーに分割します。 デバッガーを終了すると、関数は通常どおり続行され、0 以外の値を返します。 この動作は、デバッグの補助として設計されています。
解説
この関数は通常、サード パーティ製ライブラリから返されるポインターを操作する場合に使用されます。この場合、サード パーティ DLL のメモリ管理動作を判断することはできません。
プロセス内のスレッドは、もう一方が必要とするメモリを解放しないように連携することが期待されます。 この関数を使用しても、これを行う必要はありません。 これを行わないと、予期しない方法でアプリケーションが失敗する可能性があります。
逆参照すると、無効なポインターが他のスレッドのスタック拡張を無効にする可能性があります。 スタックを使い果たすスレッドがスタック拡張を無効にすると、ポップアップ エラー ウィンドウや診断情報なしで、親プロセスが直ちに終了します。
呼び出し元プロセスが、指定されたメモリ範囲内のバイトの一部 (すべてではない) への読み取りアクセス権を持つ場合、戻り値は 0 以外です。
プリエンプティブ マルチタスク環境では、他のスレッドがテスト対象のメモリへのプロセスのアクセスを変更できます。 関数が指定したメモリへの読み取りアクセス権をプロセスに持っていることを示している場合でも、メモリへのアクセスを試みる場合は、構造化例外処理を使用する必要があります。 構造化例外処理を使用すると、システムはアクセス違反の例外が発生した場合にプロセスに通知し、プロセスに例外を処理する機会を与えます。
要件
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | winbase.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |