メモリ整合性(コア分離)を確かめる|PowerShellでVBSの状態を読む

Windowsの「Windows セキュリティ」には、ウイルス対策のほかに、「コア分離」の「メモリ整合性」という保護の機能があります。Windowsの中心部分(カーネル)を悪用しようとするマルウェアへの守りを強くするものですが、PCによってはオフになっています。この記事では、Microsoft Learnの説明をもとに、メモリ整合性の意味と、オンかオフかをPowerShellで読み取る方法を、筆者のPCの結果とあわせて紹介します。

(確認:Microsoft Learn「メモリ整合性を有効にする」(仮想化ベースのセキュリティによるコード整合性の保護)。画面の文字列は、Windows セキュリティのアプリのリソースで確かめました。筆者のWindows 11のPCで、2026年10月21日に読み取りだけを行い、設定は変えていません)

メモリ整合性とは(Microsoft Learn)

  • メモリ整合性は、Windowsで使える仮想化ベースのセキュリティ(VBS)の機能の一つ。Windowsのカーネルを悪用しようとするマルウェアに対する保護を強める
  • 「ハイパーバイザーで保護されたコード整合性(HVCI)」とも呼ばれる
  • Windows 11 22H2以降では、メモリ整合性がオフだと、Windows セキュリティに警告が表示される
  • Intel Kaby Lake以上、AMD Zen 2以上のプロセッサで適切に動作する。古いプロセッサは、これらの機能のエミュレーションに頼るため、性能に大きな影響がある
  • 一部のアプリやハードウェアのドライバーは、メモリ整合性と互換性がない場合があり、誤動作する可能性がある

画面で確かめる場所

Microsoft Learnでは、[Windows セキュリティ]→[デバイス セキュリティ]→[コア分離の詳細]→[メモリ整合性]で、オンにできると案内されています。設定を変えると、再起動を求められる場合があります(資料のレジストリで設定する手順にも、最後に再起動すると書かれています)。

コード:状態を読み取る(PowerShell)

Microsoft Learnでは、WMIのクラス Win32_DeviceGuard で、VBSやメモリ整合性の状態を照会できるとされています(管理者特権のPowerShellからの照会として書かれていますが、筆者のPCでは、管理者でないPowerShellでも値を読めました)。

# メモリ整合性(コア分離)と、仮想化ベースのセキュリティ(VBS)の状態を読み取る(読み取りのみ)
#   Win32_DeviceGuard の値の意味は Microsoft Learn「メモリ整合性を有効にする」の表による
#     VirtualizationBasedSecurityStatus:0=VBSは無効 / 1=有効だが実行されていない / 2=有効で実行中
#     SecurityServicesRunning に 2 が含まれていれば、メモリ整合性が実行中
$dg = Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard -ErrorAction SilentlyContinue
if ($dg) {
    "VirtualizationBasedSecurityStatus = $($dg.VirtualizationBasedSecurityStatus)"
    "SecurityServicesConfigured        = $($dg.SecurityServicesConfigured -join ',')"
    "SecurityServicesRunning           = $($dg.SecurityServicesRunning -join ',')"
    "メモリ整合性は実行中か            = $([bool]($dg.SecurityServicesRunning -contains 2))"
} else {
    "Win32_DeviceGuard を読めませんでした(管理者として実行すると読める場合があります)"
}
$key = 'HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity'
$en = (Get-ItemProperty -Path $key -Name Enabled -ErrorAction SilentlyContinue).Enabled
"レジストリ HypervisorEnforcedCodeIntegrity\Enabled = $(if ($null -eq $en) { '(値なし)' } else { $en })"
"CPU = $((Get-CimInstance Win32_Processor | Select-Object -First 1).Name.Trim())"   # 資料では、Intel Kaby Lake 以降・AMD Zen 2 以降で適切に動作するとされる

実行ポリシーで止まる場合は、powershell -NoProfile -ExecutionPolicy Bypass -File .\Get-MemoryIntegrity.ps1 で、その場だけ実行できます。

筆者のPCの結果

VirtualizationBasedSecurityStatus = 0
SecurityServicesConfigured        = 0
SecurityServicesRunning           = 0
メモリ整合性は実行中か            = False
レジストリ HypervisorEnforcedCodeIntegrity\Enabled = (値なし)
CPU = 11th Gen Intel(R) Core(TM) i5-11400 @ 2.60GHz
値 Microsoft Learnの表での意味
VirtualizationBasedSecurityStatus = 0 VBSは有効になっていない
SecurityServicesRunning = 0 実行中のサービスはない(メモリ整合性が実行中なら2が含まれる)

筆者のPCは、VBSもメモリ整合性もオフでした。CPUはIntelの第11世代(Core i5-11400)で、資料が適切に動作するとする世代(Kaby Lake以上)より新しいものです。オフになっている理由(初期の設定か、ドライバーの互換性か)は、この記事では確かめていません。

オンにする前に考えること(EA用PC)

  • ドライバーの互換性:互換性のないドライバーがあると、デバイスやソフトが誤動作する可能性がある。EAを動かすPCで試すなら、取引の無い時間(週末など)に行い、オンにした後でMT5と周辺機器が普段どおり動くかを確かめる
  • 再起動:再起動するとEAが止まるため、時間を選ぶ(Windows Updateの再起動でMT5のEAが止まるも参照)
  • VPSでは:仮想マシンの中では、使えるかどうかがVPSの仕組みによる(Microsoftの資料にも、Azureの仮想マシンでの制約の記載がある)

Windows標準のウイルス対策(Microsoft Defender)が動いているかの確かめ方はWindowsの保護の状態をPowerShellで確かめる方法に、有料のセキュリティソフトを入れるかの考え方はEA用PCにウイルスバスターは要るかにまとめています。

この記事で確かめていないこと

  • 筆者のPCでメモリ整合性をオンにした場合の、MT5や周辺機器の動き(オンにしていません)
  • オンにした時の性能への影響の大きさ
  • 有料のセキュリティソフトを入れた場合の、メモリ整合性との関係

まとめ

  • メモリ整合性は、VBSを使ってWindowsのカーネルを守る機能。[Windows セキュリティ]→[デバイス セキュリティ]→[コア分離の詳細]で確かめられる
  • PowerShellの Win32_DeviceGuard で、VBSとメモリ整合性が動いているかを読める。筆者のPCは両方オフだった
  • オンにする時は、ドライバーの互換性と再起動に注意し、EAの止まらない時間に試す

本記事は設定の読み取り方と、Microsoftの資料の説明です。設定の変更は、自分の環境に合わせて判断してください。