<Return[UV]><Top>

VirtualProtect

Declare Function Api_VirtualProtect& Lib "kernel32" Alias "VirtualProtect" (lpAddress As Any, ByVal dwSize&, ByVal flNewProtect&, lpflOldProtect&)

Declare Function VirtualProtect Lib "kernel32" Alias "VirtualProtect" (lpAddress As Any, ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long

呼び出し側のプロセスの仮想アドレス空間内のコミット済みページ領域に対するアクセス保護をの状態を変更する。
任意のプロセスのアクセス保護を変更するには、VirtualProtectEx 関数を使う。

パラメータ
lpAddress
    アクセス保護属性を変更したいページ領域のベースアドレスへのポインタを指定する。
    指定された領域内のすべてのページは、VirtualAlloc 関数または VirtualAllocEx 関数を 1 回呼び出して割り当てられたものでなければな

    らない。これらの関数を複数回呼び出して、隣接する領域を割り当てても、領域は指定できない。
dwSize
    アクセス保護属性を変更したい領域のサイズを、バイト単位で指定する。関係するページ領域は、lpAddress パラメータ値から(lpAddress +

    dwSize)までの範囲に含まれる 1 バイトまたは複数のバイトを保持するすべてのページである。2 バイトの範囲がページ境界をまたいでいる場

    合、両方のページの保護属性が変更される。
flNewProtect
    新しいアクセス保護のタイプを指定する。PAGE_GUARD と PAGE_NOCACHE の各保護修正子フラグを、次のフラグのいずれかと組み合

    わせて指定できる。

    値                                               

意味                                                                                                                                       

    PAGE_READONLY

 

コミット済みページ領域に対する読み取りアクセス権を有効にする。このコミット済み領域への書き込みを行おうとすると、アクセス違反が発生する。システムが読み取り専用アクセス権と実行アクセス権を区別している場合、このコミット済み領域内のコードを実行しようとすると、アクセス違反が発生する。

    PAGE_READWRITE

コミット済みページ領域に対する読み取りと書き込みの両方のアクセス権を有効にする。

    PAGE_WRITECOPY

Windows NT/2000:コミット済みページ領域に対する書き込み時コピーのアクセス権を有効にする。

    PAGE_EXECUTE

コミット済みページ領域に対する実行アクセス権を有効にする。このコミット済み領域の読み取りまたは書き込みを行おうとすると、アクセス違反が発生する。

    PAGE_EXECUTE_READ

 

コミット済みページ領域に対する実行と読み取りのアクセス権を有効にする。このコミット済み領域への書き込みを行おうとすると、アクセス違反が発生する。

    PAGE_EXECUTE_READWRITE

コミット済みページ領域に対する実行、読み取り、書き込みの各アクセス権を有効にする。

    PAGE_EXECUTE_WRITECOPY

 

コミット済みページ領域に対する実行、読み取り、書き込みのアクセス権を有効にする。これらのページは共有され、書き込み時読み取り、および書き込み時コピーをサポートする。

    PAGE_GUARD

 

 

 

 

 

 

 

Windows NT/2000:領域内のページをガードページにする。ガードページにアクセスしようとすると、システムは STATUS_GUARD_PAGE 例外を発生させ、ガードページ状態を無効にする。そのため、ガードページは 1 回限りのアクセスアラームとして機能する。

PAGE_GUARD フラグは、ページ保護修正子である。アプリケーションはほかのページ保護フラグとともにこのフラグを利用できるが、例外がある。PAGE_NOACCESS とともにこのフラグをセットすることはできない。アクセスが発生してシステムがガードページ状態を無効にした場合、基になるページ保護機能が保護を引き継ぐ。
システムサービスの実行中にガードページの例外が発生した場合、サービスは通常、障害ステータスインジケータを返す。
Windows 95/98:この動作をシミュレートするには、PAGE_NOACCESS フラグを使う。

    PAGE_NOACCESS

 

 

コミット済みページ領域のすべてのアクセス権を無効にする。このコミット済み領域の読み取り、書き込み、コードの実行を試みると、一般保護違反(General Protection fault)と呼ばれるアクセス違反が発生する。

    PAGE_NOCACHE

 

 

 

コミット済みページ領域に対するキャッシングを許可しない。物理メモリのハードウェア属性は、「キャッシュなし」と指定しなければならない。一般的な使い方では推奨できない。しかし、デバイスドライバでは役に立つ。たとえば、ビデオフレームバッファはキャッシングなしでマッピングする。このフラグはページ保護修正子であり、PAGE_NOACCESS 以外のいずれかのページ保護と組み合わせた場合にのみ有効である。

lpflOldProtect
    指定されたページ領域の最初のページの以前のアクセス保護値が書き込まれる変数へのポインタを指定する。このパラメータが NULL の

    場合や、有効な変数を指していない場合、関数は失敗する。

戻り値
    関数が成功すると、0 以外の値が返る。
    関数が失敗すると、0 が返る。拡張エラー情報を取得するには、 関数を使う。

解説
    コミット済みページに限って、アクセス保護値を設定できる。指定された領域内のいずれかのページがコミット済みではない場合、この関数

    は失敗し、指定された領域内のどのページのアクセス保護をも変更することなく制御を返す。
    VirtualProtect 関数は、呼び出し側のプロセス内のメモリのアクセス保護の状態を変更し、VirtualProtectEx 関数は指定されたプロセス

    内のメモリのアクセス保護の状態を変更する。
    Windows NT/2000:PAGE_GUARD 保護修正子フラグは、ガードページを確立する。ガードページは、1 回限りのアクセスアラームとして

    機能する。
    Windows 95/98:共有仮想アドレス空間(0x80000000〜0xBFFFFFFF)に存在するメモリ領域に対して、VirtualProtect 関数は利用でき

    ない。