ch 13. windows 관리 기구

50
ISLab Flash Team ISLab Flash Team Ch 13. Windows Ch 13. Windows 관관 관관 관관 관관

Upload: gale

Post on 17-Jan-2016

59 views

Category:

Documents


0 download

DESCRIPTION

Ch 13. Windows 관리 기구. Contents. WMI WMI Architecture 전통적인 방법의 Driver Event Logging Summary. 1. WMI. WMI. Windows Management Instrumentation WDM 이 제공 Management Data 수집 , 저장 , 보고 하는 표준화된 기능 Driver 의 Client 가 Device 의 설정을 변경 가능 CIM (Common Information Model) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Ch 13. Windows  관리 기구

ISLab Flash TeamISLab Flash Team

Ch 13. Windows Ch 13. Windows 관리 기구관리 기구

Page 2: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 2

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

ContentsContents

1. WMI

2. WMI Architecture

3. 전통적인 방법의 Driver Event Logging

4. Summary

Page 3: Ch 13. Windows  관리 기구

ISLab Flash TeamISLab Flash Team

1. 1. WMIWMI

Page 4: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 4

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

WMIWMI

• Windows Management Instrumentation– WDM 이 제공– Management Data 수집 , 저장 , 보고 하는 표준화된 기능

• Driver 의 Client 가 Device 의 설정을 변경 가능

• CIM (Common Information Model)– System 이 제공하는 Data 를 Client 가 Property, Method ,

Event 등으로 쉽게 사용하게 하는 Model– MOF 라는 새로운 언어는 정의

• RPC 나 COM 과 비슷

• WMI 는 CIM 을 기반으로 하고 있음

Page 5: Ch 13. Windows  관리 기구

ISLab Flash TeamISLab Flash Team

2. WMI Architecture2. WMI Architecture

Page 6: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 6

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

WMI Architecture(1)WMI Architecture(1)

• 5 Layer of WMI Architecture– WMI Data Source (Ex. Device Driver)

• Data Provider

– WMI Data 중앙 저장소• CIMOM 기반의 CIM Data 저장소를 구현

– WMI Provider (Ex. WDM WMI Provider)• Data Source 와 Data 저장소를 연결

– WMI Data Comsumer (Ex. Client)

– Protocol (Ex. COM)• Data 저장소를 Client 에게 제공

Page 7: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 7

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

WMI Architecture(2)WMI Architecture(2)

• WMI Provider 의 두가지 구성요소– Win32 DLL

• User Mode Client 간의 연결을 제공

– Kernel Mode Service • Driver 의 Code 에 응답하거나 호출

Page 8: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 8

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

WMI Architecture(3)WMI Architecture(3)

User Mode

Kernel Mode

WDM / WMI 호환 Driver

WDM / WMIWMILIB

CIM Object Manager (CIMOM)

WMI Provider for WDM

CIM-compliant store

다른 주소Event 통지Query Request

관리된 Application

Query Request

Event 통지 Application &Platform 관리

ActiveDirectory

Page 9: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 9

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

WMIWMI 를 지원하는 를 지원하는 WDM Driver WDM Driver 작성작성

• WMI Data 를 제공하기 위해서 Driver 에서 수행할 과정1. MOF 명세를 제공

• Driver 에 의해 제공되고 생성될 Data, Method, Event

2. DDK 에서 제공하는 mofcomp.exe 로 MOF Source 를 complie• Platform 독립적인 Binary File 생성 (.BMF)

3. Driver 의 Resource Section 내에 Compile 한 MOF Data 를 포함

4. IRP_MJ_SYSTEM_CONTROL dispatch Routine 작성• Driver 는 이 IRP 를 받으면 WMI Request 에 대한 세부사항을

IRP Minor Field 에 기술함

Page 10: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 10

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

WMIWMI 를 지원하는 를 지원하는 WDM Driver WDM Driver 작성작성

5. IoWmiRegistationControl 함수를 사용해 WMI Data 의 Provider 로 등록

6. IRP_MJ_SYSTEM_Control IRP 의 Minor SubCode 로 IRP_MN_REGINFO 를 처리하는 Code 작성

7. WMIREGISTER 실행 Code 를 처리하기 위해 MOF 기술자 내에 Data 와 Event Block 을 정의한 정보를 제공

8. WMILIB.h 안에 선언된 Helper Function 을 호출• WMIUPDATE 실행 Code 를 처리

