首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IOCTL和IRP有什么区别?

IOCTL和IRP有什么区别?
EN

Stack Overflow用户
提问于 2013-09-19 17:40:04
回答 2查看 4.8K关注 0票数 4

我一直在研究一些关于驱动程序开发的代码工程文章,但是对IOCTL和IRPs有一些混淆。据我所见,IOCTL似乎是从用户模式发送的,并被转换为IRPs。IRPs是操作系统和设备之间的消息,但这似乎与我所读到的描述不一致…让我觉得我可能错过了什么。

TLDR IOCTL和IRP有什么区别?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-19 17:47:43

IRPs是Windows内核结构。当I/O请求在内核系统中移动时,它们被用来表示它。例如,需要从块设备读取的文件系统生成表示其读取请求的IRP,并将其交给块设备。块设备处理IRP,将结果放入IRP,标记它完成,并告诉文件系统查看IRP以获取数据。设备可以维护他们正在处理的IRPs队列。

IOCTL是对设备的请求,通常是从用户空间应用程序接收的.它们通常用于不适合标准API的请求。例如,通常不会使用IOCTL来打开文件系统上的文件。

当程序向设备发出IOCTL时,在内核空间中创建一个IRP (通常是控制)来反映该请求。

总之,IOCTL是对设备驱动程序的一种特殊类型的“杂项”请求。IRP是一种数据结构,用于管理Windows驱动程序内核架构中的各种请求。

票数 15
EN

Stack Overflow用户

发布于 2014-05-21 06:06:51

IOCTL是IO控制代码的助记符,或32位值,其中定义了位字段,为IO管理器提供缓冲和其他信息。IRP或IO请求包是IO管理器创建的结构或定义的内存块,其中包含驱动程序对IO请求(包括IOCTL )执行给定操作所需的所有信息。IOCTL用于内核和用户模式,但IRP仅在内核和目标驱动程序或驱动程序堆栈中有效。

从用户空间应用程序DeviceIoControl() -> kernel32.dll -> ntdll.dll ->到内核模式-> I/O Manager -> IRP

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18901467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档