chapter 6.1: driver 需要的组件

来源:互联网 发布:数据合并计算怎么做 编辑:程序博客网 时间:2024/05/13 08:52
任何driver必须包含如下:
    1.driver载入时的entry point
    2.driver object
    3.一至多个device
    4.其他用来管理device和管理流向device的I/O request的object
    5.event callbacks


UMDF driver 结构和需求
======


KMDF driver 结构和需求
任何KMDF driver必须包含如下:
    1.DriverEntry函数
    2.EvtDriverDeviceAdd回调函数,在PnP manager枚举设备时调用
        该函数创建并初始化device object、queue object和所有其他支持的object
        non-PnP的驱动不需要EvtDriverDeviceAdd
    3.一至多个EvtXxx回调函数,处理事件
由于framework实现了默认的PnP管理和Power管理操作,所以不用操作硬件的驱动不用实现这些代码。
至于一个可载入运行的KMDF driver能多简单,请看Simple Toaster的Toaster.c
    device,I/O queue,可以处理读写及设备I/O控制请求,只需要少于400行的代码。
Driver unload函数:
    关于PnP设备的驱动不需要driver unload函数,因为framwork提供了默认的
    若driver在DriverEntry创建或分配了driver范围的资源,并在unload之前都使用,则需要EvtDriverUnload回调来释放这些资源。
    non-PnP driver可以选择实现EvtDriverUnload,若不实现,则驱动无法被卸载。
图6-2表示KMDF driver如何在载入初始化及运行时控制流

当windows载入KMDF driver时,driver会动态和一个兼容的KMDF运行库绑定。
driver映像包含了编译时的KMDF版本:
    1.WDF loader确定major version的framwork是否已载入。
        若无,它载入需要的库版本。若driver的最低版本要求无法被提供,loader失败,在系统事件中保存日志。
        若已载入,loader把driver作为service的client加入,向framework返回相关的信息,由framework调用驱动的DriverEntry。
        DriverEntry初始化driver范围的数据,初始化tracing,调用WdfDriverCreate初始化driver object。
    2.framework调用driver注册的EvtDriverDeviceAdd回调
        它创建初始化一个device object,
        配置device的I/O queue和queue object和其他支持对象
        注册event callbacks和所有需要的设备接口。
    3.framework调用驱动的EvtXxx函数来处理事件。若此时有额外的device加入,则调用相关的EvtDriverDeviceAdd回调
        对于PnP设备,移除是一个可以被注册回调的事件。framework会先调用removal回调,再调用cleanup函数
原创粉丝点击