<Return[I]><Top>

IsBadStringPtr

Declare Function Api_IsBadStringPtr& Lib "kernel32" Alias "IsBadStringPtrA" (ByVal lpsz$, ByVal ucchMax&)

Declare Function IsBadStringPtr Lib "kernel32" Alias "IsBadStringPtrA" (ByVal lpsz As String, ByVal ucchMax As Long) As Long

呼び出し側プロセスが、1 つの文字列ポインタで指定されたメモリ範囲に対して読み取りアクセスを行えるかどうかを判断する。

パラメータ
lpsz
    [入力]NULL で終わる文字列へのポインタを指定する。Unicode または ASCII 文字列が指定できる。
ucchMax
    [入力]文字列の最大サイズを TCHAR 単位で指定する。この関数は、文字列の最初から最後の NULL が現れるまで、または

    ucchMax パラメータで指定されたバイト数に達するまで、どちらか小さい方のすべてのバイトに対して読み取りアクセスが行えるかどうかを判

    断する。このパラメータが 0 の場合、0 が返る。

 
戻り値
    呼び出し側プロセスが、最後の NULL 文字まで、または ucchMax で指定された文字数までのすべての文字に対して読み取りアクセスを

    行える場合は、0 が返る。
    最後の NULL 文字まで、または ucchMax で指定された文字数までの範囲で、読み取りアクセスを行えない文字が 1 文字でもある場合

    は、0 以外の値が返る。
    アプリケーションをデバッグバージョンとしてコンパイルし、プロセスが指定のメモリ範囲内の一部のバイトに対して読み取りアクセスを行えない

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

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

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

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

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

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