Page 11: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 11

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

MOFMOF 의 문법의 문법

• RPC Interface 정의의 표준구조를 따름[ATTRIBUTES and QUALIFIERS]ENTITY TYPE and NAME{

[DATA ITEM QUALIFIERS] DATA TYPE and NAME;…

};

• 구조체는 구조체내에 중첩정의 될수 있음

• ENTITY Type 은 일반적인 Keyword 가 될수 있음– Class, string, boolean

• MOF 은 class name 을 기술하는 것으로 시작– WMI namespace 중 유일해야함

• Class 는 상속 가능

Page 12: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 12

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

WMI MOF WMI MOF 정의중 정의중 Class Class 권한 지정자권한 지정자

Class 권한 지정자 Contents

Dynamic MOF Block Data 가 기본 Class 의 Instance 하나당 Runtime 에 제공

Static MOF Block Data 가 WMI Database 의 일부분으로 포함

Provider 필수 . 이 Class 의 Provider 가 WMI 호환이라는 것을 지정

WMI 필수 . WMI class 를 지정

Description Class 의 Client 에게 사용가능한 문서 또는 주석

Guid Class 를 인식시키게 하는 128Bits 숫자

Locale Description 언어가 어느 지역의 언어인지를 나타내는 Language ID

WmiExpense Class 에 의해 수집되고 기술된 Data 를 위한 CPU Cycle 의 수집 비용

Page 13: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 13

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

WMI MOF WMI MOF 정의중 정의중 Data Item Data Item 권한 지정자권한 지정자

Data Item 권한 지정자 Contents

key 이 Data Item 은 유일하게 Class Instance 를 인식함

read WMI Client 가 Item 을 읽을수 있음

write WMI Client 가 Item 을 쓸 수 있음

BitMap 문자열 이름의 List

BitValues BitMap 에 의해 기술된 이름에 대응되는 Bit 위치

ValueMap Values 내에 열거된 값을 의미하는 문자열 이름의 List

WmiDataId(ItemId)

필수 . MOF Data Block 내의 Data Item 위치를 지정

… … …

Page 14: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 14

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

WMI MOF WMI MOF 정의중 정의중 Data TypeData Type

Data Type Contents sizeof

string Count 된 Unicode 문자열 12

boolean TRUE or FALSE 1

sint8 부호있는 8 Bits 정수 1

uint8 부호없는 8 Bits 정수 1

sint16 부호있는 16 Bits 정수 2

uint16 부호없는 16 Bits 정수 2

sint32 부호있는 32 Bits 정수 4

… … …

Page 15: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 15

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

Example Code(1)Example Code(1)

• InstanceName 과 Active 두개의 Item 은 필수– WMI 에 의해 관리 , Driver 자체에서 관리하는 Data 는

아니라고 고려함

[WMI, guid("12345678-1234-5678-9ABC-123456789ABC"),Dynamic, Provider("WMIProv"),WmiExpense(1),Locale("MS\\0x409"),Description("Example class")]

class w2kDriverBook_Missile {

// 필수 아이템 정의 - 드라이버에서 사용되지 않는다 .[key , read] string InstanceName;[read] boolean Active;

Page 16: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 16

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

Example Code(2)Example Code(2)

// 속성[read ,

WmiDataId(1),WmiScale(0),Description("Total Missile Launches")]uint32 TotalLaunches;

//siloStatus 배열 내의 저장소 개수[read ,

WmiDataId(2)]uint32 SiloCount;

// SiloStatus 배열[read ,

WmiDataId(3),WmiSizeIs("SiloCount")]uint8 SiloStatus[];

};

Page 17: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 17

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

MOF Source CompileMOF Source Compile

• system32 Folder 내에 mofcomp.EXE Utility 를 이용

• WDM 개발환경에서는 두개의 compile Switch 가 필요– -B:filename.bmf

• 해당 Filename 으로 compile 된 binary 파일 작성– -WMI filename2.MOF

• filename2.MOF 를 WMI 와 호환되도록 compile

• EX) mofcomp –B:Example.bmf –WMI Example.MOF

• Ex) MofResource MOFDATA Example.bmf– Driver 에 Resource file(.RC) 를 Project 에 포함– Driver 가 System Memory 에 Load 될시 , Resource section 이

RAM 에 자리잡고 Driver 에서 접근 가능하게 됨

Page 18: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 18

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

