<Return[I]><Top>

IsBadWritePtr

Declare Function Api_IsBadWritePtr& Lib "kernel32" Alias "IsBadWritePtr" (lp As Any, ByVal ucb&)

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

呼び出し側プロセスが、指定されたメモリ範囲に対して書き込みアクセスを行えるかどうかを判断する。

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

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

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

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

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

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

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

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