Windows ServerにLANドライバを無理やりインストールする方法

##Windows Serverにネットワークアダプタのドライバがインストールできない

古いファイルサーバが手狭になってきたので新しいサーバーを導入することにしました．構成は以下のとおり

* CPU: Xeon E3-1240L v3
* M/B: AsRock Z87 Extreme11/ac
* OS: Windows Server 2012R2
* 以下略

M/BのZ87 Extreme11/acですが，最近すっかり普通のM/Bメーカーになってしまった感じのするAsRockが久々に発売した変態M/B．SATAが22ポートもついてます．自宅サーバーにうってつけのM/Bですが，ネットワークアダプタがWindows Serverをサポートしていないのか，M/Bに付属のCDを使ってもドライバをインストールできません．

##注意

この操作はサポート外なので動作保証されません．自己責任でお願いします．

##準備

UEFIでセキュアブートをONにしているとWindowsをテストモードで起動できませんのでセキュアブートをOFFにしてください．設定方法はM/Bのメーカー依存なので省略します．

##M/Bに乗っているコンポーネントを確認

ともかくネットワークに繋がないとRDPも使えないので早急に解決しないといけません．まずはM/Bに乗っているコンポーネントを確認します．M/B付属のマニュアルによると

* Intel I217-V
* Intel I211AT
* Broadcom製の無線LAN

が搭載されているようです．サーバーなのでとりあえず無線LANは置いといて，Intelのイーサネットアダプタのドライバをインストールすることにします．

IntelまたはAsRockのホームページからドライバをダウンロードします．zipファイルもしくは自己解凍exeで，中身はこんな感じになってます．

