哦,这样啊。好吧,应用层的服务器端和客户端的应用程序就不用发了吧,就是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的控制码。这是最大的疑惑了。。。说明不是驱动程序问题?
这样我讲清楚了吗?
服务器端: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的控制码。这是最大的疑惑了。。。说明不是驱动程序问题?
这样我讲清楚了吗?