Windows 8.x(・10)がブルスクで起動しない(0xc0000034)問題を修正(8.xは大学(院)生向け)

# はじめに
## 0xc0000034エラーについて
### このエラーの恐ろしさ・記事を書くに至った経緯
このエラーが起こると、Windowsパソコンを起動しようとしてもWindowsが正しく起動せず、最初からいきなりブルースクリーンになります。私の身の回りでは、症例が2つ(自分・後輩)あるのですが、どちらもノートパソコンでした。大学生の場合、ノートパソコンしか持っていないという場合も多く、課題などで忙しい時にこの症状が出てしまうと詰んでしまいます。しかも、この記事で正しく対処すれば中のデータは無事なのですが、それを知らずにメーカーに持って行ってしまうと確実にHDD・SSDの初期化をされてデータが飛んでしまいます。さらに、このエラーについてググっても断片的な情報しかヒットしません。ですので、この記事を書くに至りました。

### エラーの原因
UEFIブートのパソコン(Windows8.x以降搭載のノートパソコンなら大抵そう)の場合、ブートする際にはBCDストアというものを参照します。しかし、何らかの原因でこのBCDストアが壊れることがあります。それが、このエラーの原因です。

## この記事の対象となる読者
次の条件を満たしている人です。

- 問題の起こっているパソコンがUEFIブートのWindows 8.x以降(ノートパソコンの場合基本的にUEFIブートです)
- (Windows8.xの場合等)大学・大学院に所属しているなど、DreamSparkの利用資格があること


# (Windows8.xの場合)Windows 8.1 Embedded Industry ProのISOイメージを用意
## なぜWindows 8.1 Embedded Industry Proなのか
まずWindows8.1のリカバリディスクかインストールディスクを用意します。・・・が、大抵の場合、このブルスクは**ほとんど前触れもなく突然発症します**し、最近のノートパソコンは**リカバリディスクを自分で作る方式を取っているので**、発症時に8.1のメディアの用意している人はほとんどいないと思います。

