パラメータ
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
関数は利
用できない。 |