구리의 창고

IoCreateDevice() 본문

Window Driver

IoCreateDevice()

구리z 2010. 2. 17. 18:22
AddDevice 가 호출되면 PDO를 이용해 FDO를 생성한다.

IoCreateDevice()의 원형이다.

NTSTATUS 
  IoCreateDevice(
    IN PDRIVER_OBJECT  DriverObject,
    IN ULONG  DeviceExtensionSize,
    IN PUNICODE_STRING  DeviceName  OPTIONAL,
    IN DEVICE_TYPE  DeviceType,
    IN ULONG  DeviceCharacteristics,
    IN BOOLEAN  Exclusive,
    OUT PDEVICE_OBJECT  *DeviceObject
    );

인자들을 설명해보면.

1. DriverObject : AddDevice 인자로 받은 DriverObject를 그대로 넣어준다.
2. DeviceExtensionSize : DEVICE_EXTENSION의 크기를 넣어준다. sizeof(DEVICE_EXTENSION)
3. DeviceName : Device 이름이며 유니코드 형식을 지원한다. NULL 이면 이름을 제공하지 않겠다는 것이다.
4. DeviceType : 보통 드라이버를 공부하거나 개발 할 때 FILE_DEVICE_UNKNOWN 으로 놓는다. 
5. DeviceCharacteristics : 디바이스 속성을 결정한다. 해당사항이 없으면 0으로 설정한다.
6. Exclusive : FALSE (OEM 입출력인 경우에는 TRUE로 명시한다.)
7. *DeivceObject : 이 함수를 호출하기전에 선언한 fdo address를 넘겨준다.


*이름 생성과 관련된 예제
=> 3번과 5번 파라메터로 fdo의 이름을 생성 할 수 있는데 아래와 같이 3가지 경우로 나누어진다.

IoCreateDevice(pdo, sizeof(DEVICE_EXTENSION), NULL, FILE_DEVICE_UNKNOWN, 0, FALSE, fdo)
=> fdo는 이름을 가지지 않는다.

IoCreateDevice(pdo, sizeof(DEVICE_EXTENSION), &name, FILE_DEVICE_UNKNOWN, 0, FALSE, fdo)
=> fdo는 이름을 가지며 개발자가 알 수 있다.

IoCreateDevice(pdo, sizeof(DEVICE_EXTENSION), NULL, FILE_DEVICE_UNKNOWN, FILE_AUTOGENERATED_DEVICE_NAME, FALSE, fdo)
=> fdo는 이름을 가지며 개발자가 알 수 없다.



참고 : IT EXPERT 윈도우 디바이스 드라이버 (한빛미디어)

'Window Driver' 카테고리의 다른 글

USB 관련 헤더파일  (0) 2010.02.18
USB 구조  (0) 2010.02.18
USB 디바이스 설정  (0) 2010.02.17
Windbg 와 WMWare 환경설정하기  (0) 2010.02.17
USB Driver , *.inf 파일 작성 중 ClassGUID  (0) 2010.02.16
Comments