- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
windows操作系统-io系统
* * * * * * * * * * * * * * * * * * * * * * 可以通过核心调试器的!thread命令查看挂起的线程IRP * * 可以通过资源工具包以及DDK工具查看Windows加载的驱动程序信息,包括设备映射、驱动程序对象、设备对象等等 * * * * * * * * * * * IRP的处理 I/O请求包 ??? 驱动程序 1 驱动程序 2 驱动程序 3 驱动程序 4 I/O 堆栈单元 1 I/O 堆栈单元 2 I/O 堆栈单元 3 I/O 堆栈单元 4 IRP 最低 最高 WDM的核心概念和数据结构 用户对设备的访问过程 Windows中对设备的访问分为用户态和核心态两种方式: 用户态通过调用Win32 API函数如ReadFile、WriteFile等访问设备,它不能直接控制硬件 核心态通过发送I/O请求包IRP来运行驱动程序实现对设备的控制 WDM的核心概念和数据结构 用户对设备的访问过程 应用程序 Win32子系统 用户态 核心态 I/O系统服务 I/O管理器 IRP 高层驱动程序 中层驱动程序 低层驱动程序 HAL WDM的核心概念和数据结构 WDM驱动程序的结构 分发例程 I/O 控制例程 StartIo AdapterControl OnInterrupt DpcForIsr DriverEntry AddDevice 基本驱动程序例程 必须的驱动程序例程 处理请求队列需要包含 StarIo 如果设备产生中断需要包含中断和 DPC 例程 DMA 操作需要包含 AdapterControl 例程 可选的 IRP 分发例程 DispatchPnp DispatchPower DispatchWmi DispatchRead DispatchWrite DriverEntry例程 驱动程序向I/O管理器显露一个名为DriverEntry的函数,在启动驱动程序的时候, I/O管理器将调用这个入口函数。 DriverEntry相当于作为应用程序入口的main函数或WinMain函数. 驱动程序可以被多个类似的硬件使用,但驱动程序的某些全局初始化操作只能在第一次被装入时执行一次,DriverEntry例程就是用于这个目的 DriverEntry例程的主要工作是把各种函数指针填入驱动程序对象,这些指针为操作系统指明了驱动程序容器中各种子例程的位置 WDM驱动程序的结构 DriverEntry例程 WDM驱动程序的结构 AddDevice例程 AddDevice函数的基本职责是创建一个设备对象并把它连接到以pdo为栈底的设备堆栈中,主要步骤如下: 调用IoCreateDevice创建设备对象,并建立一个私有的设备扩展对象。 注册一个或多个设备接口,以便应用程序能知道设备的存在。另外,还可以给出设备名并创建符号连接。 调用IoAttachDeviceToDeviceStack函数,把新设备对象放到堆栈上。 初始化设备对象的Flag成员。 WDM驱动程序的结构 1.创建设备对象与设备扩展对象 AddDevice例程 WDM驱动程序的结构 AddDevice例程 WDM驱动程序的结构 2.注册设备接口 AddDevice例程 WDM驱动程序的结构 3.建立设备堆栈 AddDevice例程 WDM驱动程序的结构 4.设置设备标志 其他必须的例程 DispatchPnp例程 DispatchPower例程 DispatchWmi例程 WDM驱动程序的结构 其他必须的例程??? DispatchPnp例程 WDM驱动程序的结构 NTSTATUS DispatchPnp(PDEVICE_OBJECT fdo, PIRP Irp) { PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp); ULONG fcn = stack - MinorFun ction; NTSTATUS status = StaTUS_SUCCESS; Switch( fcn ) { case IRP_MN_START_DEVICE : status = PnpStartDeviceHandler(fdo, irp); break; case IRP_MN_ REMOVE _DEVICE : status = PnpRemoveDeviceHandler(fdo, irp); break; ... default: PnpD efa
您可能关注的文档
最近下载
- TCPRA 4000.9-2025 文化数据服务平台技术要求 第9部分:运维管理系统.docx VIP
- 2025年部编六上语文《草原》公开课教案教学设计【一等奖】.pdf VIP
- 《直播电商基础与实务》-教案 项目8直播电商平台运营实战-教案.doc
- 抗凝药物临床应用指南.pptx VIP
- 学堂在线《医学科研设计》作业单元考核答案.docx VIP
- 庞加莱猜想证明概述.pdf VIP
- 2024年秋季新人教版9年级上册化学全册课件.pptx
- 药物化学 磺胺类药物及抗菌增效剂 磺胺类药物及抗菌增效剂 电子教案.doc VIP
- 高中地理校本课程教案.docx VIP
- 2024年山东成人学士学位英语考试真题解析 .docx VIP
文档评论(0)