MmSecureVirtualMemoryEx 関数 (ntddk.h)

このルーチンは、要求されたアドレス範囲をプローブし、指定されたアドレス範囲の保護がより制限され、削除されないように保護します。

構文

HANDLE MmSecureVirtualMemoryEx(
  PVOID  Address,
  SIZE_T Size,
  ULONG  ProbeMode,
  ULONG  Flags
);

パラメーター

Address

プローブとセキュリティ保護を行うベース アドレスへのポインター。

Size

セキュリティで保護する範囲のサイズをバイト単位で指定します。

ProbeMode

許可される最も制限の厳しいページ保護を指定します。 PAGE_READWRITEを使用して、アドレス範囲を読み取り可能と書き込み可能の両方に維持する必要があることを指定するか、PAGE_READONLYを使用してアドレス範囲を読み取り可能な状態に保つ必要があることを指定します。

ProbeMode 意味
PAGE_READWRITE 保護をPAGE_NOACCESSまたはPAGE_READONLYに変更することはできません。 その他の保護の変更はすべて許可されます。
PAGE_READONLY 保護をPAGE_NOACCESSに変更することはできません。 その他の保護の変更はすべて許可されます。

Flags

次のフラグの 1 つ以上を指定します。

フラグ 説明
MM_SECURE_EXCLUSIVE セキュリティ保護は、問題の VAD に既にピン留めされている他のセキュリティ保護がない場合にのみ成功します。
MM_SECURE_NO_CHANGE 適用すると、指定された仮想アドレス リージョンに対する保護の変更は許可されません。 プロセスが終了している場合でも、リージョンを削除できます。
MM_SECURE_USER_MODE_ONLY このセキュリティ保護で指定された保護は、保護を変更しようとしているユーザー モードからの後続の呼び出しにのみ適用されます (カーネル モードの呼び出し元はこのセキュリティ保護をバイパスします)。
MM_SECURE_NO_INHERIT プロセスが複製された場合、親プロセスとは異なり、子プロセスの VAD はセキュリティで保護されません。

戻り値

範囲のセキュリティ保護を解除するためにのみ使用されるハンドルに似た値を返します。

保護の問題、コミットされていないメモリ、または無効なパラメーターのために範囲をロックできなかった場合、このルーチンは NULL を返します。

注釈

指定したビューで保護の変更を許可しないようにMM_SECURE_NO_CHANGEを指定する必要がある場合は、MmSecureVirtualMemory の代わりに MmSecureVirtualMemoryEx を使用します。

この関数からの戻り値は、 MmUnsecureVirtualMemory でのみ使用できます。 ドライバーは、そのルーチンを呼び出して、範囲を通常の状態に戻します。

要件

要件
サポートされている最小のクライアント Windows 10 Version 1809
Header ntddk.h
IRQL APC_LEVEL

こちらもご覧ください