设为首页 加入收藏

TOP

6.3.1 基类、子类
2013-10-07 13:20:14 来源: 作者: 【 】 浏览:63
Tags:6.3.1 基类 子类

6.3  多态

如果纯粹是为了尝鲜,在驱动中加入一个类,内部却只是一团硬板,那就完全多此一举了。所以本节笔者将带领大家在内核中实现类的多态。以CY001 USB设备驱动为例进行讲解,代码请参考本书工程UsbBaseClass和CY001UsbClass,前者以基类实现设备驱动,后者以子类实现设备驱动。

6.3.1  基类、子类

笔者对基类的要求是能够实现USB设备的最基本要素,使得设备能够在系统中显现,能够正常运行和移除。所以设备栈一定要成功建立,基本的Pnp/Power接口也必须要提供,但用户层接口可以暂不考虑。最终的结果是PnpAdd函数实现得非常完整,因为必须要将设备栈建立起来;EvtDevicePrepareHardware和EvtDeviceReleaseHardware函数也得以完整实现,这样设备能够正确运行和移除,但细节方面的设置如休眠等则以接口留出。

子类必须实现更完善的功能,如休眠、唤醒设置。下面的例子分别对应着基类和子类的实现。

  1. // 配置设备驱动的电源管理功能  
  2. NTSTATUS DrvClass::InitPowerManagement()  
  3. {  
  4.     return STATUS_SUCCESS;  
  5. }  
  6. 这是基类的实现,空空如也,子类则要复杂许多倍。  
  7. // 配置设备驱动的电源管理功能  
  8. NTSTATUS CY001Drv::InitPowerManagement()  
  9. {  
  10.     NTSTATUS status = STATUS_SUCCESS;  
  11.     WDF_USB_DEVICE_INFORMATION usbInfo;  
  12.  
  13.     KDBG(DPFLTR_INFO_LEVEL, "[InitPowerManagement]");  
  14.  
  15.     // 获取设备信息  
  16.     WDF_USB_DEVICE_INFORMATION_INIT(&usbInfo);  
  17.     WdfUsbTargetDeviceRetrieveInformation(m_hUsbDevice, &usbInfo);  
  18.  
  19.     // 设置设备的休眠和远程唤醒功能  
  20.     // …… 详见代码  
  21.  
  22.     return status;  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇6.1.4 全局/静态变量 下一篇6.3.2 实现多态

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: