Windows Server 2012の起動時に0xC0000021Aでブルースクリーン(BSOD)が発生したし、尚且つエラーの原因がVerification of a known DLL failedの場合の問題があるDLLの特定方法です。
このエラーが発生するとセーフモードや前回正常起動時にしても同様のエラーでOSがクラッシュします。
問題が発生しているDLLを特定するために、memory.dmpとWinDbgを使用します。
memory.dmpは標準設定で、C:\Windowsに作成されていますので取り出しWinDbgに読み込ませます。
Microsoft (R) Windows Debugger Version 6.3.9600.17029 AMD64 Copyright (c) Microsoft Corporation. All rights reserved. Loading Dump File [C:\temp\dmp\MEMORY.DMP] Kernel Bitmap Dump File: Only kernel address space is available --- 省略 --- Windows 8 Kernel Version 9200 MP (32 procs) Free x64 Product: Server, suite: TerminalServer SingleUserTS Built by: 9200.16628.amd64fre.win8_gdr.130531-1504 Machine Name: Kernel base = 0xfffff800`c5a80000 PsLoadedModuleList = 0xfffff800`c5d4ca20 Debug session time: Fri Jun 6 17:26:17.796 2014 (UTC + 9:00) System Uptime: 0 days 0:00:21.511 Loading Kernel Symbols ............................................................... ............................................... Loading User Symbols .. Loading unloaded module list --- 省略 --- ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* Use !analyze -v to get detailed debugging information. BugCheck C000021A, {fffff8a004a0e8b0, ffffffffc000012f, fffff8a0049edc00, 0} Probably caused by : ntkrnlmp.exe ( nt!EmClientQueryRuleState+41b0 ) Followup: MachineOwner ---------
と入力して解析させます。
7: kd> !analyze -v ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* WINLOGON_FATAL_ERROR (c000021a) The Winlogon process terminated unexpectedly. Arguments: Arg1: fffff8a004a0e8b0, String that identifies the problem. Arg2: ffffffffc000012f, Error Code. Arg3: fffff8a0049edc00 Arg4: 0000000000000000 Debugging Details: ------------------ --- 省略 --- ADDITIONAL_DEBUG_TEXT: Verification of a KnownDLL failed. MODULE_NAME: nt FAULTING_MODULE: fffff800c5a80000 nt DEBUG_FLR_IMAGE_TIMESTAMP: 51a966cd BUGCHECK_STR: 0xc000021a_c000012f DEFAULT_BUCKET_ID: WIN8_DRIVER_FAULT CURRENT_IRQL: 0 ANALYSIS_VERSION: 6.3.9600.17029 (debuggers(dbg).140219-1702) amd64fre LAST_CONTROL_TRANSFER: from fffff800c5df137a to fffff800c5ada440 STACK_TEXT: --- 省略 --- STACK_COMMAND: kb FOLLOWUP_IP: nt!EmClientQueryRuleState+41b0 fffff800`c5de2a24 cc int 3 SYMBOL_STACK_INDEX: 2 SYMBOL_NAME: nt!EmClientQueryRuleState+41b0 FOLLOWUP_NAME: MachineOwner IMAGE_NAME: ntkrnlmp.exe IMAGE_VERSION: 6.2.9200.16628 BUCKET_ID: WRONG_SYMBOLS FAILURE_BUCKET_ID: WRONG_SYMBOLS ANALYSIS_SOURCE: KM FAILURE_ID_HASH_STRING: km:wrong_symbols FAILURE_ID_HASH: {70b057e8-2462-896f-28e7-ac72d4d365f8} Followup: MachineOwner ---------
da fffff8a0049edc00
と入力します。
7: kd> da fffff8a0049edc00 fffff8a0`049edc00 "SHELL32.dll"
この結果からブート時に問題を起こしているDLLが、SHELL32.DLLの可能性がありますので、C:\Windows\System32およびC:\Windows\SysWow64のSHELL32.DLLを正常に起動している他のWindows Serverからコピーするなどします。
コピー後再起動します。
再起動後も同様のエラーが発生した場合は、再度dmpをWinDbgします。
対象のDLLを確認し、DLLが変わっているようであれば、同様にコピーを繰り返します。
同じDLLでBSODになっている場合は残念ながらこの方法では回復はできません。