-
-
[求助]:eek:NDIS miniport驱动中处理IRP_MJ_WRITE碰到的问题
-
发表于:
2013-3-22 14:41
3493
-
[求助]:eek:NDIS miniport驱动中处理IRP_MJ_WRITE碰到的问题
最近在调试Tap-win32虚拟网卡驱动的时候,碰到问题:
在应用程序中我调用WriteFile向Tap设备写入了64字节的TCP数据包,但是在“网上邻居”中“虚拟网卡”中只看到“接收了一个数据包”,看到“发送数据包为0”。
为了捕获刚才发送的数据,我创建了一个Socket应用程序,一直监听从虚拟网卡向外发送的数据,也收不到任何数据。
我在DriverEntry中调用NdisMRegisterMiniport中已经初始化了NDIS_MINIPORT_CHARACTERISTICS变量中的SendHandler。
现在的疑问是:在调用NdisMEthIndicateReceiveComplete后,NDIS库是不是应该调用网卡驱动的SendHandler函数向上层驱动转发前面从“WriteFile”传进来的数据?我想搞明白
在调用NdisMEthIndicateReceiveComplete后,系统干什么了?数据是经过一个什么样的过程转发给协议栈的?
部分源程序:
NTSTATUS
TapDeviceHook (IN PDEVICE_OBJECT p_DeviceObject, IN PIRP p_IRP)
{
......
case IRP_MJ_WRITE
{
......
NdisMEthIndicateReceive (
l_Adapter->m_MiniportAdapterHandle,
(NDIS_HANDLE) l_Adapter,
(unsigned char *) &l_Adapter->m_UserToTap,
sizeof (l_Adapter->m_UserToTap),
(unsigned char *) p_IRP->AssociatedIrp.SystemBuffer,
l_IrpSp->Parameters.Write.Length,
l_IrpSp->Parameters.Write.Length);
NdisMEthIndicateReceiveComplete(l_Adapter->m_MiniportAdapterHandle); p_IRP->IoStatus.Status = l_Status = STATUS_SUCCESS;
......
}
......
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)