User-Mode Driver Framework(用戶模式驅動程式架構,簡稱UMDF),是美國微軟公司所提出視窗驅動程式基礎(Windows Driver Foundation)的一部分,運行於用戶模式(user mode),僅能訪問用戶地址空間,是核心模式驅動程式框架(Kernel-Mode Driver Framework,KMDF)的子集合(subset),因此UMDF所提供的函式支持少於KMDF,兩者使用相同的狀態機器、使用相同的 I/O 模型。
基本介紹
- 中文名:用戶模式驅動程式架構
- 外文名:User-Mode Driver Framework
- 領域:計算機
簡介,COM架構,DllMain,UMDF接口,相關連結,
簡介
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)