「バッチファイルが実行中に書き換えられて、意味不明なエラーが出た……」「改ざん防止って聞くけど、どのレジストリキーをいじればいいのかさっぱりわからない」——こんな経験、ありませんか?
Windows11では、2026年2月末にリリースされたInsider Previewビルドでバッチファイルの実行中改ざんを防ぐ新機能が追加されました。さらに、Microsoft Defenderの改ざん防止(Tamper Protection)も進化を続けており、レジストリキーの扱いを正しく理解していないと「設定したはずなのに勝手に戻る」「レジストリを変更してもアクセス拒否になる」といった落とし穴にはまります。
この記事では、Windows11におけるバッチファイルの改ざん防止とDefenderのTamper Protectionに関わるレジストリキーの全体像を、初心者にもわかりやすく、かつ上級者が実務で使える深さで解説します。
- 2026年2月に登場した新レジストリ値LockBatchFilesWhenInUseの設定方法と仕組みの解説
- Microsoft Defenderの改ざん防止(Tamper Protection)に関わるレジストリキーの正しい操作手順
- バッチファイルでDefender設定を自動化するときの注意点と、設定が勝手に戻る原因の特定方法
- バッチファイルの改ざん防止とは何か?なぜ今注目されているのか
- 新レジストリ値LockBatchFilesWhenInUseの設定方法
- Microsoft Defenderの改ざん防止(Tamper Protection)の仕組みとレジストリキー
- バッチファイルでDefenderのリアルタイム保護を制御するときの注意点
- 改ざん防止が原因で設定が勝手に戻るときのトラブルシューティング
- 上級者向けWdFilterドライバーとDefenderの保護チェーンを理解する
- 実務で使えるバッチファイルのサンプルコード
- 情シス歴10年超の現場で見てきたDefender関連の「あるある地獄」と脱出法
- PowerShellでDefenderの状態を完全把握する実戦コマンド集
- タスクスケジューラを使ったバッチファイルの自動実行とUACバイパスの正攻法
- regファイルとバッチファイルを組み合わせた設定の配布テクニック
- 意外と知られていないDefender関連の便利なWindows機能
- 現場でよく遭遇する「答えがわからない問題」の具体的な解決手順
- ぶっちゃけこうした方がいい!
- Windows11のバッチファイル改ざん防止とレジストリキーに関する疑問解決
- 今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
- まとめ
バッチファイルの改ざん防止とは何か?なぜ今注目されているのか
バッチファイル(.batや.cmd)は、Windowsの自動化において何十年も使われてきた定番の仕組みです。サーバーのメンテナンス、ソフトウェアの一括インストール、定時バックアップなど、あらゆる場面で活躍しています。しかし、その手軽さゆえにセキュリティ上の弱点も抱えていました。
従来のWindowsでは、バッチファイルが実行されている最中でも、そのファイル自体を外部から書き換えることが可能でした。これは「実行中改ざん」と呼ばれる問題で、攻撃者がバッチファイルの内容を途中でマルウェアのダウンロードコマンドに差し替えるといった悪用が理論上可能だったのです。また、企業でコード整合性ポリシー(WDAC)を有効にしている環境では、バッチファイルの各行が実行されるたびに署名検証が走るため、パフォーマンスの低下も課題でした。
こうした背景から、Microsoftは2026年2月27日にリリースしたWindows11 Insider Previewビルド(Devチャネル: 26300.7939、Betaチャネル: 26220.7934)で、バッチファイルを実行中にロックして改ざんを防ぐ新機能を導入しました。この機能を有効にすると、バッチファイルは実行開始時にファイルがロックされ、実行完了まで外部からの変更がブロックされます。さらに、コード整合性が有効な環境では署名検証が実行開始時の1回だけで済むようになり、パフォーマンスも大幅に向上します。
新レジストリ値LockBatchFilesWhenInUseの設定方法
この新機能を有効にするには、レジストリに特定のDWORD値を追加するだけです。コマンドひとつで完了するので、手順を確認しながら進めてみましょう。
レジストリエディタで手動設定する方法
まず、管理者権限でレジストリエディタ(
regedit.exe
)を起動してください。スタートメニューの検索ボックスに「regedit」と入力して、右クリックから「管理者として実行」を選びます。
-
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processorに移動します。
- 右ペインの空白部分を右クリックして「新規」→「DWORD(32ビット)値」を選択します。
- 名前をLockBatchFilesWhenInUseに設定し、値のデータを1にします。
- レジストリエディタを閉じれば設定完了です。再起動は不要で、次に実行するバッチファイルからすぐに反映されます。
無効に戻したい場合は、値のデータを0にするか、作成したDWORD値そのものを削除してください。
コマンドプロンプトやバッチファイルで一括設定する方法
複数台のPCに展開する場合や、設定のスクリプト化が必要な場面では、コマンドで一発設定するのが便利です。管理者権限のコマンドプロンプトで以下を実行してください。
reg add "HKLM\Software\Microsoft\Command Processor" /v LockBatchFilesWhenInUse /t REG_DWORD /d 1 /f
この1行をバッチファイルに書いておけば、グループポリシーのスタートアップスクリプトやIntuneのリモートスクリプト配布で社内の端末に一斉展開できます。逆にオフにするときは、
/d 0
に変えて実行するだけです。
アプリケーションマニフェストで制御する方法
開発者やWDACポリシーの作成者向けには、LockBatchFilesWhenInUseというアプリケーションマニフェストコントロールも用意されています。これにより、レジストリを個別に変更しなくても、WDACポリシー側でバッチファイルの保護モードを宣言的に有効化できます。企業のセキュリティチームが大規模にポリシーを管理している環境では、こちらの方法が運用面で優れています。
設定前に確認すべき重要ポイント
ひとつだけ注意してほしいことがあります。自己書き換え型のバッチファイルを使っている場合、この機能を有効にすると動かなくなります。実行中にファイルがロックされるため、自分自身を書き換えるタイプのスクリプトは正常に処理できません。本番環境に展開する前に、社内で使っているすべてのバッチファイルをテストしておくことを強くおすすめします。
また、2026年3月時点ではこの機能はInsider Previewビルドのみに搭載されており、一般リリース(GA)への搭載時期はまだ公表されていません。検証環境で試してから本番導入の計画を立てるのが賢明です。
Microsoft Defenderの改ざん防止(Tamper Protection)の仕組みとレジストリキー
バッチファイルの改ざん防止とあわせて理解しておきたいのが、Microsoft Defenderの改ざん防止機能(Tamper Protection)です。特にバッチファイルでDefenderの設定を自動制御したい場面では、この機能の挙動を正しく把握していないと「コマンドが通らない」「設定が勝手に元に戻る」という壁にぶつかります。
Tamper Protectionとは何をしているのか
Tamper Protectionは、マルウェアや不正なスクリプトがDefenderの重要な設定を無断で変更するのを防ぐ機能です。具体的には、以下の操作がブロックされます。
レジストリエディタを使ったDefender関連レジストリキーの直接編集、PowerShellの
Set-MpPreference
コマンドによるリアルタイム保護のオフ、グループポリシーによるDefender設定の上書き——これらはすべて、Tamper Protectionが有効な状態では管理者権限があっても拒否されます。唯一の例外が、Windowsセキュリティアプリの画面上から手動で操作する場合と、Microsoft IntuneやMicrosoft 365 Defenderポータルから遠隔管理する場合です。
Tamper Protectionに関わるレジストリキーの全体像
Tamper Protectionの状態を管理するレジストリキーは、以下の場所にあります。
| レジストリパス | 値の名前 | データの意味 |
|---|---|---|
HKLM\SOFTWARE\Microsoft\Windows Defender\Features
|
TamperProtection | 5=有効、4または0=無効 |
HKLM\SOFTWARE\Policies\Microsoft\Windows Defender
|
DisableAntiSpyware | 1=Defender無効(レガシー設定、現在は非推奨) |
HKLM\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection
|
DisableRealtimeMonitoring | 1=リアルタイム保護無効 |
ここで重要なのは、
HKLM\SOFTWARE\Microsoft\Windows Defender
以下のキーはTrustedInstallerアカウントに所有権が設定されており、管理者アカウントでも読み取り権限しか持っていないということです。さらにTamper Protectionが有効な状態では、カーネルドライバーのWdFilter.sysがレジストリコールバックを登録してDefender関連キーの変更を監視・阻止しています。つまり、レジストリエディタを管理者で開いても値を変えられない二重の防壁が存在しているのです。
Tamper Protectionを正しくオフにする手順
テストやデバッグでどうしてもTamper Protectionを一時的に無効にしたいときは、以下の手順がもっとも安全です。
- スタートメニューの検索で「Windowsセキュリティ」と入力してアプリを開きます。
- 「ウイルスと脅威の防止」をクリックし、「設定の管理」を選択します。
- 画面を下にスクロールして「改ざん防止」のトグルスイッチをオフにします。UAC(ユーザーアカウント制御)のプロンプトが出たら「はい」をクリックします。
企業環境でIntuneを利用している場合は、エンドポイントセキュリティのウイルス対策プロファイルからTamper Protectionの状態を管理できます。また、Microsoft Defender for Endpointの「トラブルシューティングモード」を使えば、特定のデバイスのみ一時的にTamper Protectionを解除し、一定時間後に自動で元に戻す運用も可能です。
バッチファイルでDefenderのリアルタイム保護を制御するときの注意点
「バッチファイル1つでDefenderのリアルタイム保護をオン・オフしたい」——この需要は開発者や情シス担当者の間で非常に高いです。実際、添付データにもあるように、レジストリの値を変更するregコマンドやPowerShellコマンドをバッチファイル化する方法が広く知られています。
レジストリ操作でリアルタイム保護を切り替える
リアルタイム保護を無効にするレジストリ操作は、以下のパスにDWORD値を作成することで実現できます。
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection" /v DisableRealtimeMonitoring /t REG_DWORD /d 1 /f
元に戻すときは値を削除します。
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection" /v DisableRealtimeMonitoring /f
ただし、これらのコマンドが機能するのはTamper Protectionがオフの状態のみです。Tamper Protectionが有効なままバッチファイルを実行しても、コマンド自体は成功したように見えることがありますが、実際にはDefenderの動作に反映されません。これが「設定したのに効かない」という混乱の最大の原因です。
PowerShellコマンドとの使い分け
バッチファイルからPowerShellを呼び出す方法もあります。PowerShellの
Set-MpPreference -DisableRealtimeMonitoring $true
は即座に反映されるため、レジストリ操作よりもレスポンスが早いという利点があります。ただし、こちらもTamper Protection有効時には同様にブロックされます。
実務での推奨パターンは、まずWindowsセキュリティアプリの画面でTamper Protectionを手動オフにしてから、バッチファイルやPowerShellでDefender設定を変更し、作業完了後にTamper Protectionをオンに戻すという流れです。ここで新機能のLockBatchFilesWhenInUseが効いてくるのは、まさにこの「設定変更用バッチファイルの実行中に、外部からファイルを書き換えられるリスクを排除する」場面です。
バッチファイルをワンクリックで実行する小技
管理者権限が必要なバッチファイルを毎回右クリックで「管理者として実行」するのは面倒です。ショートカットを作成して、プロパティの「詳細設定」から「管理者として実行」にチェックを入れておくと、ダブルクリック→UACの「はい」だけで済みます。このショートカットをスタートメニューやタスクバーにピン留めすれば、操作は実質ワンクリックです。
改ざん防止が原因で設定が勝手に戻るときのトラブルシューティング
「Defenderの設定をオフにしたはずなのに、再起動したら元に戻っている」——これはWindowsフォーラムで最も多い相談のひとつです。原因はほぼ以下の4つに絞られます。
原因その1Tamper Protectionが有効のままだった
レジストリやPowerShellで変更しても、Tamper Protectionが有効な状態ではDefenderが変更を無視します。まずはWindowsセキュリティアプリを開いて、改ざん防止のトグルがオフになっているか確認してください。グレーアウトして操作できない場合は、Intuneやドメインポリシーで管理されている可能性があります。
原因その2グループポリシーやIntuneが上書きしている
会社のPCでは、ドメインのグループポリシーやIntuneのセキュリティプロファイルがDefenderの設定を強制していることがあります。ローカルで変更しても、次のポリシー更新時(通常は90分ごと、または
gpupdate /force
実行時)に元に戻されます。自分のPCがドメインに参加しているか、Intuneに登録されているかは、「設定」→「アカウント」→「職場または学校にアクセスする」で確認できます。
原因その3Windows Updateが設定をリセットした
セキュリティ更新プログラムの適用時に、Defenderのセキュリティ設定が既定値に戻されるケースがあります。特に大型アップデート後は、リアルタイム保護やTamper Protectionが自動的にオンに復帰する仕様になっています。これはMicrosoftが意図的に「安全側に倒す」設計にしているためで、バグではありません。
原因その4DisableAntiSpywareのレガシー問題
以前はレジストリの
DisableAntiSpyware
という値でDefender全体を無効化できましたが、現在のWindows11ではこの値は非推奨です。値が存在していると、Tamper Protectionの設定画面がグレーアウトしたり、意図しない挙動を引き起こすことがあります。このキーが残っている場合は削除することを推奨します。レジストリエディタで
HKLM\SOFTWARE\Policies\Microsoft\Windows Defender
を開き、DisableAntiSpywareが存在する場合は右クリックから削除してください。
上級者向けWdFilterドライバーとDefenderの保護チェーンを理解する
Defenderの改ざん防止がなぜこれほど強固なのかを理解するには、内部の保護チェーンを知っておくと役立ちます。
Defenderのセキュリティ設定は、三段構えで守られています。最下層にWdFilter.sysというカーネルモードのミニフィルタードライバーが存在し、レジストリコールバックを通じてDefender関連のレジストリキーへの書き込みを監視・阻止しています。その上にTamper Protectionの仕組みがあり、WdFilterが守るレジストリキーの中でもとりわけ重要な設定(リアルタイム保護、クラウド保護など)への変更を制御しています。最上層がDefenderの各種設定値そのもので、リアルタイム保護やIOAV保護(ダウンロードファイルのスキャン)の有効・無効がここで決まります。
つまり、Defenderの設定を変更するには「WdFilter → Tamper Protection → 各種設定」の順にロックを解除する必要があり、単にレジストリ値を書き換えるだけでは効果がないのは、この多層防御が機能しているからです。セキュリティ研究者の間では、2024年4月のパッチでWdFilterのAltitudeレジストリキーに対する保護が強化され、以前報告されていたバイパス手法がWindows11の最新ビルドでは塞がれていることが確認されています。
実務で使えるバッチファイルのサンプルコード
ここでは、実際の運用で使えるバッチファイルのサンプルをいくつか紹介します。すべて管理者権限での実行が前提です。
バッチファイル改ざん防止を有効にするスクリプト
@echo off
reg add "HKLM\Software\Microsoft\Command Processor" /v LockBatchFilesWhenInUse /t REG_DWORD /d 1 /f
echo バッチファイルの実行中ロック機能を有効にしました。
pause
リアルタイム保護をトグルするスクリプト(Tamper Protection無効時のみ動作)
@echo off
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection" /v DisableRealtimeMonitoring 2>nul | find "0x1" >nul
if %errorlevel%==0 (
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection" /v DisableRealtimeMonitoring /f
echo リアルタイム保護を有効に戻しました。
) else (
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection" /v DisableRealtimeMonitoring /t REG_DWORD /d 1 /f
echo リアルタイム保護を一時的に無効にしました。
)
pause
このスクリプトは、現在の状態を確認してオンならオフに、オフならオンに切り替えるトグル動作をします。ただし、繰り返しになりますがTamper Protectionが有効な環境では動作しません。実行前に必ずWindowsセキュリティアプリから改ざん防止をオフにしてください。
情シス歴10年超の現場で見てきたDefender関連の「あるある地獄」と脱出法
ここからは、マニュアルやドキュメントには書いていない「現場で本当に困るパターン」を取り上げます。10年以上、中小企業から数百台規模のドメイン環境まで面倒を見てきた経験から言えるのは、Defenderのトラブルの8割は「自分の環境がどう管理されているか把握していない」ことに起因するという事実です。
地獄その1誰がTamper Protectionを管理しているのか誰もわからない
これは本当に多いです。社員が「Defenderの設定を変えたいのにグレーアウトして触れない」と相談してきて、見に行くと改ざん防止の項目に「この設定は管理者によって管理されています」と表示されている。でも、情シス側でIntuneのポリシーを確認しても、Tamper Protectionを明示的にオンにした覚えがない。
この現象の正体は、Microsoft Defender for Endpointの「組み込み保護」機能です。2022年後半から、Microsoftはエンタープライズテナントに対してTamper Protectionをデフォルトで有効にする変更を段階的に展開しました。つまり、誰も設定していないのにTamper Protectionが勝手にオンになったように見えるケースが実在するのです。
確認方法は簡単です。管理者権限のPowerShellで以下を実行してください。
Get-MpComputerStatus | Select-Object IsTamperProtected, TamperProtectionSource
IsTamperProtectedがTrueなら改ざん防止が有効で、TamperProtectionSourceの値で誰が管理しているかがわかります。「Signatures」ならローカル設定、「ATP」ならMicrosoft Defender for Endpoint経由、「Intune」ならIntuneポリシー経由です。これを最初に確認するだけで、「どこに問い合わせればいいか」が一発で判明します。
地獄その2開発チームが「Defenderが重いから除外してくれ」と言ってくる
Visual StudioやNode.jsの開発環境では、
node_modules
フォルダに何万ファイルも展開されるため、Defenderのリアルタイムスキャンが極端にビルド速度を落とすことがあります。開発者から「Defender止めてくれ」と言われたとき、リアルタイム保護を丸ごとオフにするのは論外ですが、かといって放置すればビルド時間が2倍3倍になって生産性が激落ちします。
正解はプロセス除外とフォルダ除外の合わせ技です。リアルタイム保護はオンのまま、ビルドに関わるプロセスとフォルダだけをピンポイントで除外します。以下のPowerShellスクリプトを管理者権限で実行すると、開発者向けの代表的な除外をまとめて設定できます。
# 開発系プロセスの除外
Add-MpPreference -ExclusionProcess "devenv.exe" -Force
Add-MpPreference -ExclusionProcess "msbuild.exe" -Force
Add-MpPreference -ExclusionProcess "node.exe" -Force
Add-MpPreference -ExclusionProcess "python.exe" -Force
Add-MpPreference -ExclusionProcess "git.exe" -Force
Add-MpPreference -ExclusionProcess "dotnet.exe" -Force
# 開発フォルダの除外(パスは環境に応じて変更)
Add-MpPreference -ExclusionPath "C:\Dev" -Force
Add-MpPreference -ExclusionPath "$env:USERPROFILE\source\repos" -Force
重要なのは、除外は最小限にとどめることと、なぜその除外を追加したのかを記録しておくことです。半年後に「この除外なんだっけ?」となるのが現場あるあるなので、ExcelでもNotionでもいいから除外リストと追加理由、追加日、追加者を記録する台帳を作っておくことを強くおすすめします。
地獄その3regファイルをダブルクリックしてもDefenderの設定が反映されない
ネットで見つけた「Defenderを無効にするregファイル」をダブルクリックしたのに、設定が変わらない。エラーメッセージも出ないのに、レジストリエディタで確認すると値が書き込まれていない——これはTamper Protectionが変更を黙殺しているからです。
Microsoftの公式ドキュメントにも書いてありますが、セキュリティインテリジェンスをバージョン1.287.60.0以降に更新した後は、Tamper Protectionはレジストリ設定への変更試行をエラーを返さずにログだけ記録するという挙動に変わりました。つまり、コマンドは成功したように見えるのに、実際には何も変わっていないという最悪のパターンが起きます。
この「サイレント拒否」に気づくには、イベントビューアーでMicrosoft-Windows-Windows Defender/Operationalログを確認してください。Tamper Protectionが変更をブロックした場合、イベントID 5013(改ざん防止によるブロック)が記録されています。このログを見る習慣をつけるだけで、「効かない理由がわからない」という混乱を大幅に減らせます。
PowerShellでDefenderの状態を完全把握する実戦コマンド集
バッチファイルやレジストリの操作をする前に、まず現在の環境がどうなっているのかを正確に把握することが大前提です。ここでは、情シスの現場で実際に毎日使っているPowerShellコマンドを目的別にまとめます。すべて管理者権限のPowerShellで実行してください。
Defenderの全体状態を一発で確認する
Get-MpComputerStatus | Format-List AMRunningMode, AntivirusEnabled, RealTimeProtectionEnabled, IsTamperProtected, TamperProtectionSource, AntivirusSignatureLastUpdated, QuickScanAge, FullScanAge
このコマンドで、Defenderの動作モード(アクティブ/パッシブ/SxS)、リアルタイム保護のオンオフ、Tamper Protectionの状態とその管理元、定義ファイルの最終更新日時、クイックスキャンとフルスキャンの最終実行からの経過日数がまとめて確認できます。トラブル対応の最初の一手として、まずこのコマンドの出力をスクリーンショットかテキストで保存しておくと、後から「あのとき何が有効だったか」を追えます。
現在設定されているすべての除外を一覧表示する
Get-MpPreference | Select-Object -Property ExclusionPath, ExclusionExtension, ExclusionProcess, ExclusionIpAddress | Format-List
除外設定が意図しない状態になっていないか定期的にチェックすることはセキュリティの基本です。マルウェアの中には、感染後に自分がいるフォルダをDefenderの除外リストに追加するタイプがあります。身に覚えのない除外パスが増えていたら要注意です。
除外をまとめてクリアして初期状態に戻す
除外設定が散らかってしまったときは、一度リセットして再設定するのが確実です。以下のコマンドで各種除外を全削除できます。
# パス除外をすべて削除
$prefs = Get-MpPreference
if ($prefs.ExclusionPath) { $prefs.ExclusionPath | ForEach-Object { Remove-MpPreference -ExclusionPath $_ -Force } }
# プロセス除外をすべて削除
if ($prefs.ExclusionProcess) { $prefs.ExclusionProcess | ForEach-Object { Remove-MpPreference -ExclusionProcess $_ -Force } }
# 拡張子除外をすべて削除
if ($prefs.ExclusionExtension) { $prefs.ExclusionExtension | ForEach-Object { Remove-MpPreference -ExclusionExtension $_ -Force } }
ただし、このコマンドはTamper Protectionが有効だと除外の削除もブロックされる場合があります。企業環境で
DisableLocalAdminMerge
がTrueに設定されている場合は、Intuneからしか除外の変更ができないので注意してください。
定義ファイルを強制的に最新に更新する
Update-MpSignature -UpdateSource MicrosoftUpdateServer
「Defenderが検知しない」という相談を受けたときにまずやるのがこれです。定義ファイルが古いまま放置されていると、最新のマルウェアを見逃す可能性があります。Windows Updateとは別にDefender単体で定義ファイルを更新できるので、トラブルシューティングの初手として覚えておいてください。
オフラインスキャンをコマンドから予約する
Start-MpWDOScan
通常のスキャンでは駆除できないルートキット系のマルウェアに対しては、Windows起動前にスキャンを行うオフラインスキャンが効果的です。このコマンドを実行すると、次回の再起動時にDefenderオフラインスキャンが自動的に開始されます。作業中のファイルはすべて保存してから実行してください。PCは自動的に再起動し、スキャンに約15分かかります。
タスクスケジューラを使ったバッチファイルの自動実行とUACバイパスの正攻法
管理者権限が必要なバッチファイルを実行するたびにUACの確認ダイアログが出るのは面倒です。かといってUACを完全に無効にするのはセキュリティ上ありえません。この問題の正攻法はタスクスケジューラを使うことです。
UACプロンプトなしで管理者実行するタスクの作成手順
- スタートメニューの検索で「タスクスケジューラ」と入力し、右クリックから「管理者として実行」で起動します。
- 右側の操作パネルから「タスクの作成」をクリックします(「基本タスクの作成」ではなく「タスクの作成」を選んでください。設定項目が多いほうです)。
- 「全般」タブで、タスクの名前を入力し、「最上位の特権で実行する」にチェックを入れます。これがUACバイパスの要です。
- 「操作」タブで「新規」をクリックし、プログラムに
cmd.exeを指定します。「引数の追加」に
/c "C:\Scripts\your_script.bat"のようにバッチファイルのフルパスを記述します。
- ノートPCの場合は「条件」タブで「コンピューターをAC電源で使用している場合のみ」のチェックを外しておきます。外さないとバッテリー駆動時にタスクが実行されません。
- 「OK」をクリックしてタスクを保存します。管理者パスワードの入力を求められたら入力してください。
デスクトップショートカットからワンクリック実行する
作成したタスクをデスクトップから呼び出すショートカットを作ります。デスクトップの空白部分を右クリックして「新規」→「ショートカット」を選び、項目の場所に以下を入力してください。
schtasks.exe /run /tn "タスクの名前"
「タスクの名前」は、先ほどタスクスケジューラで設定した名前をそのまま入れます。このショートカットをダブルクリックすると、UACプロンプトなしでバッチファイルが管理者権限で実行されます。タスクバーやスタートメニューにピン留めしておけば、日常的に使うスクリプトをワンクリックで起動できるようになります。
ひとつ注意点があります。タスクスケジューラで「ユーザーがログオンしているかどうかにかかわらず実行する」を選択すると、タスクは非対話型(画面表示なし)で実行されます。コマンドプロンプトのウィンドウが表示されないので、処理の進行状況が見えません。対話的にウィンドウを表示したい場合は「ユーザーがログオンしているときのみ実行する」を選んでください。
regファイルとバッチファイルを組み合わせた設定の配布テクニック
社内の複数台にレジストリ設定を展開するとき、グループポリシーが使えない環境(Homeエディション混在やワークグループ構成)ではregファイルの配布が現実的な選択肢になります。ここでは、安全に配布するための実践的なテクニックを紹介します。
regファイルの正しい書き方とエンコーディング
regファイルの1行目は必ず
Windows Registry Editor Version 5.00
で始まる必要があります。また、ファイルのエンコーディングはUTF-16 LE(BOM付き)が正式な仕様です。メモ帳で保存する場合は「名前を付けて保存」で文字コードを「UTF-16 LE」に設定してください。UTF-8で保存するとインポート時にエラーになることがあります。
バッチファイル改ざん防止の
LockBatchFilesWhenInUse
を有効にするregファイルの例はこのように書きます。
Windows Registry Editor Version 5.00
"LockBatchFilesWhenInUse"=dword:00000001
バッチファイルでregファイルを確認画面なしでインポートする
regファイルをダブルクリックすると確認ダイアログが2回出ますが、バッチファイルから
reg import
コマンドを使えば確認なしでインポートできます。
@echo off
reg import "%~dp0lock_batch.reg" 2>nul && echo レジストリのインポートが完了しました。 || echo レジストリのインポートに失敗しました。管理者権限で実行してください。
pause
%~dp0
はバッチファイル自身が置かれているフォルダのパスを表す特殊変数です。regファイルをバッチファイルと同じフォルダに置いておけば、フルパスを書かなくても動作します。USBメモリに入れて複数台を巡回するときに便利です。
レジストリ変更前に自動バックアップを取る
レジストリを変更する前にバックアップを取るのは鉄則です。以下のコマンドをバッチファイルの冒頭に追加しておくと、変更対象のキーを自動的にバックアップしてくれます。
reg export "HKLM\Software\Microsoft\Command Processor" "%USERPROFILE%\Desktop\CommandProcessor_backup_%date:~0,4%%date:~5,2%%date:~8,2%.reg" /y
バックアップファイルはデスクトップに日付付きで保存されるので、何か問題が起きたらそのファイルをダブルクリックするだけで元に戻せます。
意外と知られていないDefender関連の便利なWindows機能
コントロールされたフォルダーアクセスでランサムウェアを防ぐ
Defenderには「コントロールされたフォルダーアクセス」という機能があり、指定したフォルダへの不正な変更をブロックできます。ランサムウェアがドキュメントフォルダを暗号化しようとしても、許可されたアプリ以外のアクセスを遮断するので被害を最小限に抑えられます。
有効にする方法は、Windowsセキュリティの「ウイルスと脅威の防止」→「ランサムウェアの防止」→「コントロールされたフォルダーアクセス」をオンにするだけです。PowerShellでは以下のコマンドで有効化できます。
Set-MpPreference -EnableControlledFolderAccess Enabled
ただし注意点があります。この機能を有効にすると、正規のアプリケーション(PhotoshopやExcelマクロなど)も保護フォルダへの書き込みがブロックされることがあります。そのときは以下のコマンドでアプリを個別に許可してください。
Add-MpPreference -ControlledFolderAccessAllowedApplications "C:\Program Files\Adobe\Photoshop\Photoshop.exe"
攻撃面の縮小(ASR)ルールを活用する
Defenderには「攻撃面の縮小(Attack Surface Reduction)ルール」という機能があり、マルウェアがよく使う挙動パターンをピンポイントでブロックできます。たとえば「Officeアプリケーションから子プロセスを起動させない」「メールクライアントから実行可能ファイルを起動させない」といったルールを設定可能です。
ASRルールの現在の設定状況を確認するPowerShellコマンドはこちらです。
Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids
まだ何も設定されていなければ空欄が返ってきます。本番環境に適用する前に、まずは監査モード(AuditMode)で一定期間動かして、業務に影響が出るルールがないか確認してからブロックモードに切り替えるのがベストプラクティスです。
MpCmdRunを使ったコマンドラインからのスキャン操作
DefenderにはGUI以外にもコマンドラインツール
MpCmdRun.exe
が用意されています。バッチファイルからスキャンを呼び出したいときに便利です。
クイックスキャンを実行する場合は以下のコマンドです。
"%ProgramFiles%\Windows Defender\MpCmdRun.exe" -Scan -ScanType 1
フルスキャンの場合は
-ScanType 2
に変えるだけです。特定のフォルダだけをスキャンしたい場合はカスタムスキャンを使います。
"%ProgramFiles%\Windows Defender\MpCmdRun.exe" -Scan -ScanType 3 -File "D:\Downloads"
定義ファイルの更新もMpCmdRunから実行できます。
"%ProgramFiles%\Windows Defender\MpCmdRun.exe" -SignatureUpdate
これらをバッチファイル化して夜間にタスクスケジューラで回せば、手動操作なしでDefenderの定期メンテナンスが完結します。
現場でよく遭遇する「答えがわからない問題」の具体的な解決手順
問題他社製セキュリティソフトをアンインストールしたのにDefenderが有効にならない
ウイルスバスターやESETなどのサードパーティ製セキュリティソフトをアンインストールした後、Defenderが自動的にアクティブモードに切り替わらず、PCが「無防備状態」になってしまうケースがあります。
原因の多くは、セキュリティソフトのアンインストーラーがDefender関連のレジストリキーを正しくクリーンアップしなかったことです。特に
HKLM\SOFTWARE\Policies\Microsoft\Windows Defender
に
DisableAntiSpyware
が値1で残っていると、Defenderが「自分は無効にされている」と認識したまま復帰しません。
解決手順はこうです。まず管理者権限のコマンドプロンプトで以下を実行してください。
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows Defender" /v DisableAntiSpyware 2>nul
値が0x1で返ってきたら、以下で削除します。
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows Defender" /v DisableAntiSpyware /f
その後PCを再起動すると、Defenderが自動的にアクティブモードに復帰するはずです。復帰しない場合は、PowerShellから
Start-Service WinDefend
を実行してサービスを手動起動してみてください。
問題Defenderのアイコンがタスクトレイから消えた
Windows Updateの後やシステムトラブルの後に、タスクトレイのDefenderアイコン(盾マーク)が消えることがあります。Defender自体は動いているのにアイコンだけ消えている場合、以下のコマンドでアイコンの表示を復活させられます。
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v SecurityHealth /t REG_EXPAND_SZ /d "%ProgramFiles%\Windows Defender\MSASCuiL.exe" /f
再起動後にアイコンが復活します。Windows11ではファイル名が
MSASCuiL.exe
ではなく
SecurityHealthSystray.exe
に変わっている場合があるので、ファイルが見つからない場合はこちらに差し替えてください。
問題バッチファイルを管理者で実行しているのに「アクセスが拒否されました」と出る
管理者としてバッチファイルを実行しているにもかかわらず、
HKLM\SOFTWARE\Microsoft\Windows Defender
配下のキーを変更しようとすると「アクセスが拒否されました」が出ることがあります。これは前述のWdFilter.sysによる保護が原因で、管理者権限どころかSYSTEM権限でも書き込みがブロックされます。
このキーは触ってはいけないキーです。Defenderの「現在の状態」を反映するキーであり、設定を変更するためのキーではありません。設定を変更したい場合は
HKLM\SOFTWARE\Policies\Microsoft\Windows Defender
配下のポリシーキーを使うか、Windowsセキュリティアプリから操作してください。「触れないから所有権を変更してフルコントロールを取得する」という手法がネット上に出回っていますが、これをやるとTamper Protectionの意味が完全に無効化され、マルウェアに対して無防備になるためおすすめしません。
問題イベントビューアーで改ざん防止のログを見つけられない
Tamper Protectionが何をブロックしたか確認したいのに、イベントビューアーのどこを見ればいいかわからないという質問をよく受けます。
イベントビューアーを開いたら、左ペインで「アプリケーションとサービスログ」→「Microsoft」→「Windows」→「Windows Defender」→「Operational」と展開してください。ここでイベントID 5013をフィルタリングすると、Tamper Protectionがブロックした操作の一覧が確認できます。
PowerShellから直接ログを取得する方法もあります。
Get-WinEvent -LogName "Microsoft-Windows-Windows Defender/Operational" | Where-Object { $_.Id -eq 5013 } | Select-Object TimeCreated, Message -First 20
このコマンドで、直近20件のTamper Protectionブロックイベントを時刻とメッセージ付きで取得できます。「いつ何がブロックされたか」がわかれば、原因の切り分けは格段に楽になります。
ぶっちゃけこうした方がいい!
ここまで長々と書いてきましたが、正直に言います。Defenderのリアルタイム保護を完全に無効化する必要がある場面は、10年以上の現場経験でもほぼゼロでした。
「Defenderが邪魔だ」と感じる場面の99%は、除外設定で解決します。開発ビルドが遅いなら開発フォルダとプロセスを除外する。業務ソフトがブロックされるならそのexeを除外する。バックアップジョブが遅いならバックアップパスを除外する。リアルタイム保護そのものをオフにする必要はほとんどありません。
バッチファイルの改ざん防止についても、新しい
LockBatchFilesWhenInUse
が一般リリースされたら即座に有効にするべきです。バッチファイルを実行中にロックするだけなので、普通のスクリプトには一切影響がありません。有効にしない理由がないのです。
そして、ぶっちゃけ最も効率的な運用は「Tamper Protectionは絶対に触らない。除外設定だけで解決する。どうしてもダメなら仮想マシンでやる」というシンプルなルールに尽きます。Tamper Protectionを一時的にオフにしてレジストリをいじって元に戻して……という作業を繰り返すのは時間の無駄だし、戻し忘れのリスクがあります。除外設定ならTamper Protectionがオンのままでも追加・削除できる(Intuneで
DisableLocalAdminMerge
を設定していなければ)ので、はるかに安全で効率的です。
もうひとつ本音を言えば、バッチファイルでDefenderの設定を頻繁に切り替える運用そのものを見直したほうがいいです。2026年の今、バッチファイルでDefenderを操作するのは「やむを得ない過渡期の対応」であって、本来はIntuneやグループポリシーで一元管理するのが正解です。個人の開発PCなら、PowerShellで除外を設定して放置するだけで十分。レジストリを手動で書き換える時代は、もう終わりかけています。
最終的に大事なのは、「止める方法」を調べる前に「止めずに済む方法」を先に調べるという発想の転換です。これだけで、トラブルの量も作業時間も体感で半分以下になります。騙されたと思って、まずは除外設定から試してみてください。
このサイトをチップで応援
Windows11のバッチファイル改ざん防止とレジストリキーに関する疑問解決
LockBatchFilesWhenInUseを設定すると既存のバッチファイルに影響はありますか?
基本的には影響しません。通常のバッチファイルは実行中に自分自身を書き換えることがないため、ロック機能を有効にしても正常に動作します。ただし、自己書き換え型のバッチファイル(実行中に自身の内容を変更するもの)は、ファイルがロックされるため書き換えに失敗します。古い運用ツールやレガシーなデプロイスクリプトで自己書き換えを使っている場合は、事前にテスト環境で動作確認を行ってください。
Tamper Protectionを無効にせずにDefenderの設定をバッチファイルで変更できますか?
個人のPCでは、Tamper Protectionが有効な状態でのスクリプトやレジストリによるDefender設定変更はブロックされます。企業環境ではMicrosoft IntuneやMicrosoft 365 Defenderポータルを経由すれば、Tamper Protectionを維持したまま設定変更が可能です。また、Defender for Endpointの「トラブルシューティングモード」を使うと、特定デバイスのTamper Protectionを一時的に解除し、時間経過で自動復帰させることもできます。
レジストリのTamperProtection値が「1」になっていて「5」に変更できないのはなぜですか?
TamperProtection値の「5」は有効を意味し、「1」は有効を意味する別の状態コードです。混同しやすいのですが、同じレジストリキーの中にTamperProtection(バイナリ設定、1=有効/0=無効)とTamperProtectionSource(保護ソース、5=署名ベース)という2つの値が存在します。この2つを混同して「1を5に変えなければ」と焦る方が多いのですが、実際には1の状態が正常な場合もあります。不安な場合は、PowerShellで
Get-MpComputerStatus | Select IsTamperProtected
を実行して、Trueと表示されれば改ざん防止は有効です。
グループポリシーでTamper Protectionを管理できますか?
できません。Microsoftは公式に「通常のグループポリシーはTamper Protectionには適用されない」と明言しています。Tamper Protectionの管理は、Windowsセキュリティアプリでの手動操作か、Microsoft IntuneまたはMicrosoft 365 Defenderポータルからの遠隔管理に限られます。
Windows11 Homeでもこれらの機能は使えますか?
LockBatchFilesWhenInUseのレジストリ設定はエディションに関係なく利用可能です(Insider Previewビルドに限る)。Tamper Protectionもすべてのエディションで有効ですが、Homeエディションではグループポリシーエディタ(gpedit.msc)が使えないため、Defenderのリアルタイム保護を恒久的に無効にしたい場合はレジストリを直接編集する方法に限られます。ただし、Tamper Protectionがその変更をブロックするため、実質的にHomeエディションでの完全無効化はかなり困難です。
今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
いま、あなたを悩ませているITの問題を解決します!
「エラーメッセージ、フリーズ、接続不良…もうイライラしない!」
あなたはこんな経験はありませんか?
✅ ExcelやWordの使い方がわからない💦
✅ 仕事の締め切り直前にパソコンがフリーズ💦
✅ 家族との大切な写真が突然見られなくなった💦
✅ オンライン会議に参加できずに焦った💦
✅ スマホの重くて重要な連絡ができなかった💦
平均的な人は、こうしたパソコンやスマホ関連の問題で年間73時間(約9日分の働く時間!)を無駄にしています。あなたの大切な時間が今この悩んでいる瞬間も失われています。
LINEでメッセージを送れば即時解決!
すでに多くの方が私の公式LINEからお悩みを解決しています。
最新のAIを使った自動応答機能を活用していますので、24時間いつでも即返信いたします。
誰でも無料で使えますので、安心して使えます。
問題は先のばしにするほど深刻化します。
小さなエラーがデータ消失や重大なシステム障害につながることも。解決できずに大切な機会を逃すリスクは、あなたが思う以上に高いのです。
あなたが今困っていて、すぐにでも解決したいのであれば下のボタンをクリックして、LINEからあなたのお困りごとを送って下さい。
ぜひ、あなたの悩みを私に解決させてください。
まとめ
Windows11のバッチファイル改ざん防止は、2026年に入って大きく進化しました。新しいLockBatchFilesWhenInUseレジストリ値により、実行中のバッチファイルをロックしてセキュリティとパフォーマンスの両方を向上できるようになりました。一方で、Microsoft DefenderのTamper Protectionは、レジストリやスクリプトによる不正な設定変更を多層的にブロックする強固な仕組みとして機能し続けています。
この2つの仕組みを正しく理解し、使い分けることがWindows11でのセキュリティ管理の鍵です。バッチファイルの保護にはLockBatchFilesWhenInUseを有効にし、Defenderの設定変更が必要な場合はTamper Protectionの正規の手順(Windowsセキュリティアプリ、Intune、Defenderポータル)で操作する——この原則を守れば、「設定が勝手に戻る」「レジストリが変更できない」といった混乱から解放されます。
まずは検証環境でLockBatchFilesWhenInUseの設定を試し、自分の環境のバッチファイルとの互換性を確認してみてください。そして、Tamper Protectionは基本的に有効のまま運用し、必要最小限の範囲で一時的にオフにする習慣を身につけましょう。セキュリティと利便性のバランスは、正しい知識があれば必ず取れます。






コメント