次の方法で共有


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 バージョン 1809
ヘッダー ntddk.h
IRQL APC_LEVEL

関連項目