南五行属什么| 什么字五行属土| 找工作上什么网| 托梦是什么意思| 什么的睡觉| 什么芒果好吃| 七十岁是什么之年| 淋巴细胞是什么意思| bodywash是什么意思| 胆结石是什么原因导致的| 为什么大便会拉出血| 减肥能吃什么零食| 股骨长是指什么| 安吉白茶属于什么茶类| 寄居蟹用什么水养| 什么是蜂胶| 懒是什么生肖| 大便感觉拉不干净什么原因| 生完孩子可以吃什么水果| 做肠胃镜挂什么科| 颈动脉b超是检查什么| 什么叫眩晕| 杨梅泡酒有什么功效和作用| 7月11号什么星座| 草缸适合养什么鱼| 为什么空调| 皮下出血小红点是什么原因造成的| 为什么梦不到死去的亲人| 孟子是什么时期的人| 吃什么降血压最快最好方法| 乳腺纤维瘤有什么症状表现| 肩胛骨缝疼挂什么科| 膀胱炎有什么症状| 乙肝二四五阳性什么意思| 小孩睡觉出很多汗是什么原因| 什么是早谢泄图片| 火龙果什么时候吃最好| 飞蚊症吃什么药| 中国地图像什么| 焦虑症是什么症状| 低密度胆固醇高吃什么药| 王白读什么| 牛肉炒什么菜| 红色加蓝色等于什么颜色| 系带断了有什么影响| poppy是什么意思| 痛经是什么引起的| 小金鱼吃什么| 一直流口水是什么原因| 精气是什么意思| 尿胆原高是什么原因| 尿微肌酐比值高是什么情况| 8.12什么星座| 乳腺癌的症状是什么| 99朵玫瑰花代表什么| 排异反应是什么意思| 明天什么节| 什么是eb病毒| 什么叫支原体感染| 透声差是什么意思| 废电池乱丢对人体可能造成什么中毒| 包公是什么生肖| 全麻手术后为什么不能睡觉| 午时银花露有什么功效| 宫颈纳氏囊肿是什么意思严重吗| 蟑螂为什么会飞| 胃恶心想吐吃什么药| 双11是什么节日| 哺乳期吃什么下奶| 变化不著是什么意思| 小狗得细小是什么症状| 什么生日的人有佛缘| 手指甲上的月牙代表什么| blissful是什么意思| 08年属什么生肖| o3是什么| 什么是智商| 91年的属什么生肖| 小腿疼痛什么原因引起的| 李自成为什么会失败| 不想睡觉是什么原因| 左侧卵巢囊肿是什么原因引起的| 尾巴骨疼是什么原因| 腰疼是什么病的前兆| 什么是耐药性| romantic什么意思| 肉蔻炖肉起什么作用| 黄帝内经讲的是什么| 浅笑嫣然是什么意思| 红眼病什么症状| 心率过低有什么危害| 糠疹是什么引起的| 健身吃什么| 年上是什么意思| 芋头不能和什么一起吃| 今年的属相是什么生肖| 牙疼吃什么药最好最有效| 民营企业和私营企业有什么区别| 容貌是什么意思| 成都是什么气候| 床垫什么材质的好| miu是什么单位| 梦见手抓屎是什么意思| 什么挑担子忠心耿耿| sys是什么意思| wendy什么意思| 北边是什么生肖| 喝茶水对身体有什么好处| 胸闷气短吃什么药效果好| mr是什么的缩写| 吃了安宫牛黄丸要禁忌什么不能吃| 单核细胞百分比偏高什么原因| 蚂蚁喜欢吃什么食物| 孕妇地中海贫血对胎儿有什么影响| 湛蓝是什么颜色| 吃什么对肺好| 交尾是什么意思| 检查尿酸挂什么科| 注意力不集中是什么原因| 牙痛吃什么好| 后脑勺发麻是什么原因| 7月1号什么节| 人工流产后可以吃什么| 词牌名是什么意思| 含字五行属什么| 氨气是什么| 什么叫闭合性跌打损伤| 表里不一是什么意思| 治疗白斑最有效的方法是什么| 凤五行属性是什么| 把脉左右手代表什么| 肌醇是什么东西| 智商高的人有什么特征| 式可以加什么偏旁| 陈旧性心梗是什么意思| 什么而去| 头皮痒是什么原因引起的| 过刚易折什么意思| b2是什么| 拉缸是什么意思| 经常出鼻血是什么原因| 男人梦见蛇是什么征兆| 脊椎侧弯挂什么科| 什么情况需要做肠镜| 梦见水果是什么意思| 失孤什么意思| 月经期间喝什么好排毒排污血| 黄瓜不能和什么食物一起吃| 脑委缩吃什么药能空制| 落地成盒什么意思| 孕妇不吃饭对胎儿有什么影响| 黄芪和北芪有什么区别| 学分是什么| 蝉联什么意思| 杭州市市长什么级别| 买什么样的老花镜好| 午门是什么意思| 虎虎生风是什么意思| 因果业力是什么意思| 换什么机油好| 翻什么覆什么| 属马的贵人属相是什么| 乳糖不耐受吃什么奶粉| 大校是什么级别| 吃什么升血压最快| 有胆结石的人不能吃什么东西| 来月经头疼吃什么药| 扁桃体发炎吃什么药好得快| 塑料是什么材料| 眼底出血是什么原因| ak是什么| 水瓶座是什么星座| 苹果5s什么时候上市的| 治肝病最好的药是什么药| 嘴角上火是什么原因| 宝宝消化不好吃什么调理| 阴道流黄水是什么原因| 承受是什么意思| 去医院看乳房挂什么科| 汗味酸臭是什么原因| 什么是av| 免疫球蛋白适合什么人| jackie是什么意思| 什么蛇可以吃| 爸爸生日礼物送什么| 抽动症是什么原因引起的| 骨刺吃什么药| 老巫婆是什么意思| 梦见钓鱼是什么意思周公解梦| 呆萌是什么意思| 低密度胆固醇高吃什么药| 亚玛病是什么病| 楚怀王和芈月什么关系| 有什么好看的美剧| 太阳穴长痘痘什么原因| 手掌有痣代表什么| 网线长什么样| 两肺纹理增多是什么意思| 牙套脸是什么样| 恩怨是什么意思| 更年期什么时候结束| 缺铁性贫血吃什么食物好| 孕妇应该多吃什么水果| 人间四月芳菲尽的尽是什么意思| 肺纤维化是什么意思| 佳偶天成什么意思| 扁桃体发炎吃什么食物好| 息肉有什么危害| 什么水果糖分最低| 草菅人命是什么意思| 丁胺卡那又叫什么药名| 谬论是什么意思| 吃什么鱼最健康| 送终是什么意思| 冬五行属什么| 药物流产最佳时间什么时候| 尿素氮偏低是什么原因| 尿酸是什么意思| 金线莲有什么功效| 喝冰水牙疼是什么原因| 补牙为什么要分三次| reed是什么意思| 提肛运动有什么好处| 推介会是什么意思| 低烧吃什么| 对酒当歌是什么生肖| 声带息肉有什么危害| 职别是什么意思| 常放屁是什么原因| 跳蚤怕什么| 潘海利根香水什么档次| 小便尿起泡是什么原因| 撸铁是什么| 晚上睡觉手发麻是什么原因| 坐月子不能吃什么| 说三道四的意思是什么| 伽马刀是什么| 氯硝西泮片是什么药| 96年属什么命| 胆结石忌吃什么| 医调委是什么机构| 大姨妈是黑色是什么原因| 韵五行属什么| 淋巴细胞百分比偏高是什么意思| 三摩地是什么意思| 弥漫性病变是什么意思| 八字指的是什么| 小孩热感冒吃什么药好| 什么牌子的奶粉最好| 什么人容易得帕金森病| 瘢痕是什么| 蕙字五行属什么| 什么时候减肥效果最快最好| 造化弄人是什么意思| 爱出者爱返福往者福来是什么意思| 女人30如狼40如虎是什么意思| 狮子吃什么食物| 皮肤发痒用什么药| 中校军衔是什么级别| 月经期间喝酒会有什么影响| 肾结石能吃什么水果| 炒房是什么意思| 噗噗噗是什么意思| 槿字五行属什么| 百度跳转到内容

