最新の Microcode Update Device を Windows 2000に適用する
先日ちょこっと話をしましたが、
KB936357(マイクロコード信頼性の更新が利用可能な Intel プロセッサを使用しているシステムの信頼性を向上させる) マイクロコードアップデートというのがあります。
これは、マザーボードさえ対応していれば問題ないのですが、逆に対応していないと、CPUの軽微なバグがそのままだったり、CPUの性能を発揮できないなどの問題があります。
インテルプロセッサ識別ユーティリティで CPUのリビジョン見た時に「なし」になっていた場合は、まずいかもしれません。
ちなみに、Windows 2000の場合、SP4に同梱されている update.sys 5.0.2195.6655 が最新で、ビルド番号から推察すると 2003年1月のものです。
そこで、Windows XP SP3 に入っている update.sys が使えないかと考えてみました(Win2000のものを Windows XPで使っても問題ないので)
Windows XP の Update.sys は IoForwardIrpSynchronously
(IoForwardAndCatchIrpと同じ) をインポートしてるので、そのままでは Windows 2000では使えません。
逆に、 IoForwardIrpSynchronously のコードを自分で書いてやれば動かすことができるわけです。
ちなみに、この関数を自分で書くとこんな感じ。
IoForwardIrpSynchronously: push ebp mov ebp,esp sub esp,00000010h mov edx,[ebp+0Ch] cmp byte ptr [edx+23h],01h jnz L1 xor al,al jmp L2 L1: push ebx push esi mov esi,[edx+60h] push edi lea eax,[esi-24h] mov edi,eax push 00000007h pop ecx rep movsd xor ebx,ebx mov [eax+03h],bl lea eax,[ebp-08h] mov [ebp-04h],eax mov [ebp-08h],eax mov eax,[edx+60h] sub eax,00000024h mov [ebp-10h],bl mov byte ptr [ebp-0Eh],04h mov [ebp-0Ch],ebx lea ecx,[ebp-10h] mov [eax+20h],ecx mov ecx,[ebp+08h] mov dword ptr [eax+1Ch],offset L5 mov byte ptr [eax+03h],E0h call IofCallDriver cmp eax,00000103h jz L4 L3: pop edi pop esi mov al,01h pop ebx L2: leave retn 0008h L4: push ebx push ebx push ebx push 00000005h lea eax,[ebp-10h] push eax call KeWaitForMutexObject jmp L3 L5: push ebp mov ebp,esp push 00000000h push 00000000h push [ebp+10h] call KeSetEvent mov eax,C0000016h pop ebp retn 000Ch |
コードにして150バイト程あける必要があるわけですが、同一セグメントには70バイト程度の空きしかないので、PAGECONSセクションを128バイトずらしてKeSetEventとKeWaitForMutexObjectのインポートテーブルを追加して書き換えることにしました。
Download: Windows2000-KB936357-v3-x86-ENU.zip Language: Multilingual (excepted NEC98) Description: update.sys 5.0.2195.7155 Author: Customized by BlackWingCat besed update.sys(5.1.2600.5512/xp sp3) |
ちなみに、このドライバを使っても、リビジョンが変わらない場合は、このドライバの効果は全く ありません。
Pentium II ODP CPUID=1632 UpdateRev=02 1998/06/10 CPUID=611 UpdateRev=B27 1996/12/18 CPUID=612 UpdateRev=C6 1996/12/10 CPUID=616 UpdateRev=C6 1996/12/10 CPUID=617 UpdateRev=C6 1996/12/10 CPUID=619 UpdateRev=D2 1998/02/18 Pentium II CPUID=633 UpdateRev=36 1998/09/23 CPUID=634 UpdateRev=37 1998/09/23 Pentium II/Celeron CPUID=650 UpdateRev=19 1997/12/12 PlatformID=2 CPUID=650 UpdateRev=2E 1998/02/11 PlatformID=5 CPUID=650 UpdateRev=2F 1998/02/11 PlatformID=7 CPUID=650 UpdateRev=40 1999/05/25 PlatformID=0 CPUID=650 UpdateRev=41 1999/05/25 PlatformID=1 CPUID=650 UpdateRev=45 1999/05/25 PlatformID=3 CPUID=651 UpdateRev=40 1999/05/25 PlatformID=0 CPUID=651 UpdateRev=41 1999/05/25 PlatformID=1 CPUID=651 UpdateRev=42 1999/05/25 PlatformID=3 Pentium II CPUID=652 UpdateRev=2A 1999/05/12 PlatformID=0 CPUID=652 UpdateRev=2B 1999/05/12 PlatformID=2 CPUID=652 UpdateRev=2C 1999/05/17 PlatformID=1 CPUID=652 UpdateRev=2D 1999/05/18 Platf ormID=3 CPUID=653 UpdateRev=10 1999/06/28 PlatformID=0 CPUID=653 UpdateRev=0B 1999/05/20 PlatformID=2 CPUID=653 UpdateRev=0C 1999/05/18 PlatformID=1 CPUID=653 UpdateRev=0D 1999/05/18 PlatformID=3 Celeron CPUID=660 UpdateRev=0A 1999/05/05 PlatformID=0 CPUID=665 UpdateRev=03 1999/05/05 PlatformID=4 CPUID=66A UpdateRev=0B 1999/05/05 PlatformID=5 CPUID=66A UpdateRev=0C 1999/05/05 PlatformID=1 CPUID=66A UpdateRev=0D 1999/05/05 PlatformID=3 CPUID=66D UpdateRev=05 1999/03/12 PlatformID=1 CPUID=66D UpdateRev=06 1999/03/12 PlatformID=3 CPUID=66D UpdateRev=07 1999/05/05 PlatformID=5 CPUID=671 UpdateRev=14 1998/08/11 PlatformID=2 CPUID=672 UpdateRev=10 1999/09/22 PlatformID=0 CPUID=672 UpdateRev=38 1999/09/22 PlatformID=2 CPUID=673 UpdateRev=2E 1999/09/10 PlatformID=2 CPUID=673 UpdateRev=0E 1999/09/10 PlatformID=0 Pentium III CPUID=681 UpdateRev=10 1999/09/21 PlatformID=2 CPUID=681 UpdateRev=11 1999/09/21 PlatformID=4 CPUID=681 UpdateRev=0D 1999/09/21 PlatformID=0 CPUID=681 UpdateRev=0E 1999/09/21 PlatformID=5 CPUID=681 UpdateRev=0F 1999/09/21 PlatformID=3 CPUID=683 UpdateRev=10 2001/02/06 PlatformID=2 CPUID=683 UpdateRev=13 2001/02/06 PlatformID=0 CPUID=683 UpdateRev=14 2001/02/06 PlatformID=4 CPUID=683 UpdateRev=07 1999/10/15 PlatformID=5 CPUID=683 UpdateRev=08 1999/10/15 PlatformID=3 CPUID=686 UpdateRev=02 2000/05/04 PlatformID=2 CPUID=686 UpdateRev=07 2000/05/05 PlatformID=0 CPUID=686 UpdateRev=08 2000/05/05 PlatformID=4 CPUID=686 UpdateRev=0A 2000/05/04 PlatformID=1 CPUID=686 UpdateRev=0C 2000/05/04 PlatformID=7 CPUID=68A UpdateRev=01 2000/11/02 PlatformID=4 CPUID=68A UpdateRev=04 2000/12/07 PlatformID=5 CPUID=68A UpdateRev=05 2000/12/07 PlatformID=7 CPUID=695 UpdateRev=07 2004/11/09 PlatformID=4 CPUID=695 UpdateRev=07 2004/11/09 PlatformID=5 CPUID=695 UpdateRev=47 2004/11/09 PlatformID=7 CPUID=6A0 UpdateRev=03 2000/01/10 PlatformID=2 CPUID=6A1 UpdateRev=01 2000/03/06 PlatformID=2 CPUID=6A4 UpdateRev=01 2000/06/16 PlatformID=2 CPUID=6B1 UpdateRev=1C 2001/02/15 PlatformID=4 CPUID=6B1 UpdateRev=1D 2001/02/20 PlatformID=5 CPUID=6B4 UpdateRev=01 2002/01/10 PlatformID=4 CPUID=6B4 UpdateRev=02 2002/01/11 PlatformID=5 Pentium M CPUID=6D6 UpdateRev=18 2004/10/17 PlatformID=5 CPUID=F05 UpdateRev=0B 2000/08/24 PlatformID=0 Celeron CPUID=6E8 UpdateRev=39 2005/11/15 PlatformID=5 CPUID=6EC UpdateRev=54 2006/05/01 PlatformID=5 CPUID=6EC UpdateRev=59 2006/09/12 PlatformID=7 Pentium 4 CPUID=F07 UpdateRev=08 2000/11/15 PlatformID=1 CPUID=F07 UpdateRev=12 2002/07/16 PlatformID=0 Pentium 4 Xeon CPUID=F0A UpdateRev=13 2002/07/16 PlatformID=0 CPUID=F0A UpdateRev=14 2002/07/16 PlatformID=2 CPUID=F0A UpdateRev=15 2002/08/21 PlatformID=1 CPUID=F11 UpdateRev=0A 2003/07/29 PlatformID=1 CPUID=F12 UpdateRev=2D 2003/05/02 PlatformID=0 CPUID=F12 UpdateRev=2E 2003/05/02 PlatformID=2 CPUID=F12 UpdateRev=2F 2003/05/02 PlatformID=1 CPUID=F13 UpdateRev=05 2003/05/08 PlatformID=2 CPUID=F22 UpdateRev=05 2003/07/29 PlatformID=1 CPUID=F24 UpdateRev=1E 2003/06/05 PlatformID=2 CPUID=F24 UpdateRev=1F 2003/06/05 PlatformID=1 CPUID=F24 UpdateRev=20 2003/06/05 PlatformID=3 CPUID=F24 UpdateRev=21 2003/06/10 PlatformID=4 CPUID=F25 UpdateRev=2A 2004/08/11 PlatformID=1 CPUID=F25 UpdateRev=29 2004/08/11 PlatformID=0 CPUID=F25 UpdateRev=2B 2004/08/11 PlatformID=2 CPUID=F25 UpdateRev=2C 2004/08/26 PlatformID=4 CPUID=F26 UpdateRev=10 2004/08/05 PlatformID=1 CPUID=F27 UpdateRev=37 2003/06/04 PlatformID=2 CPUID=F27 UpdateRev=38 2003/06/04 PlatformID=1 CPUID=F27 UpdateRev=39 2003/06/04 PlatformID=3 CPUID=F29 UpdateRev=2E 2004/08/11 PlatformID=2 CPUID=F29 UpdateRev=2D 2004/08/11 PlatformID=1 CPUID=F29 UpdateRev=2F 2004/08/11 PlatformID=3 CPUID=F32 UpdateRev=0A 2004/05/11 PlatformID=0,2,3 CPUID=F33 UpdateRev=0C 2005/04/21 PlatformID=0,2,3 CPUID=F43 UpdateRev=05 2005/04/21 PlatformID=0,2,3,4,7 D-Xeon/C2D CPUID=6F2 UpdateRev=5A 2007/09/26 PlatformID=0 CPUID=6F2 UpdateRev=57 2007/03/15 PlatformID=5 CPUID=6F6 UpdateRev=C7 2007/03/15 PlatformID=5 CPUID=6F6 UpdateRev=CB 2007/09/16 PlatformID=0 CPUID=6F6 UpdateRev=CD 2007/09/16 PlatformID=2 C2Q CPUID=6F7 UpdateRev=68 2007/09/16 PlatformID=4 CPUID=6F7 UpdateRev=69 2007/09/17 PlatformID=6 Q-XEON/C2Q CPUID=6FA UpdateRev=92 2007/03/13 PlatformID=7 Core2Duo CPUID=6FB UpdateRev=B3 2007/03/14 PlatformID=7 CPUID=6FB UpdateRev=B6 2007/07/13 PlatformID=0 CPUID=6FB UpdateRev=B6 2007/07/13 PlatformID=3 CPUID=6FB UpdateRev=B6 2007/07/13 PlatformID=4 CPUID=6FB UpdateRev=B7 2007/08/06 PlatformID=2 CPUID=6FB UpdateRev=B7 2007/08/06 PlatformID=6 CPUID=6FD UpdateRev=A1 2007/03/13 PlatformID=7 CPUID=6FD UpdateRev=A3 2007/08/13 PlatformID=0 Celeron CPUID=10661 UpdateRev=31 2007/03/16 PlatformID=1 CPUID=10661 UpdateRev=33 2007/03/16 PlatformID=7 CPUID=10661 UpdateRev=38 2007/09/19 PlatformID=0 Xeon E CPUID=10676 UpdateRev=60B 2008/01/19 PlatformID=0 CPUID=10676 UpdateRev=60B 2008/01/19 PlatformID=2 CPUID=10676 UpdateRev=60B 2008/01/19 PlatformID=4 CPUID=10676 UpdateRev=60B 2008/01/19 PlatformID=6 C2Q(Yorkfield) CPUID=10677 UpdateRev=703 2008/01/19 PlatformID=4 Pentium 4 CPUID=F34 UpdateRev=17 2005/04/21 PlatformID=0,2,3,4 CPUID=F41 UpdateRev=16 2005/04/21 PlatformID=1 CPUID=F41 UpdateRev=17 2005/04/22 PlatformID=0,2,3,4,5,7 CPUID=F44 UpdateRev=06 2005/04/21 PlatformID=0,2,3,4,7 CPUID=F47 UpdateRev=03 2005/04/21 PlatformID=0,2,3,4,7 CPUID=F65 UpdateRev=07 2006/04/26 PlatformID=2 CPUID=F48 UpdateRev=07 2005/06/30 PlatformID=0,1,2,3,4,6 CPUID=F48 UpdateRev=0B 2005/09/01 PlatformID=1 CPUID=F48 UpdateRev=0C 2006/05/08 PlatformID=0 CPUID=F49 UpdateRev=03 2005/04/21 PlatformID=0,2,3,4,5,7 CPUID=F4A UpdateRev=04 2005/12/14 PlatformID=2,3,4,6 CPUID=F4A UpdateRev=02 2005/06/10 PlatformID=0,2,3,4,6 CPUID=F65 UpdateRev=08 2006/04/26 PlatformID=0 CPUID=F62 UpdateRev=0F 2005/12/15 PlatformID=2 CPUID=F64 UpdateRev=02 2005/12/15 PlatformID=0 CPUID=F64 UpdateRev=04 2005/12/23 PlatformID=2,4,5 CPUID=F68 UpdateRev=09 2006/07/14 PlatformID=1,5 |
このドライバの作成日は2008/04/13になっているので、1年ほど前のCPUのマイクロコードには対応してると思います。
Core i7は 106A4とか106A5なので、非対応ですね。
ちなみに、うちのデスクも 1067A(X3360)なので非対応。
しかし、改めてみると、AMD系が入ってないのね。後、Windows Vistaにはこの手のドライバがなくて、mcupdate_GenuineIntel.dllに入っていることが判明。
関連リンク
Intel Microcode List
Comments