ch 13. windows 관리 기구
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 PresentationTRANSCRIPT
ISLab Flash TeamISLab Flash Team
Ch 13. Windows 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
ISLab Flash TeamISLab Flash Team
1. 1. WMIWMI
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 을 기반으로 하고 있음
ISLab Flash TeamISLab Flash Team
2. WMI Architecture2. WMI Architecture
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 에게 제공
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 에 응답하거나 호출
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
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 에 기술함
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 를 처리
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 는 상속 가능
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 의 수집 비용
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 위치를 지정
… … …
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
… … …
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;
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[];
};
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 에서 접근 가능하게 됨
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 이 구현되어 있어야 함
Ch 13. Windows 관리 기구 19
ISLab Flash TeamISLab Flash Team
Made By Hackereyes
Class & InstanceClass & Instance
• class 는 단지 선언일뿐 어떠한 공간도 예약하지 않음
• DpWmiQueryReginfo Function 을 통해 Instance로 생성
• 대부분 한 class 에는 하나의 Instance 가 적당– 구지 여러 Instance 를 사용해야하면 Instance Index 가 필요
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 제외
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 실패
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
… … …
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 임
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 값과 동일 ,
고정값
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 에 의해 호출
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 에 의해 호출
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 으로 남겨둠
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 에 의해 호출
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 로 이용
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 에 의해 호출
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 수집 )
ISLab Flash TeamISLab Flash Team
3. 3. 전통적인 방법의 전통적인 방법의 Driver Event LoggingDriver Event Logging
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 를 각 언어로 제공
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
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
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 구성요소로 등록후 확인
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’
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 이름
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
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
)
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..
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
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 자체에 포함됨
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 이 생성을 의미
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 을 사용
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
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 를 사용
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
ISLab Flash TeamISLab Flash Team
4. Summary4. Summary
Ch 13. Windows 관리 기구 50
ISLab Flash TeamISLab Flash Team
Made By Hackereyes
SummarySummary
• WMI 와 Event Logging 을 Driver 와 통합시키는 것은 매우 지루한 일임
• 하지만 , 제품 Driver 에 System Reporting Mechanism 은 필수로 제공되어야 함
• Event 를 통해 Error 를 추적하는 기능은 문제점을 찾아내는데 필수적인 기능임