什么是IRP处理程序将接收的数据包传输到Windows中的用户进程?

时间:2011-05-04 12:29:25

标签: windows winapi device-driver

我们知道Windows内核是由IRP(I / O请求包)驱动的,

当我们请求网页(或其他任何内容)时,NIC会收到IRP,那个IRP究竟是什么?

2 个答案:

答案 0 :(得分:0)

请参阅Windows TCP/IP Stack Components页面,了解此类请求所涉及的组件列表。

NDIS驱动程序模型确实隐藏了传递的IRP,并为组件公开了“回调”函数,以检查/转发/更改发送/接收请求的内容。

答案 1 :(得分:0)

NIC驱动器是NDIS框架,它不从协议驱动程序(Tcpip.sys)接收IRP;相反,它导出协议驱动程序调用的函数指针。

请参阅MSDN Initializing a Miniport DriverNDIS Driver Stack

在XP / 2k3 / 2000 : IRP使用TDI框架在更高的网络层发生;即AFD.SYS将TDI IoControl发送到Tcpip.sys。 AFD是一个TDI客户端,它通过向Tcpip.sys发送IRP来实现Winsock。

在Vista及更高版本:不推荐使用TDI,如果我猜对了,AFD.SYS使用WinSock Kernel与Tcpip.sys进行通信。没有IRP。

虽然在Vista上不推荐使用TDI,但如果安装TDI客户端或过滤器,将加载TDX.SYS并为您模拟TDI框架(也可通过WinSock内核)。在这种情况下,我们仍然可以看到来自TDI-client的TDI IRP ---(TDI)---> TDX ---(WSK)---> TCPIP。