WMI IRP Request WMI IRP Request 처리처리

• Driver 자신이 WMI 의 일원이라는 것을 I/O Manager 에게 등록– IoWMIRegistrationControl Function 이용

• AddDecive Routine 중 WMIREG_ACTION_REGISTER 인자를 통해 WMI 에 등록함

• RemoveDevice Routine 중 WMIREG_ACTION_DEREGISTER action 인자를 주어 등록 해제해야함

• WMI 에 등록되면 Driver 는 IRP_MJ_SYSTEM_CONTROL IRP 에 대한 dispatch Routine 이 구현되어 있어야 함

Page 19: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 19

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

Class & InstanceClass & Instance

• class 는 단지 선언일뿐 어떠한 공간도 예약하지 않음

• DpWmiQueryReginfo Function 을 통해 Instance로 생성

• 대부분 한 class 에는 하나의 Instance 가 적당– 구지 여러 Instance 를 사용해야하면 Instance Index 가 필요

Page 20: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 20

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

WMILIBWMILIB

• WMI IRP Request 처리는 대부분 Kernel Mode 의 DLL, WMILIB 에서 함

• 핵심 Routine WmiSystemControl– WMILIB_CONTEXT Structure 를 입력으로 받음

• WMILIB_CONTEXT– control 들을 수행하는 Function Pointer 들의 List– 만약 지원하지 않는 Function 이 있다면 반드시 NULL 로

Setting

• WmiCompleteRequest Function– WMILIB_CONTEXT 의 각 Function 들의 완료 함수– DpWmiQueryReginfo 제외

Page 21: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 21

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

WmiSystemControlWmiSystemControl

NTSTATUS WmiSystemControl IRQL == PASSIVE LEVEL

Parameter Description

IN PWMILIB_CONTEXT WmiLibInfoDriver 에 의해 초기화되어 제공된

WMILIB_CONTEXT structure 의 Pointer

IN PDEVICE_OBJECT pDeviceObject Driver 의 Device Object

IN PIRP pIrp IRP Request Pointer

OUT PSYSCTL_IRP_DISPOSITION pIrpDisposition

• IrpProcessed• IrpNotCompleted• IrpNotWmi• IrpForward

Return value 성공 or 실패

Page 22: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 22

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

WMILIB_CONTEXT StructureWMILIB_CONTEXT Structure

WMILIB_CONTEXT Structure

Parameter Description

ULONG GuidCount Driver 에 등록된 MOF Data Block 의 개수

PWMIGUIDREGINFO GuidList GUID 와 Instance Count 배열

PWMI_QUERY_REGINFO QueryWmiRegInfo

Driver 에 의해 제공되는 Func Pointer

PWMI_SET_DATABLOCK SetWmiDataBlock

Driver 에 의해 제공되는 Func Pointer

… … …

Page 23: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 23

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

WmiCompleteRequest(1)WmiCompleteRequest(1)

• WMILIB_CONTEXT 내에 ENTRY 로 지정된 각 dispatch Function 들의 완료 Routine

• DpWmiQueryReginfo 제외– class 의 Instance 를 등록하는 Function 임

Page 24: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 24

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

WmiCompleteRequest(2)WmiCompleteRequest(2)

NTSTATUS WmiCompleteRequest IRQL <= DISPATCH_LEVEL

Parameter Description

IN PDEVICE_OBJECT pDeviceObject Device Driver Object Pointer

IN PIRP pIrp IRP Request Pointer

IN NTSTATUS Status Return 된 IRP 의 마지막 상태값

IN ULONG BufferUsedBuffer 가 요청에 비해 작으면 필요한만큼 Setting

Buffer 가 충분하면 실제 사용된 Buffer 크기 Setting

IN CCHAR PriorityBoostIoCompleteRequest 의 PriorityBoost 값과 동일 ,

고정값

Page 25: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 25

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

DpWmiQueryReginfoDpWmiQueryReginfo

• 목적– 하나 또는 그 이상의 Data Class 의 Instance 를 등록함

• 호출시기 및 호출자– IRP 의 Minor SubCode IRP_MN_REGINFO– Action Code 가 WMIREGISTER or WMIUPDATE 일때

• Action Code 란 WMI Structure 내에 있는 변수중 하나

– WMI 에 의해 호출

Page 26: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 26

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

DpWmiQueryDataBlockDpWmiQueryDataBlock

• 목적– Request 된 Instance Data 를 Return 하는 것

• 호출시기 및 호출자– IRP 의 Minor SubCode

IRP_MN_QUERY_DATA_BLOCK or

IRP_MN_QUERY_ALL_DATA

– WMILIB 에 의해 호출

Page 27: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 27

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

DpWmiSetDataBlockDpWmiSetDataBlock

• 목적– 특정 Instance Data 를 수정 하는 것

• 호출시기 및 호출자– IRP 의 Minor SubCode IRP_MN_CHANGE_SINGLE_INSTANCE

– WMILIB 에 의해 호출

• 오직 한 Instance 만이 한시점에 변경가능– 다중 Instance 일때에는 InstanceIndex 값을 0 으로 남겨둠

Page 28: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 28

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

DpWmiSetDataItemDpWmiSetDataItem

• 목적– Instance Data 내의 특정 Item Data 를 수정 하는 것

• 호출시기 및 호출자– IRP 의 Minor SubCode IRP_MN_CHANGE_SINGLE_ITEM

– WMILIB 에 의해 호출

Page 29: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 29

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

DpWmiExecuteMethodDpWmiExecuteMethod

• 목적– 특정 Method 의 실행을 dispatch 하는것

• 호출시기 및 호출자– IRP 의 Minor SubCode IRP_MN_EXECUTE_METHOD

– WMILIB 에 의해 호출

• WMI Client 로 부터 Driver Code 의 직접호출의 Interface 로 이용

Page 30: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 30

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

DpWmiFunctionControlDpWmiFunctionControl

• 목적– Data 수집을 시작 , 중지하거나 Event 생성을 시작 , 중지하는

것• 등록시에 WMIREG_FLAG_EXPENSIVE 로 설정된 중요한 DATA)

• 호출시기 및 호출자– IRP 의 Minor SubCode IRP_MN_ENABLE_COLLECTION,

IRP_MN_DISABLE_COLLECTION, IRP_MN_ENABLE_EVENTS, IRP_MN_DISABLE_EVENTS

– WMILIB 에 의해 호출

Page 31: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 31

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

WMI SummaryWMI Summary

• Driver 는 반드시 WMI 를 지원하게 할 필요는 없음

• 하지만 , 결국 WMI 를 추가하는 모습이 될것임

• WMI 를 지원하지 않아도 전통적인 방법이 있음– System Event Logging Method (Message 통지 )– Registry or Custom IOCTL (Data 수집 )

Page 32: Ch 13. Windows  관리 기구

ISLab Flash TeamISLab Flash Team

3. 3. 전통적인 방법의 전통적인 방법의 Driver Event LoggingDriver Event Logging

Page 33: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 33

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

Event LoggingEvent Logging

• 개발 과정하에서 제품을 사용할때 Software 의 동작을 Monitering 할수 있도록 도와주는 역할

• 사용 목적– SubSystem 에 Event 정보를 저장하기위한 통합 Framework

구축– System Administrator 에게 쉽고 일관적으로 Event

Message 를 보여주기 위함– Viewer Utility 에서 Event Message 를 각 언어로 제공

Page 34: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 34

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

Event Logging ArchitectureEvent Logging Architecture

DriverDriver

Error LogPacket

Error LogPacket

Message CodeMessage CodeEventLogFile

MessageFile

EventViewer

EventViewer

Logging Thread

① I/O Manager에게 Nonpaged

Memory 요청

② Driver 는 Packet 을Event 설명 정보로 채움

③ I/O Manager 는 Packet 을 Logging Thread 로 전송

④ Logging Thread 는 정기적으로 Event Log File 에

Packet 을 기록

⑤ Log File 로 부터Binary Packet 을

읽음

⑤ Display 되는 실제 Message Text 를 가짐

Message CodeMessage Code

Page 35: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 35

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

MessageMessage 로 작업하기로 작업하기 (1)(1)

• Driver 는 Event Log Entry 내에 실제 Message Text 를 가지지 않음– Disk 의 어딘가의 정보를 Code Number 를 통해 소유

• Code Number (32 bits)

31 ~ 3031 ~ 30 2929 28 ~ 1628 ~ 16 15 ~ 015 ~ 0

SeverityCustomer Facility Error Code

– Severity• Success(0) , Warning(2) , Error(3) , Information(1) Status

– Facility• 발생 지점

– Error Code

Page 36: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 36

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

MessageMessage 로 작업하기로 작업하기 (2)(2)

• Message Text 를 IOLOGMSG.dll 에서 공유

• Driver 는 Customer Message Text 를 제공가능– Code Number 에서 customer Bit 이용

• 절차1. Message Code 와 연관된 Message 정의 File 에 특정 Text

문자열을 작성2. 이 File 을 Message Compiler 로 Compile3. 생성한 Message Resource 를 Driver 와 결합

• Message Compiler 사용

4. Driver 를 Event Logging System 구성요소로 등록후 확인

Page 37: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 37

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

Message Definition File Message Definition File 작성작성

• Message Definition File– Driver 의 모든 Message 를 기술한 File

– Header Section• 실제 Message Definition 내에 사용될수 있는 값들을 위한

이름정의

– Message Section• Message 의 실제 Text 를 포함• Message Text 는 마지막 Keyword 다음에 시작• Message Text 는 몇 개의 Line 으로 구성 가능

– 끝은 한 개의 마침표 (.) 로 인식• Message Text 는 특수 기호를 사용

– ‘\b’ , ‘\t’ , ‘\r\n’

Page 38: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 38

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

Header Section KeywordHeader Section Keyword

Header Section Keyword

Keyword Description

MessageIdTypedef = DataType 모든 Message Code 에 적용되는 형변환

Severitynames = (name=number[:name])

Message Section 내에 4 개의 severity 값까지 사용

FacilityNames = (name=number[:name])

Message Section 내에 사용되는 Facility 이름

LanguageNames = (name=number[:filename])

Message Section 내에 사용되는 Language 이름

Page 39: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 39

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

Message Section KeywordMessage Section Keyword

Message Section Keyword

Keyword Description

MessageID = [number/ +number] 이 Message 에 할당된 16 Bit 값

Severity = Severity name Message 를 생성한 Facility

SymbolicName = SymbolicName 생성된 Header File 내의 Message Code 이름

Language = LanguageName Message 와 관계된 Language ID

Page 40: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 40

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

Example Header SectionExample Header Section

MessageIdTypedef = NTSTATUSSeverityNames = (

Success = 0x0:STATUS_SEVERITY_SUCCESSInformational = 0x1:STATUS_SEVERITY_INFORMATIONALWarning = 0x2:STATUS_SEVERITY_WARNINGError = 0x3:STATUS_SEVERITY_ERROR

)

FacilityNames = (System = 0x0RpcRuntime = 0x2:FACILITY_RPC_RUNTIMERpcStubs = 0x3:FACILITY_RPC_STUBSIo = 0x4:FACILITY_IO_ERROR_CODEMyDriver = 0x7:FACILITY_MY_ERROR_CODE

)

Page 41: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 41

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

Example Message SectionExample Message Section

MessageId=0x0001Facility=MyDriverSeverity=InformationalSymbolicName=MSG_LOGGING_ENABLEDLanguage=EnglishEvent logging enabled for MyDriver..MessageId=+1Facility=MyDriverSeverity=InformationalSymbolicName=MSG_DRIVER_STARTINGLanguage=EnglishMyDriver has successfully initialized..

Page 42: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 42

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

Message Definition File Compiling(1)Message Definition File Compiling(1)MC [-?cdosvw] [-herx argument] [-uU] filename.MC

Parameter Description

-c 모든 Message Code 안에 Customer Bit 를 설정

-d Header 안에 Facility 와 severity Code 에 십진수를 사용

-o OLE2 Header File 을 생성

-s Message 각각의 처음 Line 에 Symbolic Name 을 삽입

-v 다양한 출력

-h 경로명 Header File 이 생성되는 위치 ( 기본은 현재 Directory)

-e 확장자 Header File 의 확장자 (1~3 문자 )

-r 경로명 RC 와 Binary Message File 이 생성되는 위치

-x 경로명 Debug File 이 생성되는 위치

-u 입력 File 이 Unicode 임

-U Binary 안의 Message Text

filename Compile 되는 Message Definition File Name

Page 43: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 43

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

Message Definition File Compiling(2)Message Definition File Compiling(2)

• Compile 후 생성되는 Files– filename.RC

• Message Definition File 내에서 사용된 모든 언어를 인식하는 Resource Control Script 임

– filename.H• MC 입력 File 안의 모든 Message Code Number 를 위한

#define 구문을 포함하는 File

