读书频道 > 网站 > 网页设计 > 深入解析Windows操作系统,卷2(英文版·第6版)
Kernel-Mode Driver Framework (KMDF)
13-01-07    奋斗的小年轻
收藏    我要投稿   
本书是操作系统内核专家Russinovich 等人的Windows 操作系统原理的最新版著作,针对Windows 7和Windows Server 2008 R2 进行了全面的更新,主要讲述Windows 的底层关键机制、Windows 的核心组件(包括进...立即去当当网订购

We’ve already discussed some details about the Windows Driver Foundation (WDF) in Chapter 2, “System Architecture,” in Part 1. In this section, we’ll take a deeper look at the components and func-tionality provided by the kernel-mode part of the framework, KMDF. Note that this section will only briefly touch on some of the core architecture of KMDF. For a much more complete overview on the subject, please refer to http://msdn.microsoft.com/en-us/library/windows/hardware/gg463370.aspx.

Structure and Operation of a KMDF DriverFirst, let’s take a look at which kinds of drivers or devices are supported by KMDF. In general, any WDM-conformant driver should be supported by KMDF, as long as it performs standard I/O process-ing and IRP manipulation. KMDF is not suitable for drivers that don’t use the Windows kernel API directly but instead perform library calls into existing port and class drivers. These types of drivers cannot use KMDF because they only provide callbacks for the actual WDM drivers that do the I/O processing. Additionally, if a driver provides its own dispatch functions instead of relying on a port or class driver, IEEE 1394 and ISA, PCI, PCMCIA, and SD Client (for Secure Digital storage devices) drivers can also make use of KMDF.

Although KMDF provides an abstraction on top of WDM, the basic driver structure shown earlier also generally applies to KMDF drivers. At their core, KMDF drivers must have the following functions:

  ■ An initialization routine  Just like any other driver, a KMDF driver has a DriverEntry  function that initializes the driver. KMDF drivers will initiate the framework at this point and perform any configuration and initialization steps that are part of the driver or part of describing the driver to the framework. For non–Plug and Play drivers, this is where the first device object should be created.

  ■ An add-device routine   KMDF driver operation is based on events and callbacks (described shortly), and the  EvtDriverDeviceAdd  callback is the single most important one for PnP devices because it receives notifications when the PnP manager in the kernel enumerates one of the driver’s devices.

  ■ One or more EvtIo*  routines  Just like a WDM driver’s dispatch routines, these callback routines handle specific types of I/O requests from a particular device queue. A driver typically creates one or more queues in which KMDF places I/O requests for the driver’s devices. These queues can be configured by request type and dispatching type.

The simplest KMDF driver might need to have only an initialization and add-device routine because the framework will provide the default, generic functionality that’s required for most types of I/O processing, including power and Plug and Play events. In the KMDF model, events  refer to run-time states to which a driver can respond or during which a driver can participate. These events are not related to the synchronization primitives (synchronization is discussed in Chapter 3 in Part 1), but are internal to the framework.

For events that are critical to a driver’s operation, or which need specialized processing, the driver registers a given callback routine to handle this event. In other cases, a driver can allow KMDF to perform a default, generic action instead. For example, during an eject event (EvtDeviceEject), a driver can choose to support ejection and supply a callback or to fall back to the default KMDF code that will tell the user that the device is not ejectable. Not all events have a default behavior, however, and callbacks must be provided by the driver. One notable example is the  EvtDriverDeviceAdd  event that is at the core of any Plug and Play driver.

EXPERIMENT: Displaying KMDF Drivers

The Wdfkd.dll extension that ships with the Debugging Tools for Windows package provides many commands that can be used to debug and analyze KMDF drivers and devices (instead of using the built-in WDM-style debugging extension that may not offer the same kind of WDF-specific information). You can display installed KMDF drivers with the  !wdfkd.wdfldr  debugger command. In the following example, the output from a typical Windows computer is shown, displaying the built-in drivers that are installed.
lkd> !wdfkd.wdfldr 
 LoadedModuleList      0xfffff880010682d8 
----------------------------------
LIBRARY_MODULE  fffffa8002776120
  Version       v1.9 build(7600)
  Service       \Registry\Machine\System\CurrentControlSet\Services\Wdf01000 
  ImageName     Wdf01000.sys 
  ImageAddress  0xfffff88000c00000
  ImageSize     0xa4000 
  Associated Clients: 16
  ImageName  Version  WdfGlobals  FxGlobals  ImageAddress
  ImageSize
peauth.sys  v1.7(6001)  0xfffffa8004754210   0xfffffa80047540c0   0xfffff880074cc000 
  0x000a6000
scfilter.sys  v1.5(6000)  0xfffffa8002ef34e0   0xfffffa8002ef3390   0xfffff880040b3000 
  0x0000e000
WinUSB.sys  v1.9(7600)  0xfffffa8002eefd20   0xfffffa8002eefbd0   0xfffff88004000000 
  0x00011000
monitor.sys   v1.9(7600)  0xfffffa8004854a10   0xfffffa80048548c0   0xfffff8800412a000 
  0x0000e000
vmswitch.sys  v1.5(6000)  0xfffffa8002de5d60   0xfffffa8002de5c10   0xfffff88003e9b000 
  0x00068000
vmbus.sys  v1.5(6000)  0xfffffa8002d7fcf0   0xfffffa8002d7fba0   0xfffff88003e5f000 
  0x0003c000
Vid.sys  v1.5(6000)  0xfffffa8002ddacf0   0xfffffa8002ddaba0   0xfffff88002a00000 
  0x00033000
umbus.sys  v1.9(7600)  0xfffffa8002e57e70   0xfffffa8002e57d20   0xfffff880035db000 
  0x00012000
storvsp.sys   v1.5(6000)  0xfffffa8002e48b10   0xfffffa8002e489c0   0xfffff88003575000 
  0x00023000
CompositeBus.sys   v1.9(7600)  0xfffffa8002d79160   0xfffffa8002d79010   0xfffff88002936000 
  0x00010000
HDAudBus.sys  v1.7(6001)  0xfffffa8002e357f0   0xfffffa8002e356a0   0xfffff880037a9000 
  0x00024000
intelppm.sys  v1.9(7600)  0xfffffa8002c518f0   0xfffffa8002c517a0   0xfffff880027e7000 
  0x00016000
cdrom.sys  v1.9(7600)  0xfffffa80028bf8f0   0xfffffa80028bf7a0   0xfffff880011c4000 
  0x0002a000
vmstorfl.sys  v1.5(6000)  0xfffffa8002b2cdd0   0xfffffa8002b2cc80   0xfffff8800144a000 
  0x00010000
vdrvroot.sys  v1.9(7600)  0xfffffa80027887c0   0xfffffa8002788670   0xfffff8800139c000 
  0x0000d000
msisadrv.sys  v1.9(7600)  0xfffffa80029c5430   0xfffffa80029c52e0   0xfffff8800135f000 
  0x0000a000
----------------------------------
Total:  1  library  loaded

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站