본문 바로가기

Windows

How to capture memory dump using task scheduler based on the specific eventID

 

Windows나 Linux나 OS 측면에서 특정 문제 증상에 대한 내용을 파악할 수 있는 모든 로그를 남길 수가 없는 것이 현실입니다.

때로는 Crash Dump나 Live Debugging을 통해 보다 자세한 내용을 분석해야 할 수 있습니다.

 

Windows의 경우에는 특정 Event가 로깅되었을 때, 해당 Event의 ID 값을 이용하여 Crash Dump를 생성할 수 있는 방법이 있습니다.

작업 스케줄러를 이용하는 방법으로 Event ID를 기반으로 우리가 원하는 실행 파일을 실행시킬 수 있습니다.

이와 관련한 내용을 살펴보겠습니다.

(본 예제에서는 아래 Event Log를 기반으로 작성하였습니다.)

Log Name:      System 
Source:        storahci 
Date:          6/19/2013 4:36:34 PM 
Event ID:      129 
Task Category: None 
Level:         Warning 
Keywords:      Classic 
User:          N/A 
Computer:      VS3.opsmgr.net 
Description: 
Reset to device, \Device\RaidPort0, was issued.

 

1. Notmyfault 도구 실행을 위한 Batch 파일 생성

1-1. notmyfault 도구를 다운로드 후 문제 발생 시스템으로 복사 및 압축 해제(c:\temp로 가정)
https://learn.microsoft.com/en-us/sysinternals/downloads/notmyfault

1-2. notepad를 열고 다음 명령어로 확장자 bat 파일 생성(본 예제에서는 c:\temp\crash.bat)
c:\temp\notmyfaultc64.exe /crash 0x01

 

2. 작업 스케줄러에 신규 작업 생성

2-1. 시작 > 실행 > taskschd.msc로 작업 스케줄러 실행

 

2-2. Create Basic Task

 

2-3. Task 명 지정

 

2-4. 특정 이벤트 발생 시, 필요하므로 “When a specific event is logged” 선택

 

2-5. 문제가 발생할 때 System Event Log EventID 129가 남기 때문에 아래와 같이 Event 설정

 

2-6. Batch 파일을 등록하기 위해서 “Start a program” 선택

 

2-7. 1번 단계에서 생성한 crash.bat 파일 지정

 

2-8. 작업 등록

 

3. 테스트

명령 프롬프트를 관리자 권한으로 실행하고 다음 명령어 실행 시 BlueScreen 발생 여부 확인

C:\> eventcreate /T INFORMATION /ID 129 /L SYSTEM /D “test129”

 

위와 같이 테스트를 하면, System Event Log Event ID 129 Event가 생성되면서 작업 스케줄러가 Trigger 되고 결국 crash.bat 파일 내에 기재된 notmyfault 도구가 실행되면서 Blue Screen이 발생하게 됩니다.

 

수집된 C:\Windows\Memory.dmp 파일을 열어보면 다음과 같이 정상적으로 Process 정보 조회가 가능합니다.

3: kd> !process 0 0 
**** NT ACTIVE PROCESS DUMP ****
PROCESS ffffbf0dab87a340
    SessionId: none  Cid: 0004    Peb: 00000000  ParentCid: 0000
    DirBase: 001ad000  ObjectTable: ffff8e80ff003d40  HandleCount: 2386.
    Image: System

PROCESS ffffbf0dab876080
    SessionId: none  Cid: 0068    Peb: 00000000  ParentCid: 0004
    DirBase: 034c5000  ObjectTable: ffff8e80ff00d300  HandleCount:   0.
    Image: Registry

PROCESS ffffbf0dab924080
    SessionId: none  Cid: 0128    Peb: a4914b8000  ParentCid: 0004
    DirBase: 21efdb000  ObjectTable: ffff8e80ff175840  HandleCount:  56.
    Image: smss.exe

<snippet>

 

이제 실제로 System Event Log에 Event ID 129가 기록되었을 때 수집된 Windows Memory Dump를 이용하여, 분석이 필요합니다.