📄 packet.c
字号:
/////////////////////////////////////////////////////////////////////////
//// Copyright (c) 2001-2002
//// XStudio Technology All Right Reserved.
//// Author: Tony Zhu
//// 2001-7-16 Create
//// summary:
//// This Program to demo the Intermediate TDI Driver.
//// This is main file. It include:
//// 1. initialize function : DriverEntry
//// 2. Unload function : PacketUnload
//// 3. Dispatch function : PacketDispatch
/////////////////////////////////////////////////////////////////////////
//
//#include <ndis.h>
//#include <tdikrnl.h>
//#include <ntddk.h>
//#include "packet.h"
//
//NTSTATUS
//DriverEntry(
// IN PDRIVER_OBJECT DriverObject,
// IN PUNICODE_STRING RegistryPath
//)
//{
// NTSTATUS status = 0;
// ULONG i;
//
// DBGPRINT("DriverEntry Loading...\n");
// DriverObject->DriverUnload = PacketUnload;
//
// for (i=0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++)
// {
// DriverObject->MajorFunction[i] = PacketDispatch;
// }
//
// status = TCPFilter_Attach(DriverObject,RegistryPath);
//
// return status;
//}
//
//VOID
//PacketUnload(
// IN PDRIVER_OBJECT DriverObject
//)
//{
// PDEVICE_OBJECT DeviceObject;
// PDEVICE_OBJECT OldDeviceObject;
// PTDIH_DeviceExtension pTDIH_DeviceExtension;
//
// DBGPRINT("DriverEntry unLoading...\n");
//
// DeviceObject = DriverObject->DeviceObject;
//
// while (DeviceObject != NULL)
// {
// OldDeviceObject = DeviceObject;
// pTDIH_DeviceExtension
// = (PTDIH_DeviceExtension )DeviceObject->DeviceExtension;
// if( pTDIH_DeviceExtension->NodeType
// == TDIH_NODE_TYPE_TCP_FILTER_DEVICE )
// TCPFilter_Detach( DeviceObject ); // Calls IoDeleteDevice
// else
// IoDeleteDevice(OldDeviceObject);
// DeviceObject = DeviceObject->NextDevice;
// }
//}
//
//NTSTATUS
//PacketDispatch(
// IN PDEVICE_OBJECT DeviceObject,
// IN PIRP Irp
//)
//{
// NTSTATUS RC = STATUS_SUCCESS;
// PTDIH_DeviceExtension pTDIH_DeviceExtension;
// PIO_STACK_LOCATION IrpStack;
// PIO_STACK_LOCATION NextIrpStack;
//
// UCHAR *mdlBuffer;
//
// pTDIH_DeviceExtension
// = (PTDIH_DeviceExtension )(DeviceObject->DeviceExtension);
//
// IrpStack = IoGetCurrentIrpStackLocation(Irp);
//
// switch(IrpStack->MajorFunction)
// {
// case IRP_MJ_CREATE:
// DBGPRINT("PacketDispatch(IRP_MJ_CREATE)...\n");
// break;
// case IRP_MJ_CLOSE:
// DBGPRINT("PacketDispatch(IRP_MJ_CLOSE)...\n");
// break;
// case IRP_MJ_CLEANUP:
// DBGPRINT("PacketDispatch(IRP_MJ_CLEANUP)...\n");
// break;
// case IRP_MJ_INTERNAL_DEVICE_CONTROL:
// switch (IrpStack->MinorFunction)
// {
// case TDI_ACCEPT:
// DBGPRINT("PacketDispatch(IRP_MJ_INTERNAL_DEVICE_CONTROL\
// [TDI_ACCEPT])...\n");
// break;
// case TDI_ACTION:
// DBGPRINT("PacketDispatch(IRP_MJ_INTERNAL_DEVICE_CONTROL\
// [TDI_ACTION])...\n");
// break;
// case TDI_ASSOCIATE_ADDRESS:
// DBGPRINT("PacketDispatch(IRP_MJ_INTERNAL_DEVICE_CONTROL\
// [TDI_ASSOCIATE_ADDRESS])...\n");
// break;
// case TDI_DISASSOCIATE_ADDRESS:
// DBGPRINT("PacketDispatch(IRP_MJ_INTERNAL_DEVICE_CONTROL [TDI_DISASSOCIATE_ADDRESS])\n");
// break;
// case TDI_CONNECT:
// DBGPRINT("PacketDispatch(IRP_MJ_INTERNAL_DEVICE_CONTROL [TDI_CONNECT])\n");
// break;
// case TDI_DISCONNECT:
// DBGPRINT("PacketDispatch(IRP_MJ_INTERNAL_DEVICE_CONTROL [TDI_DISCONNECT])\n");
// break;
// case TDI_LISTEN:
// DBGPRINT("PacketDispatch(IRP_MJ_INTERNAL_DEVICE_CONTROL [TDI_LISTEN])\n");
// break;
// case TDI_QUERY_INFORMATION:
// DBGPRINT("PacketDispatch(IRP_MJ_INTERNAL_DEVICE_CONTROL [TDI_QUERY_INFORMATION])\n");
// break;
// case TDI_RECEIVE:
// DBGPRINT("PacketDispatch(IRP_MJ_INTERNAL_DEVICE_CONTROL [TDI_RECEIVE])\n");
//
// mdlBuffer = MmGetSystemAddressForMdlSafe (Irp->MdlAddress, LowPagePriority);
// DbgPrint("□□□□□□□Recv: %s", mdlBuffer);
// break;
// case TDI_RECEIVE_DATAGRAM:
// DBGPRINT("PacketDispatch(IRP_MJ_INTERNAL_DEVICE_CONTROL [TDI_RECEIVE_DATAGRAM])\n");
// break;
// case TDI_SEND:
// DBGPRINT("PacketDispatch(IRP_MJ_INTERNAL_DEVICE_CONTROL [TDI_SEND])\n");
//
// mdlBuffer = MmGetSystemAddressForMdlSafe (Irp->MdlAddress, LowPagePriority);
// DbgPrint("■■■■■■■Send: %s", mdlBuffer);
//
// break;
// case TDI_SEND_DATAGRAM:
// DBGPRINT("PacketDispatch(IRP_MJ_INTERNAL_DEVICE_CONTROL [TDI_SEND_DATAGRAM])\n");
// mdlBuffer = MmGetSystemAddressForMdlSafe (Irp->MdlAddress, LowPagePriority);
// DbgPrint("■■■■■■■Send: %s", mdlBuffer);
// break;
// case TDI_SET_EVENT_HANDLER:
// DBGPRINT("PacketDispatch(IRP_MJ_INTERNAL_DEVICE_CONTROL [TDI_SET_EVENT_HANDLER])\n");
// break;
// case TDI_SET_INFORMATION:
// DBGPRINT("PacketDispatch(IRP_MJ_INTERNAL_DEVICE_CONTROL [TDI_SET_INFORMATION])\n");
// mdlBuffer = MmGetSystemAddressForMdlSafe (Irp->MdlAddress, LowPagePriority);
// DbgPrint("□□□□□□□Recv: %s", mdlBuffer);
// break;
// default:
// DBGPRINT("PacketDispatch(IRP_MJ_INTERNAL_DEVICE_CONTROL [INVALID_MINOR_FUNCTION])\n");
// break;
// }
// break;
// case IRP_MJ_DEVICE_CONTROL:
//// DBGPRINT("PacketDispatch(IRP_MJ_DEVICE_CONTROL)...\n");
// break;
// default:
// DBGPRINT("PacketDispatch(OTHER_MAJOR_FUNCTION)...\n");
// break;
// }
//
// if (Irp->CurrentLocation == 1)
// {
// ULONG ReturnedInformation = 0;
//
// DBGPRINT(("PacketDispatch encountered bogus current location\n"));
//
// RC = STATUS_INVALID_DEVICE_REQUEST;
// Irp->IoStatus.Status = RC;
// Irp->IoStatus.Information = ReturnedInformation;
// IoCompleteRequest(Irp, IO_NO_INCREMENT);
//
// return( RC );
// }
//
// NextIrpStack = IoGetNextIrpStackLocation(Irp);
// *NextIrpStack = *IrpStack;
//
// IoSetCompletionRoutine(Irp,PacketCompletion,NULL,TRUE,TRUE,TRUE);
//
// return IoCallDriver(pTDIH_DeviceExtension->LowerDeviceObject,Irp);
//}
//
//NTSTATUS
//PacketCompletion(
// IN PDEVICE_OBJECT DeviceObject,
// IN PIRP Irp,
// IN PVOID Context
//)
//{
// if(Irp->PendingReturned)
// IoMarkIrpPending(Irp);
//
// return STATUS_SUCCESS;
//}
//
//NTSTATUS
//TCPFilter_Attach(
// IN PDRIVER_OBJECT DriverObject,
// IN PUNICODE_STRING RegistryPath
//)
//{
// NTSTATUS status = 0;
// UNICODE_STRING uniNtNameString;
// PTDIH_DeviceExtension pTDIH_DeviceExtension;
// PDEVICE_OBJECT pFilterDeviceObject = NULL;
// PDEVICE_OBJECT pTargetDeviceObject = NULL;
// PFILE_OBJECT pTargetFileObject = NULL;
// PDEVICE_OBJECT pLowerDeviceObject = NULL;
//
// DBGPRINT("TCPFilter_Attach.\n");
//
// RtlInitUnicodeString( &uniNtNameString, DD_TCP_DEVICE_NAME );
//
// status = IoGetDeviceObjectPointer(
// IN &uniNtNameString,
// IN FILE_READ_ATTRIBUTES,
// OUT &pTargetFileObject,
// OUT &pTargetDeviceObject
// );
// if( !NT_SUCCESS(status) )
// {
// DBGPRINT(("TCPFilter_Attach: Couldn't get the TCP Device Object\n"));
// pTargetFileObject = NULL;
// pTargetDeviceObject = NULL;
// return( status );
// }
//
// RtlInitUnicodeString( &uniNtNameString, TDIH_TCP_DEVICE_NAME );
//
// status = IoCreateDevice(
// IN DriverObject,
// IN sizeof( TDIH_DeviceExtension ),
// IN &uniNtNameString,
// IN pTargetDeviceObject->DeviceType,
// IN pTargetDeviceObject->Characteristics,
// IN FALSE,
// OUT &pFilterDeviceObject
// );
// if( !NT_SUCCESS(status) )
// {
// DBGPRINT(("TCPFilter_Attach: Couldn't create the TCP Filter Device Object\n"));
// ObDereferenceObject( pTargetFileObject );
// pTargetFileObject = NULL;
// pTargetDeviceObject = NULL;
// return( status );
// }
//
// pLowerDeviceObject
// = IoAttachDeviceToDeviceStack(pFilterDeviceObject,pTargetDeviceObject);
// if( !pLowerDeviceObject )
// {
// DBGPRINT(("TCPFilter_Attach: Couldn't attach to TCP Device Object\n"));
// IoDeleteDevice( pFilterDeviceObject );
// pFilterDeviceObject = NULL;
// ObDereferenceObject( pTargetFileObject );
// pTargetFileObject = NULL;
// pTargetDeviceObject = NULL;
// return( status );
// }
//
// pTDIH_DeviceExtension
// = (PTDIH_DeviceExtension )( pFilterDeviceObject->DeviceExtension );
// TCPFilter_InitDeviceExtension(
// IN pTDIH_DeviceExtension,
// IN pFilterDeviceObject,
// IN pTargetDeviceObject,
// IN pTargetFileObject,
// IN pLowerDeviceObject
// );
//
// pFilterDeviceObject->Flags |= pTargetDeviceObject->Flags
// & (DO_BUFFERED_IO | DO_DIRECT_IO);
// return status;
//}
//
//NTSTATUS
//TCPFilter_InitDeviceExtension(
// IN PTDIH_DeviceExtension pTDIH_DeviceExtension,
// IN PDEVICE_OBJECT pFilterDeviceObject,
// IN PDEVICE_OBJECT pTargetDeviceObject,
// IN PFILE_OBJECT pTargetFileObject,
// IN PDEVICE_OBJECT pLowerDeviceObject
//)
//{
// NdisZeroMemory( pTDIH_DeviceExtension, sizeof( TDIH_DeviceExtension ) );
// pTDIH_DeviceExtension->NodeType = TDIH_NODE_TYPE_TCP_FILTER_DEVICE;
// pTDIH_DeviceExtension->NodeSize = sizeof( TDIH_DeviceExtension );
// pTDIH_DeviceExtension->pFilterDeviceObject = pFilterDeviceObject;
// KeInitializeSpinLock(&(pTDIH_DeviceExtension->IoRequestsSpinLock));
// KeInitializeEvent(&(pTDIH_DeviceExtension->IoInProgressEvent)
// , NotificationEvent, FALSE);
// pTDIH_DeviceExtension->TargetDeviceObject = pTargetDeviceObject;
// pTDIH_DeviceExtension->TargetFileObject = pTargetFileObject;
// pTDIH_DeviceExtension->LowerDeviceObject = pLowerDeviceObject;
// pTDIH_DeviceExtension->DeviceExtensionFlags |= TDIH_DEV_EXT_ATTACHED;
// return( STATUS_SUCCESS );
//}
//
//VOID
//TCPFilter_Detach(
// IN PDEVICE_OBJECT pDeviceObject
//)
//{
// PTDIH_DeviceExtension pTDIH_DeviceExtension;
// BOOLEAN NoRequestsOutstanding = FALSE;
//
// pTDIH_DeviceExtension
// = (PTDIH_DeviceExtension )pDeviceObject->DeviceExtension;
// try
// {
// try
// {
// while (TRUE)
// {
// UTIL_IsLargeIntegerZero(
// NoRequestsOutstanding,
// pTDIH_DeviceExtension->OutstandingIoRequests,
// &(pTDIH_DeviceExtension->IoRequestsSpinLock)
// );
// if( !NoRequestsOutstanding )
// KeWaitForSingleObject(
// (void *)(&(pTDIH_DeviceExtension->IoInProgressEvent)),
// Executive, KernelMode, FALSE, NULL
// );
// else
// break;
// }
//
// if( pTDIH_DeviceExtension->DeviceExtensionFlags
// & TDIH_DEV_EXT_ATTACHED)
// {
// IoDetachDevice( pTDIH_DeviceExtension->TargetDeviceObject );
// pTDIH_DeviceExtension->DeviceExtensionFlags
// &= ~(TDIH_DEV_EXT_ATTACHED);
// }
//
// pTDIH_DeviceExtension->NodeType = 0;
// pTDIH_DeviceExtension->NodeSize = 0;
// if( pTDIH_DeviceExtension->TargetFileObject )
// ObDereferenceObject( pTDIH_DeviceExtension->TargetFileObject );
// pTDIH_DeviceExtension->TargetFileObject = NULL;
//
// IoDeleteDevice( pDeviceObject );
//
// DBGPRINT(("TCPFilter_Attach: TCPFilter_Detach Finished\n"));
// }
// except (EXCEPTION_EXECUTE_HANDLER){}
// }
// finally{}
// return;
//}
//
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -