0. はじめに

内容はかなり端折っています。
初級者の方が見ながら実行すれば解決するというものでは無く、ある程度知識がある方が見ないとわからない内容となっています。
どのような人がターゲットかというと「私」です。
Windows10のPCは家族含めて何台もあるのですが、どれもこれも1度はトラブってうんざり。
何故こんなにもWindows10はトラブルが多いのか……。
そんな私のためのメモでもあります。
なお、環境はUEFI、GPT(MBRではない)を前提としています。

2023年5月17日追記:
まずは長時間放置も試してください。

1. セーフモードで(が)起動するとき

セーフモードで起動させ、コマンド(管理者)を実行。

chkdsk システムドライブ: /f /r
chkdsk システムドライブ: /b /x ※最近は専らこちらのオプションを使用(2021/03/03)
sfc /scannow
dism /online /cleanup-image /restorehealth

Windows Update後にドラブったときは、最新のUpdateを削除。
ソフトの場合はソフトを削除。

2. セーフモードで(が)起動できないとき

2-1. セットアップディスクの用意

当該バージョンのDVDを用意してDVDブート(USBでも可)。

最新以外のバージョンのISOは下記サイトからダウンロード可能。
https://tb.rg-adguard.net/public.php

2-2. 修復メニューの表示

「今すぐインストール」ボタンのある画面の左下の「コンピューターを修復する」を選択。
オプションの選択で「トラブルシューティング」を選択。

2-3. スタートアップの修復

詳細オプションの「スタートアップの修復」を実行。
多くのサイトでは2~3回実行すると書かれているが、うちでは複数PC合わせて100回は実行してきたが一度たりとも修復出来た試しは無い。
つまり「修復できませんでした」のいつもの文字を見るために実行する。

2-4. システムの復元

詳細オプションの「システムの復元」を実行。
復元ポイントに戻す。

グラフィックドライバーの更新後に起動しなくなったときは、これで直ったことがある。
ただ、多くの場合は直らなかったり、そもそも復元ポイントを作成していなかったりと、使えないことが多かった。

2-5. 更新プログラムのアンインストール

詳細オプションの「更新プログラムのアンインストール」を実行。
Windows Updateが原因で起動しなくなったときは有効かもしれない。
ただ、うちではUpdate後にトラブったときに、そもそもこのメニューが出てこなかったので、これを使って直ったことは無い。

2-6. コマンドプロンプト

詳細オプションの「コマンド プロンプト」を実行。
(ほとんどのトラブルはコマンドで直してきた。)

2-6-1. Windowsブート領域の修復

ブート領域はドライブレターが割り振られていないので、ドライブレターを設定する。

diskpart
list volume
「FAT32」のボリュームを見付けて番号を覚えておく(この番号は後でも使う)
select volume 番号
assign letter z(←ドライブレターは空いているものならなんでも良い)
※ドライブレターは、再起動後は再設定が必要。(毎回消えます。)
exit

cd /d z:\efi\microsoft\boot
del bcd
※多くのサイトでは「ren bcd bcd.bak」などでバックアップを取っているけれど、うちでは役に立ったことは無いので消している。
bootrec /rebuilbcd
→ ここでWindowsの認識数が1(以上)ではないときは、手順2-6-2.へ。
bootrec /fixboot
→ うちではお約束の如く「アクセスが拒否されました」と表示される。(もちろんそれではダメ)
bcdboot システムドライブ:\windows /l ja-JP /s z: /f all
※ システムドライブは、Windows10上ではCドライブ(C:\Windows)と表示されていても、この画面ではまったく別のドライブレターだったりする。

2-6-2. システムドライブのドライブレターの見つけ方

うちでは10個ぐらいドライブ(レター)があるPCでトラブったりもしていて、そんなときはひたすら探すしかない。

diskpart
list volume
ここでだいたいの目星を付ける。
exit

あとは
dir
コマンドを実行して、フォルダー構成がそれっぽいドライブを探す。

2-6-3. ブート領域のフォーマット

「bootrec /rebuilbcd」や「bootrec /fixboot」が上手く行かないときはフォーマットする。

format z: /fs:fat32

もう一度2-6-1.の後半のコマンドを実行してbcdを作成する。

bootrec /rebuilbcd
bootrec /fixboot
bcdboot システムドライブ:\windows /l ja-JP /s z: /f all

で、ここで油断してはいけない。
bcdファイルを編集する(必要があることがある)。

アクセス権の変更。

attrib z:\efi\microsoft\boot\bcd -h -r -s

bcdの内容を表示する。

bcdedit

「Windows ブート マネージャー」欄の「device」を確認すると……「partition=Z:」になっている。(なっていない場合は以降は不要)
「Z:」って自分で勝手に付けたドライブレターだから、再起動すると認識出来なくなってしまうかもしれない。
なので、書き換える。

bcdedit /set (identifierの内容({~}のこと。「{」や「}」も必要)) device "partition=\Device\HarddiskVolume(番号)"

※番号は、2-6-1.の手順で覚えた番号。「bcdedit /set {abcd-efgh} device “partition=\Device\HarddiskVolume15″」みたいな感じになる。

もう一度bcdの内容を表示して、正しく書き換わっていることの確認。

bcdedit

【補足】
「Windows ブート ローダー」欄のドライブレターが「C:」になっていないのは問題無し。
上記で確認したシステムドライブのドライブレターであればOK。

2-6-4. Windowsの修復

ブート領域を修復してもWindows自体が壊れている場合は起動しないので、Windowsを修復する。

ディスクのエラーチェック。

chkdsk システムドライブ: /f /r
chkdsk システムドライブ: /b /x ※最近は専らこちらのオプションを使用(2021/03/03)

システムファイルの修復。

sfc /scannow
だとエラーになるので
sfc /scannow /offbootdir=システムドライブ: /offwindir=Windowsドライブ:\Windows

※なお、うちのPCはすべてシステムドライブとWindowsドライブは同じ。
※ドライブレターは上記で確認したドライブレター(つまり「C:」とは限らない)。

続けて。

dism /online /cleanup-image /restorehealth
だとエラーになるので
dism /image:システムドライブ /cleanup-image /restorehealth /source:esd:DVDドライブ:\sources\install.esd:インデックス番号 /limitaccess
もしくは
dism /image:システムドライブ /cleanup-image /restorehealth /source:wim:DVDドライブ:\sources\install.wim:インデックス番号 /limitaccess
(詳細は後述)

2-6-4-2. DISMコマンド実行の準備

前述で、
dism /image:システムドライブ /cleanup-image /restorehealth /source:esd:DVDドライブ:\sources\install.esd:インデックス番号 /limitaccess
もしくは
dism /image:システムドライブ /cleanup-image /restorehealth /source:wim:DVDドライブ:\sources\install.wim:インデックス番号 /limitaccess
と書いたが、実行する前に情報を集めておく必要がある。

・セットアップディスクの入ったDVD(USB)ドライブのドライブレター
・ESDまたはWIMファイルの在処
・ESDファイルなのかWIMファイルなのか
・インデックス番号

まず、DVDドライブのドライブレターは、システムドライブを探した要領で、ドライブレターを見付けておく。

次に、ESDまたはWIMファイルの在処は、だいたいは「DVD(またはUSB)ドライブ:\sources\」に「install.esd」または「install.wim」が存在する。
たまに別の場所にあること(フォルダーの階層が深い場合)もあるので、注意が必要。

存在するファイルは「install.esd」または「install.wim」のどちらか1つ。
「/source:esd:」または「/source:wim:」と、オプションコマンドが異なってくるので、拡張子は覚えておくこと。

インデックス番号は、当該Windowsエディションの番号。
番号は世界で決まっているわけでは無いので、セットアップディスクごとに調べる必要がある。
例えば、修復しようとしているWindows10が「Pro」なら、Proの番号を控える。

dism /get-imageinfo /imagefile:DVDドライブ:\sources\install.esd
または
dism /get-imageinfo /imagefile:DVDドライブ:\sources\install.wim

【補足】
「/limitaccess」は上書きや削除などを防ぐためのオプションコマンド。
DVDなら書き換えられることは無いので不要だが、USBの場合は必須。
実際、USBでやらかしてinstall.wimが消えたことがあった。

2-6-5. ドライバの削除

上記の手順までで9割の事象は解決してきたが、解決出来なかった場合もあった。
その際は不要なOEMドライバを削除することで解決できた。

ドライバの一覧を表示する。

dism /image:システムドライブ:\ /get-drivers

数が多くて表示が流れてしまう場合はmoreコマンドを使うと良いかも。

dism /image:システムドライブ:\ /get-drivers | more

怪しいドライバの目星が付いたら削除する。

dism /image:システムドライブ:\ /remove-driver /driver:oemxx.inf

※複数同時削除も可能
dism /image:システムドライブ:\ /remove-driver /driver:oemxx.inf /driver:oemxx.inf

3.最後に

うちではここまでしたらほぼどのPCも復旧することができました。
(1つだけ復旧できず、Windows10をアップグレードインストールしたPCもありましたが。)

ただ、1回では起動しないことがあります。
うちでは、起動せず「0xc0000001」だの「0xc000000e」だののエラーが出ていたPCが、ここまでの手順を実行したら、やはり起動はしないものの「0xc0000098」に変化し、その後にもう一度PCを起動してみると正常にWindows10が起動した例がありました。

Windows10が正常に起動したあとは、念のために下記のコマンドを実行しておくと良いです。

chkdsk システムドライブ: /f /r
chkdsk システムドライブ: /b /x ※最近は専らこちらのオプションを使用(2021/03/03)
sfc /scannow
dism /online /cleanup-image /restorehealth

また、復元ポイントも作成し、高速スタートアップはオフにした上で、再起動させて問題無く起動することを確認しておくと良い思います。

※2021/03/03 CHKDSKのオプションを変更、一部誤字を訂正(ceanup → cleanup)