日程Fit|「いつ空いてますか?」の往復はもう不要。候補日を選んでURLを送るだけ|登録不要|今すぐ無料で使う →

Windows 11のhosts読み込みエラー「DNS Client Events イベントID 1012」の原因と完全解決ガイド|エンコード/権限/ロック/巨大化まで総点検

Windows 11 でイベント ビューアーに「DNS Client Events – イベント ID 1012: ローカル hosts ファイルの読み取り中にエラーが発生した」という警告が断続的に出る問題は、hosts の内容・エンコード・権限・サイズ・他アプリの介入など複数要因が絡みます。本記事は Home エディションを含む一般環境を想定し、原因の切り分けから安全な復旧、再発防止までを、コピペ可能なコマンドと具体的な手順で徹底解説します。

日程Fit。無料・登録不要。「いつ空いてる?」を、ひとつのリンクで。リンクを送って、○△×でかんたん日程調整。無料で日程を作る。
目次

症状と前提

対象環境は 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 分でできる「既定に戻す」クイック修復

  1. 管理者として 64 ビットのメモ帳を起動(C:\Windows\System32\notepad.exe を右クリック→「管理者として実行」)。
  2. C:\Windows\System32\drivers\etc\HOSTS を開く(ファイルの種類を「すべてのファイル」に変更)。
  3. 内容を全てコメントのみにする(以下をそのまま貼り付け)。
    # 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
  4. 拡張子なし・エンコードは ANSI または UTF-8(BOM なし)・改行は CRLFで上書き保存。
    ※BOM 付き UTF-8/UTF-16 は避けるのが無難です。
  5. 管理者 PowerShell で DNS キャッシュをクリア。ipconfig /flushdns
  6. 15〜30 秒様子を見て、イベント 1012 の再発有無を確認。

これで収まる場合は、hosts の形式/エンコード/内容が原因だった可能性が高いです。

詳細版:根こそぎ直す分解手順

1) バックアップとファイル実体の検証

  • C:\Windows\System32\drivers\etc\HOSTSHOSTS.old にリネーム(復元点確保)。
  • 同フォルダに hosts 系ファイルが複数ないか確認(hosts.txtHOSTS.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.test127.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

イベント ビューアーでの検証手順

  1. イベント ビューアーを開く。
  2. アプリケーションとサービス ログ > Microsoft > Windows > DNS Client Events > Operational を選択。
  3. 右ペイン「現在のログのフィルター」→ イベント ID に 1012 を指定。
  4. 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 ビット NotepadSystem32 側を開く(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 時代の実務的な選択肢です。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次