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

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)
NTSTATUS
FORCEINLINE
WdfDeviceCreate(
    _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)
VOID
FORCEINLINE
WdfDeviceInitSetPnpPowerEventCallbacks(
    _In_
    PWDFDEVICE_INIT DeviceInit,
    _In_
    PWDF_PNPPOWER_EVENT_CALLBACKS PnpPowerEventCallbacks
    )
{
    ((PFN_WDFDEVICEINITSETPNPPOWEREVENTCALLBACKS) WdfFunctions[WdfDeviceInitSetPnpPowerEventCallbacksTableIndex])(WdfDriverGlobals, DeviceInit, PnpPowerEventCallbacks);
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值