WDF 驱动程序架构
WDF内核驱动程序架构
对于内核模式驱动程序,KMDF不会替代WDM,而是提供了一个框架性的WDM实现。驱动程序开发人员通过创建对象并提供基于事件的回调例程,配置框架驱动程序从而在特定设备上使用。
KMDF是一个可以重入的库,可以在多个驱动程序之间共享。驱动程序在加载的时候与这个库动态绑定,可以同时由多个驱动程序使用库的多个版本。
KMDF自前支持创建以下类型的内核模式驱动程序。
- 即插即用设备的功能驱动程序。
- 即插即用设备的过滤器驱动程序。
- 即插即用设备栈的总线驱动程序。
不在即插即用栈内的老式设备(NT4.0式样的)的控制设备驱动程序。
KMDF目前不支持总线过滤器驱动程序。
WDF提供了针对总线驱动程序的某些方法和回调,提供了针对功能驱动程序和过滤器驱动程序的方法和回调,还提供了针对控制设备驱动程序的方法和回调。
KMDF根据驱动程序调用的方法和驱动程序支持的回调来识别功能驱动程序、控制设备驱动程序或总线驱动程序。例如,设备的总线驱动程序通常支持的回调要枚举设备的子设备,并提供设备需要的硬件资源列表。设备的功能驱动程通常支持的回调要管理设备的电源。过滤器驱动程序在创建设备对象之前会显式地标识自己。KMDF在向驱动程序传递I/O请求时会使用该信息。过滤器驱动程序只会针对它要过滤的IO请求进行注册:KMDF会将其他所有请求传递到下一级驱动程序(对于功能驱动程序或总线驱动程序,WDF不为其他请求服务)。相比之下,WDM过滤器驱动程序必须接受可能针对其设备的所有IO请求,将它不过滤的请求传递给下一级驱动程序,并对余下的子集进行操作。WDM过滤器驱动程序需要具有对众多请求类型进行检测和转发的逻辑:WDF过滤器驱动程序并没有这类代码,因为它只接收自己感兴趣的请求。
当应用程序向内核模式WDF驱动程序发送I/O请求时,请求所经过的组件如图所示。
在处理到内核模式WDF驱动程序的IO请求时,会涉及以下组件。
- 应用程序——应用程序是用户模式进程,它通过Win32API发出I/O请求。
- Win32APl—在响应应用程序的IO请求时,Win32API调用Windows内核的IO例程。
- Windows内核——Windows内核中的IO管理器创建IRP来表示请求,在指定的入口点上调用驱动程序,将IRP交给目标驱动程序。对内核模式WDF驱动程序来说,KMDF会注册入 口点,从而代替驱动程序拦截请求。
- KMDF-KMDF按2.7.3节所述来处理请求,根据需要创建WDF请求对象,并调用驱动程 序的事件回调例程。