Ch 6. Initialization and Cleanup Routines

Slides:



Advertisements
Similar presentations
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Advertisements

ISLab Flash Team Ch 9. Hardware Initialization. ISLab Flash Team Made By Povolon Ch 6. 초기화 및 정리 루틴 2 Contents 1.Plug and Play Architecture 2.The Role.
CH1 개발 효율이 높은 프로그램 구조
L A N DCT Serise W i r e l s Description
서울시 ‘찾아가는 동 주민센터’ 사업 시행 이후 지역사회의 변화
[6] 자주 묻는 연말정산 Q & A.
DB2 Information Management DB2 UDB CLP Command Summary.
Project #2-2. Pintos User Program
Linux/UNIX Programming APUE (The Environment of a UNIX Process)
1. 개발 시스템 개요.
5.1 모수 (parameter) vs 통계량 (statistics)
C++ Espresso 제3장 배열과 포인터.
Hide Process
프로그램 제어 분기(branch)와 점프(jump) 명령어 PC의 값의 변경 순차적인 프로그램의 진행순서가
Windows XP 에서의 장치관리자 : Device Driver에 관하여
기본 컴퓨터 프로그래밍 Lecture #6.
제6장 FUSING.
크로스 컴파일 환경 구축.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Chapter 11 – 예외 처리 Outline 11.1 설계 쟁점 11.2 Pl/I의 예외 처리 11.3 Ada의 예외 처리
10장 예외 처리 프로그래밍 언어론 10.6 Pascal과 C의 에러 처리 10.1 설계 주제 10.2 PL/I의 예외 처리
TUXEDO 프로그래밍 가이드.
윈도우 디바이스 드라이버 청강문화산업대 컴퓨터정보과 이 봉 석 교수.
HTML CSS 자바스크립트 무작정 따라하기
임베디드 하드웨어 Lecture #6.
FUSING.
PCI가 어렵울 거라는 생각을 지금부터 버리도록 합시다.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
12. 데이터베이스 설계.
제 6 장 프로세스 동기화 (Process Synchronization)
임베디드 운영체제 (리눅스 중심) Lecture #2.
Ch 14. System Thread.
Setup Oracle VirtualBox For Penetration Testing 명지대학교 홍석원
임베디드 시스템 개론 3주차 Embedded System..
Embedded System Porting (2)
Embeded 기초 다지기 2015년 10월 26일 intern Sally
Computer Architecture
Ch 13. Windows 관리 기구.
운영체제 (Operating Systems)
하둡 기반 빅데이터 처리 방법.
Chapter 10. 파일 시스템 인터페이스(File System Interface)
파일 시스템 인터페이스(File System Interface)
제2장 프로세스 이나현.
Cache Manager Yonghyun Kim Microsoft MVP Dev 5 team leader, ESTsoft
Sensor EDA 소개서
Boot PROM.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
제 6 장 프로세스 동기화 (Process Synchronization)
Swap 추가, fsck.
User Datagram Protocol (UDP)
7주차 FPGA 보드 사용법.
작성일 참고서적 – Programing Game AI by Example
객체지향 패러다임에서의 코드 재사용을 위한 응집도 레벨 식별 모범 사례
Signature, Strong Typing
Signature, Strong Typing
세션 (Session) Yang-Sae Moon Department of Computer Science
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
8. 리눅스의 내부 군자삼락 [君子三樂] 청출어람이청어람 [ 靑出於藍而靑於藍 ] Why Linux ?
Signature, Strong Typing
제16강 입출력시스템 1.
Chapter 17 BOOTP and DHCP.
국어지도 유아교육과 권수연 김아람 중등특수교육과 박수진 양한솔
HDD Error시 교체 -> Windows 재 설치 Check to data base Error
房思琪的初恋乐园 ‘팡쓰치’로 보는 문학의 힘 정은비.
임베디드 하드웨어 Lecture #6.
Virtual Machine Management
7주차 실습 FPGA 보드 사용법.
Lecture 7 7-Segment LED controller using u-controller
임베디드 프로그래밍 Lecture #
가상 기억장치 (Virtual Memory)
Presentation transcript:

