本文主要是介绍?在tdi层截获socket操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
哦,这样啊。好吧,应用层的服务器端和客户端的应用程序就不用发了吧,就是tcp的典型操作,服务器端:socket,bind,listen,accept,send,receive
客户端:socket,connect,receive,send
驱动程序:
status = IoCreateDevice(pDriverObject, 0, NULL, FILE_DEVICE_UNKNOWN, 0, TRUE, &pTcpDevice);
status = IoCreateDevice(pDriverObject, 0, NULL, FILE_DEVICE_UNKNOWN, 0, TRUE, &pUdpDevice);
status = IoCreateDevice(pDriverObject, 0, NULL, FILE_DEVICE_UNKNOWN, 0, TRUE, &pIpDevice);
然后再一个一个 IoAttachDevice
status = IoAttachDevice(pTcpDevice, &Name, &pTcpDeviceOriginal);
处理irp的函数
switch (pIrpStack->MajorFunction)
{
case IRP_MJ_CREATE:
*status = TDICreate(pDeviceObject, pIrp, pIrpStack, &Callback);
break;
case IRP_MJ_INTERNAL_DEVICE_CONTROL:
{
if (TdiIoctl[i].MinorFunction == pIrpStack->MinorFunction)
。。。。。。
就是找不到receive,listen,accept的MinorFunction,只有connect的,send,还有几个不太了解的TDI_SET_EVENT_HANDLER和TDI_QUERY_INFORMATION
关键是它能截获send,receive为什么不可以,处理什么都一样啊,而且我用软件irptrace也是截获不到receive的控制码。这是最大的疑惑了。。。说明不是驱动程序问题?
这样我讲清楚了吗?
这篇关于?在tdi层截获socket操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!