ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • WDM vs KMDF
    카테고리 없음 2024. 6. 10. 21:12

     

     

     

    윈도우즈 디바이스 드라이버 (커널 모드) 개발 방식에는 두 가지 방식이 있다.

     

    1. WDM

    2. KMDF

     

    이 두 가지는 어떤 차이 점이 있길레 MS가 두 개를 만들었을까?

     

    일단 WDM은 오래 됐고 KMDF는 그 보다 10년 뒤에 나왔다.

    이미 알고 있을 수도 있지만 KMDF는 WDM의 개선형이다.

     

    그렇다면 어떤 점에서 개선이 있었을까?

     

     

    첫 번째 개선

     

    깊이 들어가지 않고 개략적으로만 설명하자면

    WDM은 개발할 때 드라이버 스택 상에서 상위와 하위 드라이버의 모든 부분을 신경 써가면서 개발해야 되고

    KMDF는 그러지 않아도 된다.

    (WDM 하위 드라이버를 신경 쓰지 않고 특정 루틴을 등록해주지 않았을 경우 IRP 전달이 도중에 끊기기 때문에 비정상적으로 동작하게 된다.)

     

    예를 들어 USB Vendor 드라이버를 하나 만든 다고 하자.

    WDM의 경우 PnP 관련 루틴과 Power 관련 루틴을 내가 다 작성해줘야한다.

     

    그런데 거의 대부분의 경우 특정 회사가 만든 Vendor 드라이버라고는 하나

    USB Vendor 드라이버의 경우, PnP, Power 관련해서 USB bus 드라이버가 처리하는 그 것과 다르지 않다.

     

    즉 USB Vendor 드라이버가 PnP, Power 관련 루틴에 기술해 줘야 하는 일이라고는

    USB bus 드라이버로 IRP를 전달하는 일 밖에 없는 것이다.

     

    KMDF는 이런 Default로 진행해도 괜찮은 루틴들이 이미 적용 돼 있어, 개발자가 신경 쓰지 않아도 된다.

     

    여기 까지가 첫 번째 개선.

     


     

    두 번째 개선

     

    또 USB Vendor 드라이버를 예를 들자.

    USB Vendor 드라이버가 특정 사용자 요청에 대해 반응 하기 위해서는 USB bus 드라이버와 소통을 해야한다.

    WDM에서는 URB라는 객체를 채워서 IRP에 담아 bus driver로 내려 보냈을 것이다.

     

    하지만 KMDF에서는 아니다.

    WdfRequestSend라는 함수에 URB를 넣어 bus driver와 소통하거나 

    bus driver에 요청하는 전용 함수가 KMDF에 이미 정의 되어 있다.

     

    따라서 첫 번째와 비슷하게 URB나 IRP에 default로 들어가 있어야 하는 부분들이 이미 채워져 있어 편하다.

     

     

     

     

    댓글

Designed by Tistory.