chapter 7.5 software-Only驱动的PnP和电源管理

============简要归纳,待整理


要对所有queue在创建时禁用power management
Toaster Filter例子,里面创建了两个PnP/电源管理的特性:
一个可选的设备对象cleanup事件回调函数
一个non-power-managed I/O queue
NTSTATUS FilterEvtDriverDeviceAdd(
                        IN WDFDRIVER Driver,
                        IN PWDFDEVICE_INIT DeviceInit)
{
    NTSTATUS status =          STATUS_SUCCESS;
    PFDO_DATA                  fdoData;
    WDF_IO_QUEUE_CONFIG        queueConfig;
    WDF_OBJECT_ATTRIBUTES      fdoAttributes;
    WDFDEVICE                  hDevice;

    WdfFdoInitSetFilter(DeviceInit);
    // Initialize the object attributes for our WDFDEVICE.
    WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&fdoAttributes, FDO_DATA);
    fdoAttributes.EvtCleanupCallback = FilterEvtDeviceContextCleanup;
    // Create a framework device object.
    status = WdfDeviceCreate(&DeviceInit, &fdoAttributes, &hDevice);
    if (!NT_SUCCESS(status)) {
        return status;
    }
    status = WdfDeviceCreateDeviceInterface(hDevice, &GUID_DEVINTERFACE_FILTER, NULL);
    if (!NT_SUCCESS (status)) {
        return status;
    }
    // Initialize the default queue.
    WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(&queueConfig, WdfIoQueueDispatchParallel);
    queueConfig.PowerManaged = FALSE;
    // Specify event processing callbacks.
    queueConfig.EvtIoWrite = FilterEvtIoWrite;
    // Create the queue
    status = WdfIoQueueCreate(hDevice, &queueConfig, WDF_NO_OBJECT_ATTRIBUTES, NULL);
    if (!NT_SUCCESS (status)) {
        return status;
    }
    return STATUS_SUCCESS;
}
图例:
WDFDEVICE_INIT structure是用来初始化设备创建时的一系列数据。
WdfFdoInitSetFilter表示device是一个filter
FDO_DATA是设备对象的context类型,在WDF_OBJECT_ATTRIBUTES中。
EvtCleanupCallback在设备被删除时调用
WDF_IO_QUEUE_CONFIG 配置默认queue


在software-only和filter驱动,由framework处理所有相关操作,KMDF只需要实现EvtDriverDeviceAdd。禁用queue的power management。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值