任何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函数
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函数