3 月の更新プログラムを適用すると有線 LAN 利用時に問題が発生する (Windows Server 2008)

こんにちは。Windows プラットフォーム サポートです。

 

Windows Server 2008 で 2018 年 3 月 14 日公開の更新プログラム (KB4089229) を適用すると、有線 LAN 利用時において後述の問題が発生することが判明しましたので、本 Blog でご案内します。

本問題は、以下の KB4089229 でも Known Issue として公開しています。

 

・Description of the security update for the Windows Kernel vulnerabilities in Windows Server 2008: March 13, 2018

https://support.microsoft.com/en-us/help/4089229

 

[ 問題の概要 ]

Windows Server 2008 に KB4089229 を適用すると、ネットワーク インターフェースに静的に設定した IP アドレス情報が失われ、DHCP 設定に置き換わる問題が発生することがあります。

 

[ 対象 OS ]

Windows Server 2008 SP2

 

[ 原因 ]

3 月の更新プログラムを適用すると、OS の pci.sys ドライバーが更新され、pci.sys の過去の修正が累積して適用されます。

pci.sys の過去の修正のうち、本問題は KB2487376 の更新プログラムが契機となって発生します。

(KB2487376 以降のバージョンの pci.sys が既に適用されている場合は、本問題は発生しません)

 

・FIX: Stop error when you replace an iSCSI network adapter or a motherboard by using an identical device on a Windows Server 2008-based or Windows Vista-based computer: "0x0000007B"

https://support.microsoft.com/en-us/help/2487376

 

KB2487376 では、デバイス インスタンス パスを生成する際の Serial Number の扱いを DWORD (32 ビット) から QWORD (64 ビット) に変更しています。

この修正を適用することで、NIC のデバイス インスタンス パスが変化し、新しい NIC として認識されることで、本問題が発生します。

 

(デバイス インスタンス パスの例)

// KB2487376 適用前

PCI\VEN_8086&DEV_109A&SUBSYS_207E17AA&REV_00\FF3BD28D00

 

// KB2487376 適用後

PCI\VEN_8086&DEV_109A&SUBSYS_207E17AA&REV_00\0016D3FFFF3BD28D00

 

[ 発生条件 ]

以下の 2 つの条件を両方満たす場合に、本問題が発生します。

a. pci.sys のバージョンが GDR 版 (6.0.6002.1xxxx) であること

b. NIC が PCI Express で Device Serial Number をサポートしていること

 

上記いずれかの条件を満たさない場合には、本問題は発生しません。

また、Hyper-V の仮想マシンでは、“ネットワーク アダプター”、”レガシ ネットワーク アダプター” とも上記 b に該当しないため、本問題は発生しません。

 

[ 対処方法 ]

これから KB4089229 を適用される場合は、以下の手順で対処を実施ください。

 

1. KB4089229 の Known issue にある以下のスクリプト内容をコピーし、テキストファイルに貼り付けて、例えば Script.vbs などの拡張子 .vbs を持つファイルとして保存します。

このスクリプトでは、pci.sys のバージョンが 6.0.6002.22567 未満の場合に、レジストリ設定 (HKLM\System\CurrentControlSet\Control\PnP\Pci\HackFlags = 0x00040000) を追加します。

 

--- ここから ---
Set WshShell = WScript.CreateObject("WScript.Shell")
Set fs = CreateObject("Scripting.FileSystemObject")

Dim WindirFilePath,strPciFileVersion,strAryFileVersion1
WindirFilePath = WshShell.ExpandEnvironmentStrings("%WinDir%")
strPciFileVersion = fs.getfileversion(WindirFilePath & "\\system32\\drivers\\pci.sys")
strAryFileVersion1 = Split(strPciFileVersion, ".")

'pci.sys version check
If (strAryFileVersion1(0) = 6 And strAryFileVersion1(1) = 0 And strAryFileVersion1(2) = 6002 And strAryFileVersion1(3) < 22567) Then

Dim curFlag,hackFlag,path
curFlag = 0
path="HKLM\System\CurrentControlSet\Control\PnP\Pci\HackFlags"

