Windows 11 でイベント ビューアーに「DNS Client Events – イベント ID 1012: ローカル hosts ファイルの読み取り中にエラーが発生した」という警告が断続的に出る問題は、hosts の内容・エンコード・権限・サイズ・他アプリの介入など複数要因が絡みます。本記事は Home エディションを含む一般環境を想定し、原因の切り分けから安全な復旧、再発防止までを、コピペ可能なコマンドと具体的な手順で徹底解説します。
症状と前提
対象環境は Windows 11(Home/Pro 共通)。イベント ビューアーに以下の警告がランダムに記録されます。
DNS Client Events — イベント ID 1012
ローカル hosts ファイルの読み取り中にエラーが発生しました。
既に sfc /scannow、DISM 修復、hosts の手動編集、クリーン再インストールまで実施しても解消しない、という相談が多く寄せられます。
まず押さえるべきポイントは次のとおりです。
- hosts は既定で「空のサンプル」(全行コメント)。Windows 10/11 では通常の名前解決は DNS に委ねられ、hosts は空でも正常です。
- 警告 1012 は「致命的エラー」ではないため、実害が無い場合は無視も選択肢です(後述の再発防止を参照)。
- それでも記録が気になる/業務上ログをきれいにしたい場合は、以下の手順で確実に潰せます。
原因の全体像(なぜ 1012 が出るのか)
DNS Client(サービス名: Dnscache) は起動時やキャッシュ操作時に C:\Windows\System32\drivers\etc\HOSTS を読み込みます。この処理が、次のいずれかで失敗すると 1012 を記録します。
| カテゴリ | 主な要因 | 具体例 |
|---|---|---|
| 内容/形式 | 不正な構文・巨大サイズ・不可視文字 | UTF-16/BOM 付き、ゼロ幅スペース、行頭が全角スペース、1 行が極端に長い、100万行級の広告ブロックリスト |
| ファイル名/場所 | 拡張子や保存場所の誤り | HOSTS.txt で保存、SysWOW64 側を編集、別フォルダに複製が存在 |
| 権限/属性 | ACL/所有権/暗号化/ストリーム | Users からの読み取り不可、EFS 暗号化、代替データストリーム (ADS) が付与 |
| ロック/介入 | 他プロセスが編集中・自動書き換え | セキュリティ製品/VPN/広告ブロッカー/最適化ツールが常駐で書換・ロック |
| システム | 一時的な不整合 | キャッシュ不整合、アップデート直後の再起動待ち、破損したテンポラリ |
まずは 5 分でできる「既定に戻す」クイック修復
- 管理者として 64 ビットのメモ帳を起動(
C:\Windows\System32\notepad.exeを右クリック→「管理者として実行」)。 C:\Windows\System32\drivers\etc\HOSTSを開く(ファイルの種類を「すべてのファイル」に変更)。- 内容を全てコメントのみにする(以下をそのまま貼り付け)。
# Copyright (c) 1993-2009 Microsoft Corp. # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost - 拡張子なし・エンコードは ANSI または UTF-8(BOM なし)・改行は CRLFで上書き保存。
※BOM 付き UTF-8/UTF-16 は避けるのが無難です。 - 管理者 PowerShell で DNS キャッシュをクリア。
ipconfig /flushdns - 15〜30 秒様子を見て、イベント 1012 の再発有無を確認。
これで収まる場合は、hosts の形式/エンコード/内容が原因だった可能性が高いです。
詳細版:根こそぎ直す分解手順
1) バックアップとファイル実体の検証
C:\Windows\System32\drivers\etc\HOSTSをHOSTS.oldにリネーム(復元点確保)。- 同フォルダに
hosts系ファイルが複数ないか確認(hosts.txtやHOSTS.icsなど)。 - SysWOW64 側(
C:\Windows\SysWOW64\drivers\etc)に別コピーが存在しないか確認。編集は必ずSystem32側で実施。
2) 正しいエンコード・改行に再生成
不可視文字(BOM/全角スペース/タブ混在)が混入していると 1012 の温床になります。新規作成が安全です。
# 手順(管理者メモ帳)
# 1. 新規作成 → 既定内容を貼り付け
# 2. 名前を付けて保存 → ファイル名「HOSTS」, 種類「すべてのファイル」
# 3. エンコード「ANSI」または「UTF-8(BOM なし)」, 改行「CRLF」
PowerShell で再エンコードする場合(PS 7 以上推奨):
$p = "$env:WINDIR\System32\drivers\etc\HOSTS"
(Get-Content $p -Raw) | Set-Content $p -Encoding utf8NoBOM -NoNewline
ipconfig /flushdns
3) ACL(アクセス権)・所有権の見直し
既定は SYSTEM/Administrators: フル制御、Users: 読み取り。壊れている場合は次で初期化します。
takeown /f "%WINDIR%\System32\drivers\etc\HOSTS"
icacls "%WINDIR%\System32\drivers\etc\HOSTS" /inheritance:e
icacls "%WINDIR%\System32\drivers\etc\HOSTS" /grant *S-1-5-18:F Administrators:F Users:R
attrib -R "%WINDIR%\System32\drivers\etc\HOSTS"
暗号化(EFS)や圧縮が付いていると読み取りに失敗することがあります。チェックして外します。
cipher /d "%WINDIR%\System32\drivers\etc\HOSTS"
compact /u "%WINDIR%\System32\drivers\etc\HOSTS"
4) 代替データ ストリーム(ADS)の除去
ダウンロード由来の :Zone.Identifier などが付くと挙動が不安定になることがあります。
powershell -NoP -C "Get-Item $env:WINDIR\System32\drivers\etc\HOSTS -Stream * | Remove-Item -Stream * -Force"
5) 構文・サイズ・不可視文字のチェック
| チェック項目 | OK の例 | NG の例 |
|---|---|---|
| 基本構文 | 127.0.0.1 example.test | 127.0.0.1 # example(ホスト名が無い) |
| ホワイトスペース | スペース 1 個 or タブ | 全角スペース/不可視タブ混在 |
| コメント | 行頭 # | 行末に制御文字・謎の BOM |
| 1 行の長さ | 適度な長さ(< 2KB 目安) | 数十 KB 級の行(解析コスト過大) |
| ファイルサイズ | < 数 MB 目安 | 数十 MB の広告ブロックリスト |
不可視文字の検出例(16 進ダンプ):
powershell -NoP -C "[System.BitConverter]::ToString([IO.File]::ReadAllBytes(`"$env:WINDIR\System32\drivers\etc\HOSTS`")).Replace('-', ' ')"
6) 他プロセスのロック・自動書き換えを疑う
セキュリティソフト、VPN クライアント、広告ブロッカー、最適化/チューニング系が自動で hosts を更新する例は珍しくありません。まずは一時無効化、あるいは クリーンブート で再現性を確認します。
msconfig → サービス → 「Microsoft のサービスをすべて隠す」→ すべて無効 → 再起動
リソース モニター(resmon.exe)→ CPU タブ → 関連付けられたハンドルで「hosts」を検索し、どのプロセスがホールドしているかを特定します。
7) DNS クライアント サービスの健全性
サービスが停止/失敗していると 1012 が連鎖することがあります。状態を確認します。
powershell -NoP -C "Get-Service Dnscache | Format-List Name,Status,StartType"
sc queryex Dnscache
8) ネットワーク スタックの初期化(最終手段)
どうしても収まらない場合のみ実施。再起動が必要です。
netsh winsock reset
netsh int ip reset
ipconfig /flushdns
shutdown /r /t 0
イベント ビューアーでの検証手順
- イベント ビューアーを開く。
- アプリケーションとサービス ログ > Microsoft > Windows > DNS Client Events > Operational を選択。
- 右ペイン「現在のログのフィルター」→ イベント ID に
1012を指定。 - hosts を修正 →
ipconfig /flushdns→ 数十秒監視。新規の 1012 が出なければ解消です。
合わせて名前解決のテストを行います。
ping example.test
nslookup example.test
Get-DnsClientCache | Where-Object { $_.Entry -eq "example.test" }
「既定の hosts」完全テンプレート(コピペ用)
以下をそのまま HOSTS に保存してください(拡張子なし・ANSI または UTF-8(BOM なし))。
# Copyright (c) 1993-2009 Microsoft Corp.
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
hosts を安全に活用する(必要な人だけ)
特定ドメインの上書きが必要な場合は、コメント行の下に加筆します。
127.0.0.1 example.test
192.168.10.5 intranet.local
::1 ipv6-only.test
- 1 行につき「
IPアドレス+ 半角スペース/タブ +ホスト名(複数可)」。 - ワイルドカード(
*.example.com)は使えません。必要なサブドメインを列挙してください。 - 保存後は毎回
ipconfig /flushdnsを実行すると確実に反映されます。
再発防止と運用のコツ
- 巨大な広告ブロック用 hosts は避ける(ブラウザー拡張やネットワーク機器でのフィルタへ移行)。
- セキュリティ製品や VPN は「hosts 保護/書換」機能の設定を確認し、必要なら除外に登録。
- 編集は常に 管理者 64 ビット Notepad で
System32側を開く(32 ビットアプリのファイル リダイレクトを回避)。 - 定期的に Windows Update を適用し、再起動をサボらない。
それでも 1012 が出る場合の考え方
イベント ID 1012 は「警告」であり、hosts が空でも OS の設計上は正常です。ネットワークに支障が無いなら、ログのノイズとして割り切る判断も現実的です。どうしても記録を減らしたい場合は、最新の累積更新プログラム適用やインプレース アップグレード(Windows の上書き回復:設定・アプリを保持)を検討してください。
よくある落とし穴(FAQ 形式)
| 質問 | 要点 |
|---|---|
| 「HOSTS.txt」で保存していた | 拡張子は無しが正解。エクスプローラーで「ファイル名拡張子」を表示し誤保存を防止。 |
| UTF-8(BOM 付き)で保存していた | 基本は ANSI か UTF-8(BOM なし)。BOM が混入すると先頭に不可視文字が残りがち。 |
| 全角スペースやタブが混在 | 半角スペース/タブのみ使用。迷ったら新規作成に張り替え。 |
| 広告ブロック用に 1MB 超の hosts | 解析コストが高くなり不安定化の一因。ブラウザー/ルーター側のフィルタへ移行を推奨。 |
| VPN/セキュリティ製品が自動で書換 | 一時停止で再現性を確認し、製品側の除外やポリシーで hosts 保護/変更を止める。 |
| どのファイルを OS が読んでいるか不安 | System32 配下の HOSTS を使用。64 ビット Notepad で管理者として直接開くのが確実。 |
トラブルシューティング一括スクリプト(上級者向け)
以下は 管理者 PowerShell で実行可能な、hosts の初期化〜権限修復〜DNS キャッシュクリアをまとめたスクリプトです。内容を理解してからお使いください。
$p = "$env:WINDIR\System32\drivers\etc\HOSTS"
$bk = "$p.{0:yyyyMMddHHmmss}.bak" -f (Get-Date)
if (Test-Path $p) { Copy-Item $p $bk -Force }
# 既定内容を BOM なし UTF-8 で生成(PS 7 以上)
@'
# Copyright (c) 1993-2009 Microsoft Corp.
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
'@ | Set-Content -Path $p -Encoding utf8NoBOM -NoNewline
# 属性/ストリーム/ACL を初期化
attrib -R $p
try { Get-Item $p -Stream * | Remove-Item -Stream * -Force } catch {}
icacls $p /inheritance:e | Out-Null
icacls $p /grant *S-1-5-18:F Administrators:F Users:R | Out-Null
cipher /d $p | Out-Null
compact /u $p | Out-Null
# DNS キャッシュクリア
ipconfig /flushdns
Write-Host "HOSTS を初期化しました。バックアップ: $bk"
チェックリスト(作業前後の自己点検)
| 項目 | 前 | 後 |
|---|---|---|
編集対象は System32\drivers\etc\HOSTS(拡張子なし) | □ | □ |
| エンコードは ANSI/UTF-8(BOM なし)、改行は CRLF | □ | □ |
| 内容はコメントのみ(または最小限の正しいマッピング) | □ | □ |
| ACL は SYSTEM/Administrators=フル、Users=読み取り | □ | □ |
| 暗号化/圧縮/ADS は付与されていない | □ | □ |
| 巨大化や長大行は無い(数 MB 未満) | □ | □ |
| 常駐アプリが書換/ロックしていない | □ | □ |
ipconfig /flushdns 実施済み | □ | □ |
| イベント 1012 の再発が止まった | □ | □ |
まとめ
イベント ID 1012 は、hosts の「内容・形式・権限・ロック」のいずれかでつまずいたサインです。既定内容への貼り替え+BOM なし保存+ACL 初期化+キャッシュクリアの 4 点セットで多くは解消します。巨大なリストや自動書換ツールは再発の火種になりがちなので、役割を DNS 側やネットワーク機器に寄せる運用も検討してください。実害が無いなら警告として受け流す判断も、Windows 11 時代の実務的な選択肢です。

コメント