User-Mode Driver Framework(用户模式驱动程式架构,简称UMDF),是美国微软公司所提出视窗驱动程式基础(Windows Driver Foundation)的一部分,运行于用户模式(user mode),仅能访问用户地址空间,是核心模式驱动程式框架(Kernel-Mode Driver Framework,KMDF)的子集合(subset),因此UMDF所提供的函式支持少于KMDF,两者使用相同的状态机器、使用相同的 I/O 模型。
基本介绍
- 中文名:用户模式驱动程式架构
- 外文名:User-Mode Driver Framework
- 领域:计算机
简介
User-Mode Driver Framework(用户模式驱动程式架构,简称UMDF),是美国微软公司所提出视窗驱动程式基础(Windows Driver Foundation)的一部分,运行于用户模式(user mode),仅能访问用户地址空间,是核心模式驱动程式框架(Kernel-Mode Driver Framework,KMDF)的子集合(subset),因此UMDF所提供的函式支持少于KMDF,两者使用相同的状态机器、使用相同的 I/O 模型。
UMDF提供即插即用(PNP)、电源管理(Power Manager)、异步输出输入等功能,可设定 I/O 伫列,但他的限制在于不处理中断(Interrupt)、不运行 DMA(直接存储器访问,Direct Memory Access),且不能使用核心模式资源如:未标籤页集区(NonPaged Pool),也不完全支持同步化领域(Synchronization scope),在技术上UMDF使用COM(Component Object Model)的动态连结程式库(DLL)为基底技术。
COM架构
UMDF驱动程式是一个基于COM架构的动态连结档(DLL),但UMDF并不使用COM的动态时期运行函式(runtimelibrary),单仅是借用了COM的样式。
UMDF 调用 DllGetClassObject API获取一个指针(pointer),这个指针指向一个IClassFactory的接口,并且激活 CreateInstance 这个属于IClassFactory 接口的函式来产生一个驱动程式的存储器实体(instance)。DLL 照例提供一些函式可以让COM 使用IWDFDriver-based的对象:
- DllCanUnloadNow
- DllGetClassObject
- DllRegisterServer
- DllUnregisterServer
DllMain
UMDF 驱动程式是一个动态程式库(Dynamic Link Library),运行的时候如同一个进程内(in-process)的 COM server,其代码中包括了DllMain,这是着名的DLL档的进入点(entry point)。
BOOL WINAPI DllMain( HINSTANCE ModuleHandle, DWORD Reason, PVOID /* Reserved */){ if (DLL_PROCESS_ATTACH == Reason) { WPP_INIT_TRACING(MYDRIVER_TRACING_ID); g_ModuleHandle = ModuleHandle; } else if (DLL_PROCESS_DETACH == Reason) { WPP_CLEANUP(); } return TRUE;};
UMDF接口
- IWDFObject: 定义基本的 WDF 对象类型(WDF object)
- IWDFDriver: 代表驱动程式对象(driver object)
- IWDFDevice: 代表设备对象(device object)
- IWDFIoQueue: 代表 I/O 要求的伫列(IO Request Queue)
- IWDFIoRequest: I/O 要求描述(IO Request Description)
- IWDFIoTarget: 代表 I/O 要求的目标驱动程式(IO Target)
- IWDFMemory: 提供访问存储器区域(Memory)
相关连结
- KMDF