Soft Ware/Windows Driver

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

달려가보자 2011. 11. 16. 01:13
 -  SIMPLEAddDevice 함수 - 


- 디바이스 드라이버 모듈 하나는 반드시 하나의 Driver_Object만 가질수 있다.


- SIMPLE_AddDevice()는 Device_Object를 physicalDeviceObject가 가르키고 있는 상위 드라이버가 만들어 놓은 물리층인 디바이스 스택에 포함


- Device_Object는 FDO, PDO 또는 FiDO같은 스택층을 묘사하는 구도체


- IoCreateDevice() 는 Device_Object를 만들고 이는 메모리 상에 위치함


- DeviceObject안에 Device_Extension이라는 포인터 변수가 있고 이 Device_Extension이 가리키는 다른 메모리 공간을 Device_Extension이라고 부른다.


- DeviceExtension 의 메모리를 이용하여 개발자는 주변장치를 위한 정보등, 이장치가 어떤장치이며 어떤 입출력 주소를 사용해야 하는지등의 장지 종속적인 정보를 보관했다가 사용


- IoAttachDeviceToDeviceStack() 의 첫번째 인자값은 SIMPLE 드라이버가 앞에 만들었던 Device_Object를 넣고 
  두번째 인자값은 SIMPLE_AddDevice()함수가 호출 될때 전달된 두번째 파라미터 physicalDeviceObject

- 디바이스 스택 <--- SIMPLE 드라이버가 생성한 Device_Object를 넣는다.

  이유는 그래야 온전한 역할을 윈도우에게서 부여 받을 수있다.


- 반환된 값은 DeviceExtension 메모리내의 NextLayerDeviceObject변수에 보관


  이유는 나중에 드라이버가 명령을 다룰때 사용되는 중요한 의미가 있다


- DeviceObject내의 플래그 값을 변경하는 이유는  SIMPLE 디바이스 드라이버가 자신의 Device_Object를 디바이스 스택에 포함한 이후에 다른 드라이버들의 Device_Object가 현재 SIMPLE 드라이버의 Device_Object가 포함된 디바이스 스택에 포함되는것을 허용한다는 의미