Ch 6. Initialization and Cleanup Routines

Contents Writing a DriverEntry Routine Code Example : Driver Initialization Writing Reinitialize Routine Writing an Unload Routine Code Example : Driver Unload Writing Shutdown Routine Testing the driver Summary Ch 6. 초기화 및 정리 루틴

1. Writing a DriverEntry Routine

DriverEntry Routine 모든 Windows 2000의 커널 모드 드라이버나 WDM드라이버는 그 목적에 관계없이 DriverEntry Routine을 가짐. 다양한 데이터 구조체를 초기화 다른 모든 드라이버의 구성 요소들을 위한 환경을 준비 Ch 6. 초기화 및 정리 루틴

DriverEntry Routine(1) Function Prototype for DriverEntry NTSTATUS DriverEntry IRQL == PASSIVE LEVEL Parameter Description IN PDRIVER_OBJECT pDriverObject Address of driver object for this driver IN PUNICODE_STRING pRegisterPath Registry path string for this driver’s key Return value STATUS_SUCCESS STATUS_XXX – some error code Ch 6. 초기화 및 정리 루틴

DriverEntry Routine(2) 드라이버에서 제어할 하드웨어를 획득 Driver Object의 다른 Routine들의 시작점 지정 Controller 생성 , Controller Extension 초기화 (IoCreateController) Device Object 생성, Device Extension 초기화 (IoCreateDevice) Device Object를 Win32시스템에서 보이도록 함 (IoCreateSymbolicLink) Interrupt Object와 연결(DPC Object생성) 4~6의 과정을 다른 device에 대해 반복 수행 Return STATUS_SUCCESS to I/O manager Ch 6. 초기화 및 정리 루틴

Announcing DriverEntry Point Function pointer in Driver Object 명시적인 slot & name을 가지는 Function MajorFunction배열 상에 나열된 IRP Dispatch function Ex) Function pointer initialize pDO -> DriverStartIO = StartIO; pDO -> DrtverUnload = Unload; // // 다른 주요 처리함수 테이블에 대한 초기화 pDO -> MajorFunction[ IRP_MJ_CREATE ] = DispatchCreate; pDO -> MajorFunction[ IRP_MJ_CLOSE ] = DispatchClose; Ch 6. 초기화 및 정리 루틴

Creating Device Object IoCreateDevice Driver Object에 의해 관리되는 Device List에 새로운 Device Object를 연결 AddDevice Routine에서 호출하는 경우 WDM 을 지원하는 Device DriverEntry Routine의 1,3~6과정을 제외함 (하드웨어 획득 및 컨트롤러 디바이스 객체의 생성) Dispatch Routine에서 IoCreateDevice 가 불리는 경우 Device의 Flags Field중 DO_DEVICE_INITIALIZING bit을 reset Device의 추가 or Reinitializing Ch 6. 초기화 및 정리 루틴

Creating Device Object(1) Function Prototype for IoCreateDevice NTSTATUS IoCreateDevice IRQL == PASSIVE LEVEL Parameter Description IN PDRIVER_OBJECT pDriverObject Pointer to driver object IN ULONG DeviceExtensionSize DEVICE_EXTENSION의 요구되는 크기 IN PUNICODE_STRING pDeviceName 내부 디바이스의 이름(internal name) IN DEVICE_TYPE DeviceType FILE_DEVICE_XXX (NTDDK.h 참고) IN ULONG DeviceCharacteristics 대용량 저장 디바이스의 특성 FILE_REMOVABLE_MEDIA FILE_READ_ONLY_DEVICE Etc. IN BOOLEAN Exclusive Device가 공유가능 하지 않을 경우 True OUT PDEVICE_OBJECT *pDeviceObject Device object에 대한 pointer를 담는 변수 Return value STATUS_SUCCESS STATUS_XXX – some error code Ch 6. 초기화 및 정리 루틴