– MSGnnnnn.BIN• 한가지 언어의 Message 를 위한 모든 Text 를 담고 있음• Message Definition File 내에 각 언어별로 개별적인 File 을 생성

• MC Utility 로 Compile 한 출력 File 은 Driver 실행 File 자체에 포함됨

Page 44: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 44

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

DriverDriver 를 를 Event SourceEvent Source 로 등록로 등록

• Driver 를 Event Source 로 등록하기 위해선 다음경로변경– HKEY_LOCAL_MACHINE\System\CurrentControlSet\

Services\EventLog\System

1. Driver 의 실행 File 이름을 REG_MULTY_SZ type Source값에 추가 (.SYS 확장자 제외 )

2. Driver 로 같은 이름의 Key Value 추가3. 새로운 Key Value 로 REG_EXPAND_SZ type 의

EventMessageFile Value 생성• Message File 전체 경로의 이름을 ‘ ;’ 로 구분해서 반드시 포함

4. 동일한 Key Value 로 REG_DWORD type 의 TypesSupported Value 생성• 0x7 Value 는 All Message type 이 생성을 의미

Page 45: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 45

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

Error Log Packet Error Log Packet 할당할당 (1)(1)

• Event 를 처리하지 못하는 경우를 대비해 반드시 준비– 3 개의 Section 으로 구성

• Standard Header• Driver 에서 정의된 ULONGs 배열 (DumpData)• 하나 또는 그 이상의 NULL 종료 Unicode 삽입 문자열

• Error Log Packet 을 할당하기 전에 Packet 의 크기를 결정– ERROR_LOG_MAXIMUM_SIZE 를 넘으면 안됨

• IoAllocateErrorLogEntry Function 을 사용

Page 46: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 46

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

Error Log Packet Error Log Packet 할당할당 (2)(2)

IO_ERROR_LOG_PACKETIO_ERROR_LOG_PACKETIO_ERROR_LOG_PACKETIO_ERROR_LOG_PACKET

ErrorCodeErrorCode

DumpDataSizeDumpDataSize

NumberOfStringsNumberOfStrings

StringOffsetStringOffset

……

DumpData[]DumpData[]

……

“Second Unicode insertion string \0”“Second Unicode insertion string \0”

“Second Unicode insertion string \0”“Second Unicode insertion string \0”

StringOffset

Error Log Packet 의 LayOut

Page 47: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 47

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

Logging Error(1)Logging Error(1)

• Packet 이 할당되면 각 Field 를 채움

• Packet 을 System Logging Thread 로 전송– IoWriteErrorLogEntry Function 사용– 위 Func 호출후엔 더 이상 Packet 은 Driver 의 소유가 아님– Driver 가 Packet 을 건드리면 안됨

• Packet 의 할당은 DISPATCH_LEVEL IRQL 에서 사용

• IO_ERROR_LOG_PACKET structure 를 사용

Page 48: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 48

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

Logging Error(2)Logging Error(2)IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET

Parameter Description

UCHAR MajorFuctionCode 현재 IRP 의 IRP_MJ_XXX Code

UCHAR RetryCount Retry 횟수

USHORT DumpDataSize Driver 전용 Data Byte

USHORT NumberOfStrings 삽입 문자열의 개수

USHORT StringOffset 처음 삽입 문자열의 Byte Offset

USHORT EventCategory Driver Event File 의 Event Category

NTSTATUS ErrorCode IO_ERR_XXX

ULONG UniqueErrorValue Driver 내에 Error 가 발생한 곳 지정

NTSTATUS FinalStatus IRP 의 STATUS_XXX 값

ULONG SequenceNumber 현재 IRP 를 위해 Driver 에서 할당된 숫자

… … …

ULONG DumpData[1] DumpDataSize 가 0 인 경우 , Driver 전용 Data

Page 49: Ch 13. Windows  관리 기구

ISLab Flash TeamISLab Flash Team

4. Summary4. Summary

Page 50: Ch 13. Windows  관리 기구

Ch 13. Windows 관리 기구 50

ISLab Flash TeamISLab Flash Team

Made By Hackereyes

SummarySummary

• WMI 와 Event Logging 을 Driver 와 통합시키는 것은 매우 지루한 일임

• 하지만 , 제품 Driver 에 System Reporting Mechanism 은 필수로 제공되어야 함

• Event 를 통해 Error 를 추적하는 기능은 문제점을 찾아내는데 필수적인 기능임