'Get current HackFlags
On Error Resume next
curFlag = WshShell.RegRead(path)
On Error Goto 0

'Set new HackFlags
hackFlag = curFlag or 262144
WshShell.RegWrite path,hackFlag,"REG_DWORD"

Wscript.echo "HackFlags set"
Else
Wscript.echo "pci.sys is already updated. No need to set HackFlags"
End If
--- ここまで ---

 

2. KB4089229 適用前の任意のタイミング、または KB4089229 適用後の OS 再起動前に、以下のコマンドでスクリプトを実行します。

cscript <スクリプトファイルの名前>

例) cscript Script.vbs

 

3. KB4089229 を適用して OS を再起動します。

 

補足事項 :

KB4089229 を適用後に OS 再起動した後は、pci.sys のバージョンが更新されているため、上記のスクリプトを実行してもレジストリ設定は追加されません。
すでに KB4089229 を適用して問題が発生している状態の場合、以下のレジストリ設定を追加して OS 再起動することで復旧します。

 

キー : HKLM\System\CurrentControlSet\Control\PnP\Pci
名前 : HackFlags
種類 : REG_DWORD
設定値 : 0x00040000  (既に HackFlags が存在する場合、既存の値に +0x00040000 した値を設定ください)

この設定により、KB4089229 適用後も、デバイス インスタンス パスの Serial Number が DWORD のまま扱われます。

 

[ 参考情報 ]

本問題の発生条件に該当するかどうか確認する場合は、以下の手順を実施します。

 

(1) pci.sys のバージョンを確認します。

コマンドで確認する場合、以下を実行します。

wmic datafile where name="C:\\Windows\\system32\\drivers\\pci.sys" get version /value

 

以下の例のように、pci.sys のバージョンが 6.0.6002.2xxxx (LDR 版) である場合、本問題は発生しませんので、KB4089229 適用前に事前の対処は必要ありません。

 

以下の例のように、pci.sys のバージョンが 6.0.6002.1xxxx (GDR 版) である場合、本問題が発生し得ますので、(2) の確認に進みます。

 

(2) NIC が PCI Express Serial Number に対応しているか、確認します。

(2-1) コマンドで確認する場合、以下を実行します。

wmic path win32_pnpentity where ClassGUID="{4d36e972-e325-11ce-bfc1-08002be10318}" get DeviceID | find /i "PCI"

 

以下の例では、NIC のデバイス インスタンス パスで最後の “\” の後に “&” を含む形式となっています。

この場合、Serial Number に非対応の NIC であり、本問題は発生しませんので、KB4089229 適用前に事前の対処は必要ありません。

 

以下の例では、NIC のデバイス インスタンス パスで最後の “\” の後に “&” を含まず、Serial Number が付加される形式となります。

この場合、Serial Number に対応している NIC であり、本問題が発生しますので、事前の対処が必要です。

 

(2-2) デバイス マネージャーで確認する場合、NIC のデバイス インスタンス パスを確認します。

 

以下の例では、NIC のデバイス インスタンス パスで最後の “\” の後に “&” を含む形式となっています。

この場合、Serial Number に非対応の NIC であり、本問題は発生しませんので、KB4089229 適用前に事前の対処は必要ありません。

 

以下の例では、NIC のデバイス インスタンス パスで最後の “\” の後に “&” を含まず、Serial Number が付加される形式となっています。

この場合、Serial Number に対応している NIC であり、本問題が発生しますので、事前の対処が必要です。

 

 

[ 参考情報 ]

・Description of the security update for the Windows Kernel vulnerabilities in Windows Server 2008: March 13, 2018

https://support.microsoft.com/en-us/help/4089229

 

[ 関連情報 ]

3月の更新プログラムを適用すると無線 LAN,有線 LAN 利用時に問題が発生する (Windows 7 / Windows Server 2008 R2) https://blogs.technet.microsoft.com/jpntsblog/2018/03/19/lan_problem_after_update_3b/

 

[ 更新履歴 ]

2018/03/26 : 本 Blog の公開

2018/04/02 : 本 Blog の更新

2018/04/09 : 本 Blog の更新 (対処方法を更新)

 

[ 補足 ]

本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。