![direcroty.png](https://qiita-image-store.s3.amazonaws.com/0/44767/46bb826e-5b01-3e7f-9cec-3f2e5c2ab09c.png)

今回はギガビットイーサネットアダプタでOSはWindows Serverなので PRO1000 > Winx64 > NDIS646 とフォルダを辿ると

![drivercomponents.png](https://qiita-image-store.s3.amazonaws.com/0/44767/4dc3b368-879a-54b3-d587-38da054a516d.png)

こんなファイルが見つかると思います．ここからM/Bに搭載されているイーサネットアダプタの構成設定を探して書き換えていきます．

##INFファイルの書き換え

デバイスマネージャーから目的のデバイスを右クリックして[プロパティ]を表示します（画像はドライバのインストール後ですが，インストールする前でもデバイスのIDは見れます）．

![devicemanager.png](https://qiita-image-store.s3.amazonaws.com/0/44767/2a65ebbb-1c28-c8c3-35cc-bd0f6e3b443b.png)

デバイスPCI\VEN_8086\DEV_153B\...っていう記述が見えます．VEN_8086はお察しの通りIntelのことで，次のDEV_153Bがこのデバイスを表しています（多分）ので，このDEV_153Bについての記述をINFファイルの中から探します．今回はe1d64x64.infにそれらしいものが見つかりました．

```e1d64x64.inf
[Manufacturer]
%Intel%     = Intel, NTamd64.6.3, NTamd64.6.3.1

[ControlFlags]
ExcludeFromSelect = \ 
    PCI\VEN_8086&DEV_153A,\ 
    PCI\VEN_8086&DEV_153B

[Intel]

[Intel.NTamd64.6.3.1]
; DisplayName                   Section              DeviceID
; -----------                   -------              --------
%E153ANC.DeviceDesc%            = E153A.6.3.1,       PCI\VEN_8086&DEV_153A
%E153ANC.DeviceDesc%            = E153A.6.3.1,       PCI\VEN_8086&DEV_153A&SUBSYS_00008086
%E153ANC.DeviceDesc%            = E153A.6.3.1,       PCI\VEN_8086&DEV_153A&SUBSYS_00011179
%E153BNC.DeviceDesc%            = E153B.6.3.1,       PCI\VEN_8086&DEV_153B
%E153BNC.DeviceDesc%            = E153B.6.3.1,       PCI\VEN_8086&DEV_153B&SUBSYS_00008086
%E153BNC.DeviceDesc%            = E153B.6.3.1,       PCI\VEN_8086&DEV_153B&SUBSYS_00011179
%E155ANC.DeviceDesc%            = E155A.6.3.1,       PCI\VEN_8086&DEV_155A
%E155ANC.DeviceDesc%            = E155A.6.3.1,       PCI\VEN_8086&DEV_155A&SUBSYS_00008086
%E155ANC.DeviceDesc%            = E155A.6.3.1,       PCI\VEN_8086&DEV_155A&SUBSYS_00011179
%E155ANC.DeviceDesc%            = E155A.6.3.1,       PCI\VEN_8086&DEV_155A&SUBSYS_90BA104D
%E1559NC.DeviceDesc%            = E1559.6.3.1,       PCI\VEN_8086&DEV_1559
%E1559NC.DeviceDesc%            = E1559.6.3.1,       PCI\VEN_8086&DEV_1559&SUBSYS_00008086
%E1559NC.DeviceDesc%            = E1559.6.3.1,       PCI\VEN_8086&DEV_1559&SUBSYS_00011179
%E1559NC.DeviceDesc%            = E1559.6.3.1,       PCI\VEN_8086&DEV_1559&SUBSYS_90BA104D

[Intel.NTamd64.6.3]
; DisplayName                   Section        DeviceID
; -----------                   -------        --------
%E153ANC.DeviceDesc%            = E153A,       PCI\VEN_8086&DEV_153A
%E153ANC.DeviceDesc%            = E153A,       PCI\VEN_8086&DEV_153A&SUBSYS_00008086
%E153ANC.DeviceDesc%            = E153A,       PCI\VEN_8086&DEV_153A&SUBSYS_00011179
%E155ANC.DeviceDesc%            = E155A,       PCI\VEN_8086&DEV_155A
%E155ANC.DeviceDesc%            = E155A,       PCI\VEN_8086&DEV_155A&SUBSYS_00008086
%E155ANC.DeviceDesc%            = E155A,       PCI\VEN_8086&DEV_155A&SUBSYS_00011179
```

上の[Intel.NTamd64.6.3.1]がWindows8.1に関する記述で（多分）下の[Intel.NTamd64.6.3]がWindows Server2012R2に関する記述です（多分）．それらしい行を上のセクションからパクってやります．

```e1d64x64.inf
[Manufacturer]
%Intel%     = Intel, NTamd64.6.3, NTamd64.6.3.1

[ControlFlags]
ExcludeFromSelect = \ 
    PCI\VEN_8086&DEV_153A,\ 
    PCI\VEN_8086&DEV_153B

[Intel]

[Intel.NTamd64.6.3.1]
; DisplayName                   Section              DeviceID
; -----------                   -------              --------
%E153ANC.DeviceDesc%            = E153A.6.3.1,       PCI\VEN_8086&DEV_153A
%E153ANC.DeviceDesc%            = E153A.6.3.1,       PCI\VEN_8086&DEV_153A&SUBSYS_00008086
%E153ANC.DeviceDesc%            = E153A.6.3.1,       PCI\VEN_8086&DEV_153A&SUBSYS_00011179
%E153BNC.DeviceDesc%            = E153B.6.3.1,       PCI\VEN_8086&DEV_153B
%E153BNC.DeviceDesc%            = E153B.6.3.1,       PCI\VEN_8086&DEV_153B&SUBSYS_00008086
%E153BNC.DeviceDesc%            = E153B.6.3.1,       PCI\VEN_8086&DEV_153B&SUBSYS_00011179
%E155ANC.DeviceDesc%            = E155A.6.3.1,       PCI\VEN_8086&DEV_155A
%E155ANC.DeviceDesc%            = E155A.6.3.1,       PCI\VEN_8086&DEV_155A&SUBSYS_00008086
%E155ANC.DeviceDesc%            = E155A.6.3.1,       PCI\VEN_8086&DEV_155A&SUBSYS_00011179
%E155ANC.DeviceDesc%            = E155A.6.3.1,       PCI\VEN_8086&DEV_155A&SUBSYS_90BA104D
%E1559NC.DeviceDesc%            = E1559.6.3.1,       PCI\VEN_8086&DEV_1559
%E1559NC.DeviceDesc%            = E1559.6.3.1,       PCI\VEN_8086&DEV_1559&SUBSYS_00008086
%E1559NC.DeviceDesc%            = E1559.6.3.1,       PCI\VEN_8086&DEV_1559&SUBSYS_00011179
%E1559NC.DeviceDesc%            = E1559.6.3.1,       PCI\VEN_8086&DEV_1559&SUBSYS_90BA104D

[Intel.NTamd64.6.3]
; DisplayName                   Section        DeviceID
; -----------                   -------        --------
%E153ANC.DeviceDesc%            = E153A,       PCI\VEN_8086&DEV_153A
%E153ANC.DeviceDesc%            = E153A,       PCI\VEN_8086&DEV_153A&SUBSYS_00008086
%E153ANC.DeviceDesc%            = E153A,       PCI\VEN_8086&DEV_153A&SUBSYS_00011179
%E155ANC.DeviceDesc%            = E155A,       PCI\VEN_8086&DEV_155A
%E155ANC.DeviceDesc%            = E155A,       PCI\VEN_8086&DEV_155A&SUBSYS_00008086
%E155ANC.DeviceDesc%            = E155A,       PCI\VEN_8086&DEV_155A&SUBSYS_00011179
%E153BNC.DeviceDesc%            = E153B.6.3.1,       PCI\VEN_8086&DEV_153B
%E153BNC.DeviceDesc%            = E153B.6.3.1,       PCI\VEN_8086&DEV_153B&SUBSYS_00008086
%E153BNC.DeviceDesc%            = E153B.6.3.1,       PCI\VEN_8086&DEV_153B&SUBSYS_00011179
```

えいやっと

##Windowsをテストモードで再起動してドライバをインストールする

cmdかpowershellで

```
> bcdedit -set loadoptions DISABLE_INTEGRITY_CHECKS
```

```
> bcdedit -set TESTSIGNING on
```

を実行します．UEFIのセキュアブートがONになっているとここでエラーになりますので注意してください．2つのコマンドを実行したらWindowsを再起動します．

再起動したらデバイスマネージャーから目的のデバイスを右クリックして[ドライバー ソフトウェアの更新]をクリックします．[コンピュータを参照してドライバー ソフトウェアを検索します(R)]を選択して先ほどのファイルのあるフォルダを選択してインストールします．Windowsからいろいろ文句を言ってきますが，自己責任であることを自覚しつつ警告を無視してインストールすれば完了です．

他のデバイスに対しても同様にインストールできると思います．

![complete.png](https://qiita-image-store.s3.amazonaws.com/0/44767/4ab562a4-b04a-af54-491e-ebfeb2bbfb0d.png)

やったぜ

一度ドライバをインストールしてしまえばIntelの通常のインストーラが使えるようになるので，最新版に更新するといいと思います．

作業が終わったら

```
> bcdedit -set loadoptions ENABLE_INTEGRITY_CHECKS
```

```
> bcdedit -set TESTSIGNING off
```

を実行してドライバの検証をONにしてください．

##デバイスマネージャーに"不明なデバイス"が表示される場合

デバイスマネージャーから不明なデバイスのプロパティを表示し，さきほどの「DEV_153B」にあたる部分をGoogle先生に尋ねれば何のデバイスなのか判明すると思います．これは経験則ですが，ほとんどの場合はチップセットのドライバをインストールすると消えます．

##ドライバをインストールできないもの

BluetoothはWindows Serverでは利用できません．ドライバをインストールしても再起動時にエラーを吐きます．

##最後に

Windows Serverは学生に対してはDreamSparkを通じて無償で提供されていますので，ハードウェア周りのサポートなどで面倒な部分もありますが，気が向いたら学習用に試してみてもいいのではないでしょうか．