⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 packet.c

📁 驱动枚举进程,控制线程AFFINITY,通过修改EPROCESS,ETHREAD ,KTHREAD 等结构,修改AFFINITY
💻 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 + -