驱动对象支持add-device事件,存储全局数据,并支持一个在卸载时清除数据的回调函数
UMDF Driver Callback Object创建
==========
KMDF Driver Object创建
DriverEntry只被调用一次:
1.创建WDFDRIVER,表示内存中的驱动,并在framework注册
2.注册驱动的EvtDriverDeviceAdd回调,可以在枚举时调用。
3.选择初始化event tracing
4.选择分配driver-wide资源,而不是device-wide
5.选择注册EvtDriverUnload回调函数
DriverEntry结束时要返回STATUS_SUCCESS
----Osrusbfx2的Driver.c的代码----
DriverEntry两个参数:WDM driver对象指针和注册表路径
直到调用WdfDriverCreate前,驱动都是作为WDM驱动的
WdfDriverCreate 参数:
1.WDM driver obj指针
2.注册表路径
3.attributes structure指针
4.configuration structure指针
5.接受WDFDRIVER object的指针,若不需要,则传入WDF_NO_HANDLE(NULL)
很少使用该指针,也可以通过WdfGetDriver方法获得
若成功,调用WPP_INIT_TRACING,开始记录跟踪信息(需要在driver的EvtCleanupCallback调用WPP_CLEANUP结束日志记录)
若在生成driver object后失败,framework删除object并调用EvtCleanupCallback
*SDV使用annotate标注callback function
UMDF Driver Callback Object创建
==========
KMDF Driver Object创建
DriverEntry只被调用一次:
1.创建WDFDRIVER,表示内存中的驱动,并在framework注册
2.注册驱动的EvtDriverDeviceAdd回调,可以在枚举时调用。
3.选择初始化event tracing
4.选择分配driver-wide资源,而不是device-wide
5.选择注册EvtDriverUnload回调函数
DriverEntry结束时要返回STATUS_SUCCESS
----Osrusbfx2的Driver.c的代码----
NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) { WDF_DRIVER_CONFIG config; NTSTATUS status; WDF_OBJECT_ATTRIBUTES attributes; // Initialize the driver configuration structure. WDF_DRIVER_CONFIG_INIT (&config, OsrFxEvtDeviceAdd); WDF_OBJECT_ATTRIBUTES_INIT(&attributes); attributes.EvtCleanupCallback = OsrFxEvtDriverContextCleanup; // Create a framework driver object. status = WdfDriverCreate (DriverObject, RegistryPath, &attributes, // Driver Object Attributes &config, // Driver Config Info WDF_NO_HANDLE // hDriver ); if (!NT_SUCCESS(status)) { return status; } // Initialize WPP Tracing. WPP_INIT_TRACING( DriverObject, RegistryPath ); TraceEvents(TRACE_LEVEL_INFORMATION, DBG_INIT, "OSRUSBFX2 Driver Sample - Driver Framework Edition.\n"); } return status; }图解:
DriverEntry两个参数:WDM driver对象指针和注册表路径
直到调用WdfDriverCreate前,驱动都是作为WDM驱动的
WdfDriverCreate 参数:
1.WDM driver obj指针
2.注册表路径
3.attributes structure指针
4.configuration structure指针
5.接受WDFDRIVER object的指针,若不需要,则传入WDF_NO_HANDLE(NULL)
很少使用该指针,也可以通过WdfGetDriver方法获得
若成功,调用WPP_INIT_TRACING,开始记录跟踪信息(需要在driver的EvtCleanupCallback调用WPP_CLEANUP结束日志记录)
若在生成driver object后失败,framework删除object并调用EvtCleanupCallback
*SDV使用annotate标注callback function