通常の人ならここで詰むのですが、大学生の場合は[Microsoft Imagine](https://imagine.microsoft.com/ja-JP)(旧DreamSpark)というプログラムにより、組み込み版Windowsを**タダで**入手できます。しかも、組み込み版のWindows8.1、Windows 8.1 Embedded Industry Proは**通常版の8.1と互換性があり、リカバリディスクの代わりに使えます。**ですので、これをブートし、パソコンの修復を行っていきます。ここからの作業は別のパソコンを取り出すか、および友人・知り合い・家族などのパソコンを借りるなどして行います。また、DVDを使用する場合は、内蔵、もしくは外付けのDVD/BDドライブを用意します。

## Microsoft Imagineに登録
すでにMicrosoft Imagineに登録している情報強者のみなさんはこの項目は飛ばしてください。まず、「ac.jp」で終わる大学のメールアドレスとMicrosoftアカウントを用意します。Microsoftアカウントを用意していない人は登録してください。そうしたら、[https://imagine.microsoft.com/ja-jp/Account](https://imagine.microsoft.com/ja-jp/Account)にアクセスし、大学のメールアドレスを利用して学生認証を行います。詳細な手順は省きます。

## Windows 8.1 Embedded Industry ProのISOイメージをダウンロード
Microsoft Imagineに登録したら、[Windows Embedded 8.1 Industry Pro Updateのダウンロードページ](https://imagine.microsoft.com/ja-jp/Catalog/Product/82)にアクセスし、ISOイメージをダウンロードします。(Windows7の場合はWindows Embedded Standard 7をダウンロードすればいいと思いますが、Dream SparkがMicrosoft Imagineになるのにともなってダウンロード不可になったようです。Windows10の場合は[通常版のISOイメージをダウンロード](https://www.microsoft.com/ja-jp/software-download/windows10ISO)すればいいと思いますが、この場合も詳細な説明は避けます。どちらの場合も人柱募集中です。)ライセンスキーは取得しなくて構いません。

ダウンロードにはSecure Download ManagerというMicrosoft製のソフトをダウンロードしないといけませんが、インストール手順は省略します。

# (Windows10の場合)Windows10のISOイメージを用意する
Windows10の場合は次のページから誰でもダウンロード可能です。https://www.microsoft.com/ja-jp/software-download/windows10ISO
言語は日本語、64bit版をダウンロードします。

# ISOイメージをメディアに焼く
ISOイメージを無事ダウンロードしたら、エクスプローラーでそれの入ってるフォルダを開きます。ISOイメージを書き込みたいメディア(DVD・USBメモリ)をセットしてから、イメージを右クリックして「ディスクイメージの書き込み」を押します。「書き込み用ドライブ」の欄を先ほどセットしたメディアに変更してから、「書き込み」ボタンを押して、イメージを書き込みます。

# BIOSをいじって外部メディアからのブートを許可する
大抵の(ノート)パソコンは、F2キーを押すとBIOSが起動します。起動したら、

- 外部メディアからのブートを許可
- (電源投入直後にF12キーなどを押すなどして起動メディアを選択できない場合)Windows 8.1 Embedded Proのインストールメディアを内蔵SSD・HDDよりも優先して起動するようにする

ようにBIOSの設定を変更し、保存→再起動します。その間にインストールメディアを接続します。

# Windows 8.1 Embedded Industry Proをブートしてコマンドプロンプトを開く
Windows 8.1 Embedded Industry Proの入ったメディアをパソコンに接続すると、そこからブートします。ブートしない場合はBIOSの設定をいじるか、起動直後のF12キーなどでメディアを直接指定してブートします。インストールの画面が出たら、次の手順でコマンドプロンプトを起動します。
1. 画面右下の「次へ」を押します。
2. 画面左下の「コンピューターを修復する」を押します。間違っても「今すぐインストール」は押さないようにしましょう。場違いです。
3. すると「オプションの選択」という画面になります。真ん中の「トラブルシューティング」を押します。
4. 一番下の「詳細オプション」を押します。**間違っても「PCのリフレッシュ」「PCを初期状態に戻す」は押さないように！**
5. すると、画面右上に「コマンドプロンプト」が出てきます。これを押すと、まっさらな画面にコマンドプロンプトが出現します。
# コマンドプロンプトでコマンドを打ち込む
## WindowsのコマンドとUnixのコマンド
Windowsのコマンド(コマンドプロンプト)はLinux・Macを始めとするUnix系とは異なったコマンド体系を持ちます。(下表)また、コマンドの大文字小文字は区別しません。

| Windows | Unix     |意味                       |
|---------|----------|--------------------------|
| dir     | ls       |現在のフォルダの中身を列挙   |
| ren     | mv       |リネーム                   |
| del     | rm       |削除                       |
| cd( /d) | cd       |フォルダ移動                |
| more    | less     |ファイルの内容閲覧          |
| type    | cat      |ファイルの内容出力          |
| /o      | -o       |コマンドオプション(1文字)    |
| /option | --option |コマンドオプション(2文字以上)|
| rem      | #       |シェルのコメント            |

これらをさくっと覚えたら、早速黒画面にコマンドを打ち込んでいきます。

## 最初のコマンド
まず、以下のコマンドを打っていきます。

```bat
bootrec /fixmbr
bootrec /fixboot
bootrec /scanos
bootrec /rebuildbcd
rem 注: 最初のコマンドはやらなくてもいいかもしれません
```

これを打っている途中で、このコマンドがWindowsを認識していないことがわかったら、中断して次に行きます。認識していたらおそらく完了だと思いますので、再起動して直ったかどうか確認します。ちなみに2症例ともWindowsを認識していませんでした。

## diskpart編
まず、修復対象とするボリューム(BCDがあるもの)はWindowsで認識されておらず、ドライブ文字が割り当てられていないので、割り当てていきます。まず、

```bat
diskpart
```

でdiskpartというものを起動します。そうしたら、

```bat
list disk
```

で、ディスクの一覧を表示します。Windowsのブートに使うディスクの番号を確認したら、

```bat
select disk 0
rem 例: ディスク番号が0の場合
```

で選択状態にします。次に、

```bat
list volume
```

で、ボリュームの一覧を表示します。ここで注目するのはファイルシステムです。**ターゲットのファイルシステムはFAT32です。**一番若い番号のFAT32ボリュームにおそらくBCDが入っています。番号を確認したら、

```bat
select volume 3
assign letter=b:
rem 例: 3番の場合
```

でそのボリュームにドライブ文字(ここではB)を割り当てていきます。そして

```bat
exit
```

でdiskpartを終了します。

## BCD修復編
BCDが入っていると思しきボリュームに文字(ここではBとする)を割り当てたら、まず、実際にBCDがあるかどうか確認します。次のコマンドを打って、BCDがある場所に飛びます。

```bat
cd /d B:\EFI\Microsoft\Boot
```
フォルダがないと言われたらそれは違うボリュームです。diskpartを開き、そのボリュームを`select disk`・`select volume`で選択したら、


```bat
remove
```

で文字の割当を解除します。その後は`list volume`などで別のドライブに文字を割り当て、BCDを探します。フォルダが見つかったら、BCDを次のコマンドでリネームします。(バックアップ)

```bat
ren BCD BCD.bak
```

その後、以下のコマンドでBCDを修復します。

```bat
bootrec /fixmbr
bootrec /fixboot
bootrec /scanos
bootrec /rebuildbcd
rem 注: 最初のコマンドはやらなくてもいいかもしれません
```

途中でWindowsが認識されたことを示す出力があったら手応えがあった証拠です。これで作業は終了なので、`exit`でコマンドプロンプトを閉じ、再起動しましょう。