<Return[UV]><Top>

VirtualProtectEx

Declare Function Api_VirtualProtectEx& Lib "kernel32" Alias "VirtualProtectEx" (ByVal hProcess&, lpAddress As Any, ByVal dwSize&, ByVal flNewProtect&, lpflOldProtect&)

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

指定されたプロセスの仮想アドレス空間内のコミット済みページ領域に対するアクセス保護の状態を変更する。

パラメータ
hProcess
    メモリ保護を変更したいプロセスのハンドルを指定する。このハンドルは、PROCESS_VM_OPERATION アクセス権を備えていなければなら

    ない。
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 が返る。拡張エラー情報を取得するには、 関数を使う。

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

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

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

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

    用できない。