Windows 10でDHCPによるIPアドレス設定ができず、調べてみたらバグと仕様の複合的な原因だった
昨年12月あたりのある時点から、Windows 10が導入されているノートPCがDHCPでIPアドレスを設定できなくなり、有線LAN・無線LANを問わずネットワークに接続できなくなった。常時使用しているPCではなく、機器設定時のシリアルコンソールとプレゼン用途くらいの使用頻度だったため特に問題はなかったのだが、出張に持ち出すことになり、やはりネットワークに繋がらないのは困るな、と。
もちろん、これまでも手をこまねいていたワケではなく、コマンドプロンプトでipconfig /renew を実行したり、PCをシャットダウンしてコールドスタート(ここ重要)してみたり試行錯誤を繰り返していたのだが、問題は解決せず。PCをシャットダウンするため、行っていたオペレーションは、電源メニューから「シャットダウン」を選択する、というもの。
で、何気なく開いたタスクマネージャーで、ふと気がついたのがこれ。稼働時間が70日を超えている(苦笑)。
勘の良い方はお気づきかもしれないが、そういやWindows 8以降のシャットダウンは、本来の意味でのシャットダウンじゃなかったな、と。実は(個人的に)Windows 8のあまりの使いにくさにWindows 7を使い続けていたので、すっかりこの仕様を忘れていた。Windows 8以降、シャットダウン後の起動プロセスは高速スタートアップなるものになっている。
高速スタートアップのポイントを、いろいろたどってたどり着いた次のブログから引用すると、
従来のシャットダウンでは、ユーザー セッションをすべて終了するだけでなく、カーネル セッションでもサービスおよびデバイスを終了して完全なシャットダウンに備えている点です。
Windows 8 ではこの点で重要な変更を行いました。Windows 7 と同様、ユーザー セッションは終了されますが、カーネル セッションは終了されるのではなく、休止状態になります。
ということらしく。
Windows 8以降のWindowsでは、シャットダウン時にデバイスドライバの状態も含むカーネル領域をレジュームしておき、次回起動時は保存しておいた休止状態ファイルの内容を、そのままカーネルランドの状態として復旧させるらしく。
高速スタートアップでは、ユーザーランドは初期化されるが、カーネル領域は単にハイバネーションされているだけってことらしく。そりゃ、デバイス初期化されんわ、と(苦笑)。
つまり、シャットダウンは、本来の意味でのシャットダウンではない。
で、どうやら再起動であれば、このようなハイバネーションを行うことなく、デバイスも初期化される仕様ということがわかり、改めて再起動。すると、今度はDHCPでIPアドレスを無事取得。
さらに調べていると「一部のWindows 10マシンでネット接続ができなくなる問題に対処」なる記事に突き当たる。
どうやら、12月9日にリリースされたアップデートKB3201845が適用されると、DHCPでのIPアドレス取得ができなくなる不具合があったようで。これを修正するアップデートKB3206632がリリースされていたらしい。
あくまで推測に過ぎないが、まとめると、こんな状態になっていたらしい。
- 高速スタートアップの繰り返しにより、70日間デバイスが初期化されることなく使用される。
- 12月上旬にKB3201845が適用され、状況によりCDPSvc(Connected Devices Platform Service)がクラッシュ。DHCPでのIPアドレスが出来ない状態になる。
- 当然、ipaddr /renew でもIPアドレスがリフレッシュできない状態になる。
- シャットダウンしても高速スタートアップで起動されるため、デバイスが初期化されない。
- このため、インターネットに接続できない状態が続く。
- 当然、修正アップデートKB3206632が適用されることはなく、インターネットに接続できない状態が続く(4. へ戻る)。
で、やっと再起動によりデバイスが初期化され、とりあえずIP reachableな状態に。この状態でまず行うことはWindows Update(苦笑)。ということで、急ぎ実行。
無事、KB3206632を包含(というか置き換える)KB3213986が適用された。
2017 年 1 月 10 日 — KB3213986 (OS ビルド 14393.693)
https://support.microsoft.com/ja-jp/help/4009938/windows-10-update-kb3213986
さて、DHCPでIPアドレスが取得できないというバグは解消されたとして、シャットダウンできちんとシャットダウンされるよう設定を変更。早い話、高速スタートアップを無効化することにした。手順は次の通り。
「コントロールパネル」→「ハードウエアとサウンド」→「電源オプション」と進み、「電源ボタンの動作の選択」を選択。
「高速スタートアップを有効にする(推奨)」にチェックが入っているため、このチェックを外す。このため、先に「現在利用可能ではない設定を変更します」部分をクリック。
で、やっとチェックを外せる状態になる。
チェックを外したら、忘れず「変更の保存」を押す。これで、シャットダウン後のシステム起動が(本来の)コールドスタートとして起動される。個人的には、高速スタートアップなんて無用の長物。システム起動時には、きちんと初期化されて立ち上がってほしい(泣)。
...という作業を行っていた品川の夜だったのでした。