g00ceyの技術ブログ

Windowsで不調になった際の調査について触れてみた

目次

まとめ

今回業務で使用しているマシンが定期的に強制再起動を繰り返す(起きたら再起動後だったり、Windows回復起動しようとしていたりする)問題について調査した流れを記載します。
Windowsで不具合を起こした際のトラブルシュートの方法について原因調査のとっかかりについてできればなと思い記事として作成しました。
事象的に合致しない場合でもこの流れに沿って行けば、問題の原因に近づくことは容易なのではないかな?と思います。

方針・前提条件

  • ダメだったら初期化!ではなく、ダメだったらログをみて何が起こっているのかを調査するためのとっかかりについて記述
  • それでもわからなかったらとりあえず初期化とかになるんでしょうけど。(周辺機器が絡まないマシン本体側の論理的なエラーの場合はこっちで対応するのが速い場合も多い)

環境

  • Windows 10 Pro/Home(確認している環境はProですけど、Homeでも普通に使えると思います)

作業内容

ざっくりとした作業内容は

  • ログ・Dumpから原因を追いかける
    • イベントビューワーで発生日時・内容を確認
    • MEMORYDUMPが出ている場合は、WinDbgを使ってメモリダンプを確認
  • 上記の指し示すものが一体何かを調べる(ドライバとかね)

イベントビューワーで発生日時内容を確認

まず、イベントビューワーを開いてログを確認する イベントビューワー1
見えづらいのでそれっぽいログを検出するためのカスタムビューを作成する
イベントビューワー2
イベントビューワー3
発生時刻・エラー発生事由ベースで「これじゃね?」ってのを見つける イベントビューワー4
イベントビューワー5

この問題においては強制的に再起動が入ってメモリダンプが出力されているのでメモリダンプを解析に移る。
ただ、メモリダンプは書き込み権限が付与されていないようなので、メモリダンプファイルは別の場所にコピーしておく

メモリダンプを確認するためのツールWinDgbをインストール&ダンプ参照

以下のページでデバッグツールをダウンロードできます。 https://docs.microsoft.com/ja-jp/windows-hardware/drivers/debugger/debugger-download-tools
こちらに記載されているWinDbgを使ってメモリダンプの内容から問題を確認します。

実際に使用したのは、Windows 10 SDKバージョンのWinDbgですが、新しいバージョンのものもあるようなので、今度新しいものを使用してみようかなと思います。

まず、メモリダンプをwindbgを起動して読み込みます。(私の使用しているマシンは64bitなのでX64版を起動)
試してみないとわからんですが、Arm版だろうがArm64版だろうがメモリダンプさえあればこの辺調査できるってこと見たいっすね。 windbg
windbg
windbg
!analyze -vクリックすると以下のように解析結果が出てきます。

10: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

WDF_VIOLATION (10d)
The Kernel-Mode Driver Framework was notified that Windows detected an error
in a framework-based driver. In general, the dump file will yield additional
information about the driver that caused this bug check.
Arguments:
Arg1: 0000000000000004, A NULL parameter was passed to a function that required a non-
	NULL value. Use the "ln" debugger command with the value of
	Parameter 3 as its argument to determine the function which
	requires a non-NULL parameter.
Arg2: 0000000000000000, Reserved.
Arg3: fffff80461c0e44e, The caller's address.
Arg4: ffff94011ba853c0, Reserved.

Debugging Details:
------------------

Unable to load image \SystemRoot\System32\drivers\GeneStor.sys, Win32 error 0n2

KEY_VALUES_STRING: 1

    Key  : Analysis.CPU.mSec
    Value: 3686

    Key  : Analysis.DebugAnalysisManager
    Value: Create

    Key  : Analysis.Elapsed.mSec
    Value: 6744

    Key  : Analysis.Init.CPU.mSec
    Value: 4343

    Key  : Analysis.Init.Elapsed.mSec
    Value: 141118

    Key  : Analysis.Memory.CommitPeak.Mb
    Value: 93

    Key  : WER.OS.Branch
    Value: vb_release

    Key  : WER.OS.Timestamp
    Value: 2019-12-06T14:06:00Z

    Key  : WER.OS.Version
    Value: 10.0.19041.1


BUGCHECK_CODE:  10d

BUGCHECK_P1: 4

BUGCHECK_P2: 0

BUGCHECK_P3: fffff80461c0e44e

BUGCHECK_P4: ffff94011ba853c0

BLACKBOXBSD: 1 (!blackboxbsd)


BLACKBOXNTFS: 1 (!blackboxntfs)


