energyg06
驱动牛犊
驱动牛犊
  • 注册日期2007-07-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:1928回复:5

windows I/O 机制

楼主#
更多 发布于:2007-12-07 10:36
近日在思考一个问题,始终不能确定,大家一起探讨一下吧!问题如下:
    在Windows WDM模型中,当用户层有一个IO请求时,是由I/O管理器负责分配IRP并将其传递给驱动程序堆栈的驱动程序进行处理的。但是当这个IO请求是一个网络相关请求时,还是首先由IO管理器分配IRP,再将其传递给各层网络驱动程序吗?好像不是啊!那这一块的处理过程是怎么样的呢??NDIS跟I/O管理器存在着什么样的关系?

还有就是NDIS跟WDM的关系是什么?
大家一起讨论一下,谢谢啊!
feifei1982
驱动牛犊
驱动牛犊
  • 注册日期2006-11-13
  • 最后登录2008-01-09
  • 粉丝0
  • 关注0
  • 积分340分
  • 威望35点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-12-08 10:24
irp都是i/o管理器分配的,然后从上到下传递。
irp从上到下的传递从一个驱动到另一个驱动也是通过i/o管理器进行的
NDIS与i/o管理器无从比较, NDIS是一种接口规范,而i/o管理器是操作系统的一部分
ndis与WDM的关系,这个我也想过。我觉得说成并列的关系更合适,NDIS不属于wdm驱动模型。
欢迎大家指教
energyg06
驱动牛犊
驱动牛犊
  • 注册日期2007-07-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-12-08 23:25
多谢捧场啊!!
我觉得应该把NDIS归类为一种特殊的WDM!因为在Windows驱动程序的分类中,并没有NDIS这一类,所以它只能属于WDM!
IO请求的问题我这么认为的,io管理器的irp首先传到tdi驱动程序处理,然后再由协议驱动程序处理,但协议驱动程序跟NDIS以及下层的小端口驱动程序的通信就不是通过IRP实现的,而是通过各个驱动程序注册的回调函数实现的!请指教!!!
rangzh
驱动小牛
驱动小牛
  • 注册日期2005-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望150点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-12-10 17:15
引用第2楼energyg06于2007-12-08 23:25发表的  :
多谢捧场啊!!
我觉得应该把NDIS归类为一种特殊的WDM!因为在Windows驱动程序的分类中,并没有NDIS这一类,所以它只能属于WDM!
IO请求的问题我这么认为的,io管理器的irp首先传到tdi驱动程序处理,然后再由协议驱动程序处理,但协议驱动程序跟NDIS以及下层的小端口驱动程序的通信就不是通过IRP实现的,而是通过各个驱动程序注册的回调函数实现的!请指教!!!
rangzh
驱动小牛
驱动小牛
  • 注册日期2005-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望150点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-12-10 17:24
引用第2楼energyg06于2007-12-08 23:25发表的  :
多谢捧场啊!!
我觉得应该把NDIS归类为一种特殊的WDM!因为在Windows驱动程序的分类中,并没有NDIS这一类,所以它只能属于WDM!
IO请求的问题我这么认为的,io管理器的irp首先传到tdi驱动程序处理,然后再由协议驱动程序处理,但协议驱动程序跟NDIS以及下层的小端口驱动程序的通信就不是通过IRP实现的,而是通过各个驱动程序注册的回调函数实现的!请指教!!!


大致如此。

举个Winsock应用的例子。应用程序通过Winsock API来使用Winsock,而Winsock API DLL(ws2_32.dll)依赖于Winsock Service Provider。Windows中,主要包括两个WSP:mswsock.dll和msafd.dll。前者封装了系统中注册的支持TDI的多种协议传输器,而后者则将Winsock接口转换为与文件系统兼容的接口。所以,Winsock应用的I/O形式与文件系统I/O形势一致。WSP依赖于ntdll.dll来打开内核模式下的辅助驱动afd.sys,afd.sys提供的接口与文件系统的操作接口一直,可用NtCreateFile,NtWriteFile,NtReadFile等来操作。而NtCreateFile/NtWriteFile/NtReadFile这些操作会把IRP发送到afd.sys的Dispatch函数,afd.sys再将这些IRP,或者构造新的IRP,并进一步通过TDI转发到实现了TDI街口的传输驱动。传输驱动通过NDIS接口把数据发出。
energyg06
驱动牛犊
驱动牛犊
  • 注册日期2007-07-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-12-11 23:30
谢谢rangzh啊,你讲的很清楚!
今天看了看《深入解析windows》,它上面也是这么说的!这本书很不错!讲的面面俱到,建议感兴趣的买本看看!!!
游客

返回顶部