跟我一起学习windows驱动(PME接口)

来源:互联网 发布:如何精通三坐标编程 编辑:程序博客网 时间:2024/06/05 06:46

WDF编程接口类似PME(Property/Method/Event)接口模型。
属性描述对象特性,通过Get或Retrieve获得属性,通过Set或者Assign设置属性。就像WdfDeviceGetDevicePnpState、WdfDeviceGetDevicePowerState和WdfDeviceSetDeviceState,都是设备对象的属性方法。
除了属性接口,WDF其它接口函数是方法接口,如WdfDriverCreate、WdfDeviceCreate等,WDF驱动程序通过方法函数接口操作WDF框架对象。
事件对于WDF驱动来说非常重要,WDF驱动,除了入口函数DriverEntry,其它的都无外乎事件处理函数,以及事件处理函数调用的子函数。
事件函数实际上就是回调函数,一般把它叫做“事件回调”。
当创建一个回调对象时,可以通过属性结构体WDF_OBJECT_ATTRIBUTES或者其它结构体设置事件回调。当相应的事件发生,系统会检查对象是否有对应事件回调,
有就调用。
基对象WDFOBJECT事件回调,前面已经讲过通过WDF_OBJECT_ATTRIBUTES设置。
子对象事件回调既可以设置公共的基对象回调,也可以设置子对象回调。
以设备对象创建WdfDeviceCreate为例,

_Must_inspect_result__IRQL_requires_max_(PASSIVE_LEVEL)NTSTATUSFORCEINLINEWdfDeviceCreate(    _Inout_    PWDFDEVICE_INIT* DeviceInit,    _In_opt_    PWDF_OBJECT_ATTRIBUTES DeviceAttributes,    _Out_    WDFDEVICE* Device    ){    return ((PFN_WDFDEVICECREATE) WdfFunctions[WdfDeviceCreateTableIndex])(WdfDriverGlobals, DeviceInit, DeviceAttributes, Device);}

参数DeviceAttributes用做设置基对象属性。
DeviceInit设置对象特有属性,例如pnp和电源回调。
可以通过下面的函数WdfDeviceInitSetPnpPowerEventCallbacks来设置:

_IRQL_requires_max_(DISPATCH_LEVEL)VOIDFORCEINLINEWdfDeviceInitSetPnpPowerEventCallbacks(    _In_    PWDFDEVICE_INIT DeviceInit,    _In_    PWDF_PNPPOWER_EVENT_CALLBACKS PnpPowerEventCallbacks    ){    ((PFN_WDFDEVICEINITSETPNPPOWEREVENTCALLBACKS) WdfFunctions[WdfDeviceInitSetPnpPowerEventCallbacksTableIndex])(WdfDriverGlobals, DeviceInit, PnpPowerEventCallbacks);}

参数PnpPowerEventCallbacks是一个回调函数数据结构,设置PNP和电源回调函数。

0 0
原创粉丝点击