Buffering Strategy Device에서 사용할 Buffering strategy 를 I/O Manager에게 통보 Device Flags Field DO_BUFFER_I/O DO_DIRECT_I/O Neither bit - 두가지 모두를 사용 Ch 6. 초기화 및 정리 루틴

Device Name Name Directory Tree Object Manager Root Device ?? Xx0 XX1 Symbolic Link Ex) 내부 “\\Device\\Minimal0” FloppyDisk0 , FloppyDisk1 Ex) Symbolic Link Name “\\??\\MINIMAL1” LPT1, LPT2 , A: ~ Z: IoCreateSymbolicLink ( Device Name , UNICODE_STRING Symbolic Link Name ) Ch 6. 초기화 및 정리 루틴

2. Code Example : Driver Initialization

Minimal driver Device Name : MINIMAL0 Symbolic Link Name : MINI DriverEntry 다른 함수의 진입점을 지정(Announcing) Logical Device 생성 NTSTATUS DriverEntry ( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath ) { … NTSTATUS status; … pDriverObject->DriverUnload = DriverUnload; … status = CreateDevice ( pDriverObject, … ); return status; } Ch 6. 초기화 및 정리 루틴

Minimal driver (1) CreateDevice Device Name initialization Device Object 생성, Device Extension size 지정 Device Extension initialization Symbolic Link Name initialization & Link NTSTATUS CreateDevice ( IN PDRIVER_OBJECT pDriverObject, IN ULONG ulDeviceNumber) { … NTSTATUS status; PDEVICE_OBJECT pDevObj; PDEVICE_EXTENSION pDevExt; … CUString devName(“\\Device\\MINIMAL”); devName += CUString(ulDeviceNumber); … Ch 6. 초기화 및 정리 루틴

Minimal driver (2) status = IoCreateDevice ( pDriverObject, … ); pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension; pDevExt->pDevice = pDevObj; // Back pointer pDevExt->DeviceNumber = ulDeviceNumber; pDevExt->ustrDeviceName = devName; CUString SymLinkName(“\\??\\MINI”); SymLinkName += CUString(ulDeviceNumber+1); pDevExt->ustrSymLinkName = SymLinkName; status = IoCreateSymbolicLink( … ); … //실패할 경우 Device Object를 반드시 삭제 … return STATUS_SUCCESS; } Ch 6. 초기화 및 정리 루틴

3. Writing Reinitialize Routines

Function Prototype for Reinitialize Reinitialize Routine IoRegisterDriverReinitialize 시스템의 Bootstrap이 충분히 진행되지 않아서 초기화 과정이 제대로 끝날수 없는경우 I/O Manage가 Bootstrap이 끝나면 Reinitialize routine 호출 Booting시에 자동으로 load되는 드라이버에 한함 재귀호출로 초기화의 신뢰성 보장 Function Prototype for Reinitialize VOID Reinitialize IRQL == PASSIVE LEVEL Parameter Description IN PDRIVER_OBJECT pDriverObject Pointer of driver object IN PVOID Context 등록시 지정한 Context Block In ULONG Count Reinitialize call에 대한 카운터(0) Return value (void) Ch 6. 초기화 및 정리 루틴

4. Writing an Unload Routine

Function Prototype for Unload Unload Routine 드라이버를 Unload가능 하게 하기 위해 Unload routine이 반드시 필요 I/O Manager는 수동, 자동으로 호출(Unload 직전) Function Prototype for Unload VOID Unload IRQL == PASSIVE LEVEL Parameter Description IN PDRIVER_OBJECT pDriverObject Pointer of driver object Return value (void) Ch 6. 초기화 및 정리 루틴

Unload Routine(1) Unload Routine 의 동작 WDM의 경우 RemoveDevice에서 수행 다음 load시에 상태 복구를 위해 Device의 상태정보를 registry에 저장 Interrupt disable, disconnect Interrupt object Hardware 해제 Remove Symbolic Link Name from Win32 namespace IoDeleteDevice : Device Object 삭제 다중 Controller를 사용한다면 4~5과정 반복, IoDeleteController : Controller Object 삭제 4~6의 과정을 다른 Device & Controller에 대해 반복 수행 Deallocate pool memory WDM의 경우 RemoveDevice에서 수행 Ch 6. 초기화 및 정리 루틴

5. Code Example : Driver Unload

Unload Routine(2) Driver Entry Routine의 동작을 반대로 수행 Symbolic Link Name 과 Device Object를 삭제 VOID DriverUnload ( IN PDRIVER_OBJECT pDriverObject ) { PDEVICE_OBJECT pNextObj; … pNextobj = pDriverObject->DeviceObject; while ( pNextObj != NULL ) { PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION) pNextObj->DeviceExtension; UNICODE_STRING pLinkName = pDevExt->ustrSymLinkName; IoDeleteSymbolicLink( &pLinkName ); pNextObj = pNextObj -> NextDevice; IoDeleteDevice ( pDevExt->pDevice ); } //IoReportResourceUsage } Ch 6. 초기화 및 정리 루틴

6. Writing Shutdown Routines

Function Prototype for Shutdown Shutdown Routine OS의 종료시 Driver에서 해야 할 해제과정 있다면 제공 Shutdown시에는 Unload routine이 호출되지 않음 Device를 동작하지 않도록 함 Device의 일부 정보를 저장 OS가 종료됨과 동시에 자원은 해제됨 Function Prototype for Shutdown NTSTATUS Shutdown IRQL == PASSIVE LEVEL Parameter Description IN PDRIVER_OBJECT pDriverObject Pointer of driver object IN PIRP pirp Shutdown IRP에 대한 pointer Return value STATUS_SUCCESS STATUS_XXX Ch 6. 초기화 및 정리 루틴

Shutdown Routine(1) 별도의 I/O요구 MajorFunction 코드 배열의내부요소에 지정 IoRegisterShutdownNotification : Shutdown 통지 NTSTATUS DriverEntry ( IN PDRIVER_OBJECT pDriverObject , IN PUNICODE_STRING pRegistryPath) { … pDriverObject->MajorFunction [ IRP_MJ_SHUTDOWN ] = Shutdown; IoCreateDevice( pDriverObject , … , pDeviceObject); IoRegisterShutdownNotification ( pDriverObject ); } Ch 6. 초기화 및 정리 루틴

7. Testing the Driver

Test 성공적인 Compile , Link 시스템 충돌이 없이 load & Unload 수행 Device Object 와 Win32 Symbolic Link 생성 Unload시 자원 해제 Ch 6. 초기화 및 정리 루틴

Tool 사용 예제 소스 코드 Minimal.dsw의 컴파일 및 링크 생성된 Minimal.sys를 \winnt\system32\drivers에 복사 Regedit로 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service에 드라이버 이름( ex – Minimal )로 키생성 드라이버내에 서브키생성 ErrorControl=1(DWORD),Start=3(DWORD),Type=1(DWORD) 또는 Minimal.reg를 실행함 DisplayName : 컴퓨터 관리 창에서 보이는 이름 Ch 6. 초기화 및 정리 루틴

Test Ch 6. 초기화 및 정리 루틴

Test Ch 6. 초기화 및 정리 루틴

Test Ch 6. 초기화 및 정리 루틴

Test Ch 6. 초기화 및 정리 루틴

Summary

Summary Windows 2000의 Device Driver 초기 버전의 구현 드라이버의 빌드 , 설치 커널 모드 드라이버의 기본 구조체 Ch 6. 초기화 및 정리 루틴