英媒:中国2月出口增速创三年新高 主因国际市场回暖

本页使用了标题或全文手工转换
维基百科,自由的百科全书
百度 强化日常教育管理。

核心模式驱动程序框架Kernel-Mode Driver Framework,缩写KMDF)是微软公司推出的Windows驱动程序基础(Windows Driver Foundation)之一,建构Windows XPWindows Server 2003的核心模式(Kernel-Mode)驱动程序所需的基本功能,包括对即插即用(PNP)、电源管理(Power Manager)、I/O队列、直接存储器访问(DMA)、Windows Management Instrumentation(WMI)和同步处理等的完整支持。KMDF的设计并不能用来取代WDM,它提供“Skeletal WDM”建置来替代WDM;目前,KMDF并不支持总线筛选驱动程序(Bus Filter Driver)。

内核模式驱动程序框架 (KMDF)
开发者Microsoft
当前版本1.33 2025-08-05,?2年前?(2025-08-05
源代码库github.com/microsoft/Windows-Driver-Frameworks
编程语言C, C++
操作系统Microsoft Windows
类型设备驱动程序开发平台
网站docs.microsoft.com/en-us/windows-hardware/drivers/kernel/

Kernel-Mode Driver Framework目前支持下列类型的核心模式(kernel mode)驱动程序之创建了:

  • 即插即用(PNP)设备所使用的Function Driver。
  • 即插即用(PNP)设备所使用的Filter Driver。
  • 即插即用(PNP)设备堆栈(Stack)所使用的Bus Driver。
  • Windows NT 4.0类型设备所使用的Control设备驱动程序。

KMDF是可重新进入程序库(Reentrant Library)。

与WDM的关系

[编辑]

自Windows 2000开始,开发驱动程序必以WDM为基础的,但开发难度太大,无法像用户模式应用程序开发那样容易。KMDF支持驱动程序在Windows Driver Model环境中撰写驱动程序,简化其中的过程,但是KMDF的设计并不能用来取代WDM,它提供“Skeletal WDM”建置来替代WDM。早期的WDM可支持Windows 98Windows MeWindows 2000Windows XP;至于WDF计划支持Windows XP,以及更新的版本。

KMDF系以对象为基底创建于WDM框架之上。不同的功能有不同的对象,KMDF在实现上包含了:

驱动程序进入点

[编辑]

在Windows操作系统中驱动程序的起始点都是在DriverEntry函数,DriveryEntry是驱动程序的进入点(entry point)。在DriverEntry函数的实现里,你需要具现化(instantiate)你的WDFDRIVER对象,并且告知WDF framework要去哪里调用你的系统。

NTSTATUS DriverEntry(
   IN PDRIVER_OBJECT  DriverObject,
   IN PUNICODE_STRING  RegistryPath
   )
{
 WDF_DRIVER_CONFIG config;
 NTSTATUS status = S_OK;
 KdPrint((__DRIVER_NAME "DriverEntry Begin\n"));
 WDF_DRIVER_CONFIG_INIT(&config, EvtDeviceAdd);
 status = WdfDriverCreate(
                     DriverObject,
                     RegistryPath,
                     WDF_NO_OBJECT_ATTRIBUTES,
                     &config, // Pointer to config structure
                     WDF_NO_HANDLE); // or NULL, Pointer to get WDFDRIVER handle
 if(T_SUCCESS(status))
 {
   KdPrint((__DRIVER_NAME "WdfDriverCreate failed with status 0x%08x\n", status));
 }
 KdPrint((__DRIVER_NAME "DriverEntry End\n"));
 return status;
}

Add Device

[编辑]

EvtDeviceAdd函数,在系统发现新硬件插入时被调用。这个函数将挑起WDF驱动程序框架的大部分工作,EvtDeviceAdd事件被唤起之余一定会带出一个WDFDRIVER对象,并且指向一个WDFDEVICE_INIT结构。在设备产生(device crated)之前,必先进行初始化的动作。如果EvtDeviceAdd执行成功,那么EvtDevicePrepareHardware是框架下一个被执行的函数,用以保证驱动程序能够访问硬件。

WDFSTATUS DioEvtDeviceAdd(WDFDRIVER Driver, PWDFDEVICE_INIT DeviceInit)
{
 WDFSTATUS status = STATUS_SUCCESS;
 WDF_PNPPOWER_EVENT_CALLBACKS pnpPowerCallbacks;
 WDF_OBJECT_ATTRIBUTES objAttributes;
 WDFDEVICE device;
 PDIO_DEVICE_CONTEXT devContext;
 WDF_IO_QUEUE_CONFIG ioCallbacks;
 WDF_INTERRUPT_CONFIG interruptConfig;
 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS idleSettings;
 WDF_PNPPOWER_EVENT_CALLBACKS_INIT(&pnpPowerCallbacks);
 pnpPowerCallbacks.EvtDevicePrepareHardware = DioEvtPrepareHardware;
 pnpPowerCallbacks.EvtDeviceReleaseHardware = DioEvtReleaseHardware;
 pnpPowerCallbacks.EvtDeviceD0Entry= DioEvtDeviceD0Entry;
 pnpPowerCallbacks.EvtDeviceD0Exit = DioEvtDeviceD0Exit;
 WdfDeviceInitSetPnpPowerEventCallbacks(DeviceInit, pnpPowerCallbacks);
 WDF_OBJECT_ATTRIBUTES_INIT(&objAttributes);
 WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE(&objAttributes, DIO_DEVICE_CONTEXT);
 status = WdfDeviceInitUpdateName(DeviceInit, L"\\device\\WDFDIO");
 status = WdfDeviceCreate(&DeviceInit,    // Device Init structure
                          &objAttributes, // Attributes for WDF Device
                          &device);       // return new WDF Device pointer,
 devContext = DioGetContextFromDevice(device); // Get device extension
 devContext->WdfDevice = device;
 // Create a symbolic link for the control object
 status = WdfDeviceCreateSymbolicLink(device, L"\\DosDevices\\WDFDIO");
 WDF_IO_QUEUE_CONFIG_INIT(&ioCallbacks,
                            WdfIoQueueDispatchSerial,
                            WDF_NO_EVENT_CALLBACK,     // StartIo
                            WDF_NO_EVENT_CALLBACK);    // CancelRoutine
 ioCallbacks.EvtIoDeviceControl = DioEvtDeviceControlIoctl;
 status = WdfDeviceCreateDefaultQueue(device,
                                       &ioCallbacks,
                                       WDF_NO_OBJECT_ATTRIBUTES,
                                       NULL); // pointer to default queue
 WDF_INTERRUPT_CONFIG_INIT(&interruptConfig,       // Configure the Interrupt object
                             FALSE,                // auto-queue DPC?
                             DioIsr,               // ISR
                             DioDpc);              // Defered Procedule Call
 interruptConfig.EvtInterruptEnable = DioEvtInterruptEnable;
 interruptConfig.EvtInterruptDisable = DioEvtInterruptDisable;
 status = WdfInterruptCreate(device,
                             &interruptConfig,
                             &objAttributes,
                             &devContext->WdfInterrupt);
 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(&idleSettings,  // Initialize idle policy
                                             IdleCannotWakeFromS0);
 status = WdfDeviceUpdateS0IdleSettings(device, &idleSettings);
 return status;
}

Prepare Hardware

[编辑]

如果EvtDeviceAdd顺利执行成功,那么EvtDevicePrepareHardware是框架下一个被执行的函数,用以保证驱动程序能够访问硬件。

NTSTATUS EvtDevicePrepareHardware(
   IN WDFDEVICE    Device,
   IN WDFCMRESLIST ResourceList,
   IN WDFCMRESLIST ResourceListTranslated
   )
{
 NTSTATUS status = STATUS_SUCCESS;
 UNREFERENCED_PARAMETER(Device);
 UNREFERENCED_PARAMETER(ResourceList);
 UNREFERENCED_PARAMETER(ResourceListTranslated);
 return status;
}
NTSTATUS EvtDeviceD0Entry(
   IN WDFDEVICE  Device,
   IN WDF_POWER_DEVICE_STATE  PreviousState
   )
{
 NTSTATUS status = STATUS_SUCCESS;
 return status;
}
NTSTATUS EvtDeviceD0Exit(
   IN WDFDEVICE  Device,
   IN WDF_POWER_DEVICE_STATE  TargetState
   )
{
 NTSTATUS status = STATUS_SUCCESS;
 return status;
}

IO requests

[编辑]
VOID EvtDeviceIoDefault(
   IN WDFQUEUE  Queue,
   IN WDFREQUEST  Request
   )
{
 WdfRequestComplete(Request, STATUS_NOT_IMPLEMENTED);
}

外部链接

[编辑]
便秘吃什么药能根治 荧光黄是什么颜色 生肖龙和什么生肖最配 老匹夫是什么意思 汴去掉三点水念什么
压抑什么意思 一个口一个麦念什么 喝羊奶有什么好处 生菜不能和什么一起吃 洁尔阴洗液有什么作用
参透是什么意思 咲念什么 刘晓庆什么星座 为什么近视不可逆 五月二十八是什么日子
梦见自己生男孩是什么意思 什么水果最有营养 生理盐水敷脸有什么效果 血糖高什么原因引起 追什么
男人精液少是什么原因hcv7jop9ns1r.cn 吃番茄有什么好处xjhesheng.com 空是什么意思hcv8jop3ns3r.cn 摆谱是什么意思hcv9jop1ns2r.cn 湿气严重吃什么药好得快hcv9jop5ns5r.cn
脚背痛什么原因hcv9jop8ns2r.cn 心房扑动是什么意思hcv9jop1ns1r.cn 蛋白质偏高是什么原因hcv8jop4ns9r.cn 农历8月13日是什么星座hcv9jop0ns5r.cn 梦见花椒是什么意思hcv8jop9ns0r.cn
手脚麻木是什么原因hcv7jop5ns3r.cn 小海绵的真名叫什么hcv9jop2ns3r.cn 09年是什么年hcv8jop0ns6r.cn 嘴巴疱疹用什么药膏hcv9jop0ns2r.cn 家庭烧烤准备什么食材hcv9jop5ns5r.cn
白丝是什么hcv8jop6ns0r.cn 抉择是什么意思hcv9jop2ns3r.cn 塑料袋是什么垃圾hcv8jop3ns9r.cn 化疗有什么副作用hcv8jop2ns9r.cn 粉丝是什么做的zhongyiyatai.com
百度