<Return[I]><Top>

IsBadReadPtr

Declare Function Api_IsBadReadPtr& Lib "kernel32" Alias "IsBadReadPtr" (lp As Any, ByVal ucb&)

Declare Function IsBadReadPtr Lib "kernel32" (lp As Any, ByVal ucb As Long) As Long

呼び出し側プロセスが、指定されたメモリブロックに対して読み取りアクセスを行えるかどうかを判断する。

パラメータ
lp
    [入力]メモリブロックの最初のバイトへのポインタを指定する。
ucb
    [入力]メモリブロックのサイズをバイト単位で指定する。このパラメータが 0 の場合、0 が返る。

戻り値
    呼び出し側プロセスが、指定したメモリブロックのすべてのバイトに対して読み取りアクセスを行える場合は、0 が返る。
    読み取りアクセスを行えないバイトが 1 バイトでもある場合は、0 以外の値が返る。
    アプリケーションをデバッグバージョンとしてコンパイルし、プロセスが指定のメモリ範囲内の一部のバイトに対して読み取りアクセスを行えない

    場合、この関数はアサートを発生させ、デバッガを起動する。デバッガを終了させると、この関数は通常の実行時と同様に再開され、0 以

    外の値を返す。この動作は意図されたものであり、デバッグに役立つはずである。

解説
    呼び出し側プロセスが指定のメモリ範囲内のすべてではなく一部のみの読み取りアクセスを行なえる場合、0 以外の値が返る。
    プリエンプティブなマルチタスキング環境では、テスト中のメモリに対するプロセスのアクセス状況を、他のスレッドが変更する可能性がある。

    この関数を使って、プロセスが指定のメモリへの読み取りアクセスを行えることを確認した場合でも、そのメモリへのアクセスを試みる前に構

    造化例外処理を使うべきである。構造化例外処理を使うと、アクセス違反が発生した場合でもシステムはプロセスにそのことを通知し、プロ

    セスはその例外を処理する機会が得られる。