UMDF

科技工作者之家 2020-11-17

User-Mode Driver Framework(用户模式驱动程序架构,简称UMDF),是美国微软公司所提出视窗驱动程序基础(Windows Driver Foundation)的一部分,运行于用户模式(user mode),仅能访问用户地址空间,是核心模式驱动程序框架(Kernel-Mode Driver Framework,KMDF)的子集合(subset),因此UMDF所提供的函数支持少于KMDF,两者使用相同的状态机器、使用相同的 I/O 模型。

简介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)为基底技术。1

COM架构UMDF驱动程序是一个基于COM架构的动态链接档(DLL),但UMDF并不使用COM的动态时期运行函数(runtimelibrary),单仅是借用了COM的样式。

UMDF 调用 DllGetClassObject API获取一个指针(pointer),这个指针指向一个IClassFactory的接口,并且激活 CreateInstance 这个属于IClassFactory 接口的函数来产生一个驱动程序的存储器实体(instance)。DLL 照例提供一些函数可以让COM 使用IWDFDriver-based的对象:

DllCanUnloadNow

DllGetClassObject

DllRegisterServer

DllUnregisterServer

DllMainUMDF 驱动程序是一个动态链接库(Dynamic Link Library),运行的时候如同一个进程内(in-process)的 COM server,其代码中包括了DllMain,这是著名的DLL档的进入点(entry point)。2

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)3

相关链接KMDF

本词条内容贡献者为:

王慧维 - 副研究员 - 西南大学

科技工作者之家

科技工作者之家APP是专注科技人才,知识分享与人才交流的服务平台。