BLACKBOXPNP: 1 (!blackboxpnp)


BLACKBOXWINLOGON: 1

PROCESS_NAME:  System

STACK_TEXT:  
ffff878e`3b24c918 fffff804`4ff88920     : 00000000`0000010d 00000000`00000004 00000000`00000000 fffff804`61c0e44e : nt!KeBugCheckEx
ffff878e`3b24c920 fffff804`4ff889ac     : fffff804`61c0e44e ffff878e`3b24ca69 00000000`00000000 fffff804`5440e084 : Wdf01000!FxVerifierBugCheckWorker+0x24 [minkernel\wdf\framework\shared\object\fxverifierbugcheck.cpp @ 68] 
ffff878e`3b24c960 fffff804`4ff4d9cf     : 00000000`00000001 ffff878e`00000000 00000000`00000000 fffff804`00000000 : Wdf01000!FxVerifierNullBugCheck+0x44 [minkernel\wdf\framework\shared\object\fxverifierbugcheck.cpp @ 102] 
ffff878e`3b24c9a0 fffff804`61c0e44e     : 00000000`00000000 ffff9401`1c732e50 00000000`00000000 00000000`000000fc : Wdf01000!imp_WdfObjectGetTypedContextWorker+0x1b86f [minkernel\wdf\framework\shared\object\handleapi.cpp @ 656] 
ffff878e`3b24c9f0 fffff804`61c10bf7     : ffff940f`fe896801 ffff9401`1c732e00 ffff9401`1dbc92f0 ffff940f`fe896801 : GeneStor+0xe44e
ffff878e`3b24cad0 fffff804`54765ad3     : 00000000`00001000 00000000`00001000 00000000`54f25440 00000000`00000100 : GeneStor+0x10bf7
ffff878e`3b24cb10 fffff804`54765721     : ffff9401`1c732a30 ffff940f`fe896840 00000000`00000000 00000000`00000100 : nt!PopFxHandleDirectedPowerTransition+0x77
ffff878e`3b24cb40 fffff804`544b8515     : ffff9401`0d5a3040 fffff804`548ac2b0 ffff940f`fe896840 ffff9401`00000000 : nt!PopFxDirectedPowerTransitionWorker+0x11
ffff878e`3b24cb70 fffff804`54555855     : ffff9401`0d5a3040 00000000`00000080 ffff940f`fe8d8080 01ffffff`00000001 : nt!ExpWorkerThread+0x105
ffff878e`3b24cc10 fffff804`545fe8f8     : ffffa880`0a74c180 ffff9401`0d5a3040 fffff804`54555800 00000000`007bbd8a : nt!PspSystemThreadStartup+0x55
ffff878e`3b24cc60 00000000`00000000     : ffff878e`3b24d000 ffff878e`3b247000 00000000`00000000 00000000`00000000 : nt!KiStartSystemThread+0x28


SYMBOL_NAME:  GeneStor+e44e

MODULE_NAME: GeneStor

IMAGE_NAME:  GeneStor.sys

STACK_COMMAND:  .thread ; .cxr ; kb

BUCKET_ID_FUNC_OFFSET:  e44e

FAILURE_BUCKET_ID:  0x10D_4_GeneStor!unknown_function

OS_VERSION:  10.0.19041.1

BUILDLAB_STR:  vb_release

OSPLATFORM_TYPE:  x64

OSNAME:  Windows 10

FAILURE_ID_HASH:  {c80920d5-f4eb-2265-90ea-8bdb0f582f1a}

Followup:     MachineOwner
---------

C:\Windows\system32\drivers\GeneStor.sys これが読み込めなかったのでカーネルパニックでも起こしたようです。
これなんのドライバかな?と思ってデバイス一覧を見ていると AnkerのUSBドックを買ったらちゃんと動いてくれて感動で出しているAnkerのUSBドッキングステーションのSDカードリーダードライバであることが分かりました。
今回は特にこのドライバを使うことがないので一旦このドライバを無効化することに。

※これで問題解消できるかは経過を見ないといけないですが

最後に

ダメだった時はいったん初期化というのをよくやりますが、今回の場合はドライバ起因であったため、おそらく Windowsを再インストールしてもダメで、なんかの特定条件の時にこのドライバが読み込めないときが発生していたものと思われます。(作業中、Docに接続しても問題が発生しないので)
いわれなき初期化でしのいでしまうことも多いですが、初期化前にいったん原因なんだろう?と思って確認するのもありなのではないかなということでこの記事の最後とさせていただきます。


Share

comments powered by Disqus