Soft Ware/Windows Driver

윈도우 디바이스 드라이버 & Simple

달려가보자 2011. 11. 16. 01:14
 - SIMPLE_PnpDispatch() - 

 - 이 함수는 윈도상의 pnp 관리자 모듈이 SIMPLE 드라이버에게 pnp 사건이 발생 될때마다 이를 통지하는 역할로 사용



- pnp 관리자 : 사용자 모드 컴포넌트의 도움을 받아 디바이스 의 드라이버를 식별



- 여기서 인자값 DeviceObject는 이전에 SIMPLE_AddDevice함수에서 SIMPLE 드라이버가 만들어서 디바이스 스택에 올렸던 바로 그 Device_Object가 여기에 해당



- IRP는 내부적으로 자료구조 스택과 같은 형태의 메모리를 가진다.



- pStack 은 현재 스택의 Top 포인터가 가르키는 메모리 주소를 가져와서 보관



- IoGetCurrenIrpStackLocation() 함수는 IRP 내의 스택 메모리를 찾아서 현재 TOP 포인터를 구해서 반환, 이곳에는 SIMPLE 드라이버가 처리해야 하는 구체적인 명령어와 파라미터가 보관



- pStack->MinorFunction 는 pnp 관리자가 보내는 IRP 이다. 여기에는 구체적인 PnP 명령어의 의미가 담겨져 있다.



- IoDetachDevice()는 현존하는 디바이스 스택에서 SIMPLE 드라이버가 사용하는 DEVICE_Object를 떼어내버리는 역할을 수행



- IoDeleteDevice()는 SIMPLE 드라이버가 생성했던 Device_Object를 메모리에서 제거하도록 요청하는 함수



- IoCallDriver()는 IRP 명령어를 다른 드라이버에 보내는 역할을 수행, 여기서 다음 드라이버는 NextLayerDeviceObject라는 이름의 Device_Object만 있으면 된다.