亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usbfilter.c

?? 這是一個(gè)usb過濾驅(qū)動(dòng)。它也是基于wdm模型的
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
#include "USBFilter.h"

#define CURINFO1 " >> 進(jìn)入: "
#define CURINFO2 __FILE__ 
#define CURINFO3 " USBFilter.sys "  
#define CURINFO4 __DATE__   

#define CURINFO   CURINFO4 CURINFO3 CURINFO2  CURINFO1
/*************************************************************************************/
HANDLE pWriteFile;
HANDLE pReadFile;
PSTR WriteFilePath = "\\??\\C:\\WriteLog.txt";
PSTR ReadFilePath = "\\??\\C:\\ReadLog.txt";
UCHAR IoInfo[512*0x80];
typedef struct _FILE_WORK_ITEM
{
	PVOID FileContext;
	WORK_QUEUE_ITEM WorkItem;
	HANDLE FileHandle;
	PUNICODE_STRING pUFileName;
	ULONG Length;
	char OutFromFile[20];
	ULONG OutFromFileLen;
} FILE_WORK_ITEM,*PFILE_WORK_ITEM;


#define InitializeObjectAttributes( p, n, a, r, s ) { \
	(p)->Length = sizeof( OBJECT_ATTRIBUTES ); \
	(p)->RootDirectory = r; \
	(p)->Attributes = a; \
	(p)->ObjectName = n; \
	(p)->SecurityDescriptor = s; \
	(p)->SecurityQualityOfService = NULL; \
}

NTSTATUS
CreateLogFile(
			  IN PVOID Context,
			  IN OUT HANDLE *FileHandle,
			  IN PSTR FileName
			  );
VOID MyDriverCreateFileWorkItem(
								PVOID Context);
VOID MyDriverWriteFile(
					   IN PVOID Buffer,
					   IN ULONG Length,
					   IN OUT HANDLE FileHandle
					   );
VOID MyDriverWriteFileWorkItem(
							   PVOID Context);


VOID MyDriverCloseFile(
					   IN OUT HANDLE FileHandle);
VOID MyDriverCloseFileWorkItem(
							   PVOID Context);

/******************************************************************************************/

NTSTATUS
DriverEntry(PDRIVER_OBJECT DriverObject,
			PUNICODE_STRING RegistryPath)
{
	NTSTATUS ntStatus=STATUS_SUCCESS;
	PDRIVER_DISPATCH *DriverDispatch;
	ULONG i=0;
	
	DbgPrint(CURINFO "DriverEntry...\n");
	//+++++++++++++++++++++++++++++++++++++++++++
	UNREFERENCED_PARAMETER(RegistryPath);

	for (i=0,DriverDispatch=DriverObject->MajorFunction;
					i<=IRP_MJ_MAXIMUM_FUNCTION;
					i++,DriverDispatch++)
	{
		*DriverDispatch = USBFilter;
	}
	DriverObject->MajorFunction[IRP_MJ_SCSI]=USBFilterSCSI;
	DriverObject->MajorFunction[IRP_MJ_PNP] =USBFilterPnp;
	DriverObject->DriverExtension->AddDevice=USBFilterAddDevice;
	DriverObject->DriverUnload=USBFilterUnload;

	/*******************************************
	創(chuàng)建讀寫文件
	********************************************/
	RtlZeroMemory(IoInfo,512*0x80);
	ntStatus=CreateLogFile(NULL,&pWriteFile,WriteFilePath);
	if(!NT_SUCCESS(ntStatus))
	{
		DbgPrint("Create WriteFile is falied with error code 0x%08x\n",ntStatus);
		return ntStatus;
	}
	ntStatus=CreateLogFile(NULL,&pReadFile,ReadFilePath);
	if(!NT_SUCCESS(ntStatus))
	{
		DbgPrint("Create ReadFile is falied with error code 0x%08x\n",ntStatus);
		return ntStatus;
	}
	return ntStatus;
}
VOID
USBFilterUnload(PDRIVER_OBJECT DriverObject)
{
	PAGED_CODE();

	ASSERT(DriverObject->DeviceObject==NULL);
	DbgPrint(CURINFO "USBFilterUnload...\n");

	return;	
}

NTSTATUS
USBFilterAddDevice(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDevice)
{
	NTSTATUS ntStatus=STATUS_SUCCESS;
	PDEVICE_OBJECT object=NULL;
	PUSB_DEVICE_EXTENSION usbDeviceExe;
	ULONG deviceType=FILE_DEVICE_DISK;
	UNICODE_STRING ntName;
	UNICODE_STRING win32Name;

	DbgPrint(CURINFO "USBFilterAddDevice...\n");

	RtlInitUnicodeString(&ntName,L"\\Device\\USBFilter");
	RtlInitUnicodeString(&win32Name,L"\\DosDevices\\USBFilter");
	
	PAGED_CODE();

	if(!IoIsWdmVersionAvailable(1,0x20))
	{
		object=IoGetAttachedDeviceReference(PhysicalDevice);
		deviceType=object->DeviceType;
		ObDereferenceObject(object);
	}
	
	ntStatus=IoCreateDevice(DriverObject,\
							sizeof(USB_DEVICE_EXTENSION),\
							&ntName,\
							FILE_DEVICE_DISK,\
							FILE_DEVICE_SECURE_OPEN,\
							FALSE,\
							&object);
	if(!NT_SUCCESS(ntStatus))
	{
		DbgPrint(CURINFO "USBFilterAddDevice is falied...\n");
		return ntStatus;
	}
	
	usbDeviceExe=(PUSB_DEVICE_EXTENSION)object->DeviceExtension;

	usbDeviceExe->NextLowerDriver=IoAttachDeviceToDeviceStack(object,PhysicalDevice);
	if(!usbDeviceExe->NextLowerDriver)
	{
		DbgPrint(CURINFO "IoAttachDeviceToDeviceStack IS FALIED!...\n");
		IoDeleteDevice(object);
		return STATUS_UNSUCCESSFUL;
	}
	
	ntStatus=IoCreateSymbolicLink(&win32Name,&ntName);
	if(!NT_SUCCESS(ntStatus))
	{
		DbgPrint(CURINFO "IoCreateSymbolicLink is falied with error code 0x%x\n",ntStatus);
		return ntStatus;
	}

  object->Flags |= usbDeviceExe->NextLowerDriver->Flags & (DO_BUFFERED_IO | DO_DIRECT_IO | DO_POWER_PAGABLE);
	object->DeviceType=FILE_DEVICE_DISK;//deviceType;
	object->Characteristics=usbDeviceExe->NextLowerDriver->Characteristics;;
	usbDeviceExe->CurrentDeviceObject=object;
	
	
	IoInitializeRemoveLock(&usbDeviceExe->RemoveLock,POOL_TAG,1,100);
	
	INITIALIZE_PNP_STATE(usbDeviceExe);
	
	object->Flags&=~DO_DEVICE_INITIALIZING;
	return STATUS_SUCCESS;	
}




NTSTATUS
USBFilter(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
	NTSTATUS ntStatus=STATUS_SUCCESS;
	PUSB_DEVICE_EXTENSION USBDeviceExe;
	PIO_STACK_LOCATION IrpStack;
	PVOID InputBuffer;
	CHAR* OutputBuffer=" USBFilter ";
	
	DbgPrint(CURINFO " USBFilter...\n");
	IrpStack=IoGetCurrentIrpStackLocation(Irp);
	
	/****這里暫時(shí)用不上就現(xiàn)屏蔽了,如果需要這部分功能可以在從新打開
	if(IrpStack->MajorFunction==IRP_MJ_DEVICE_CONTROL)
	{
		if(IrpStack->Parameters.DeviceIoControl.IoControlCode==IOCTL_800_WRITE)
		{
		//	InputBuffer=Irp->AssociatedIrp.SystemBuffer;
		//	DbgPrint(CURINFO "USBFilter GetInformation IOCTL_800_WRITE: %s...\n",InputBuffer);
		}else if(IrpStack->Parameters.DeviceIoControl.IoControlCode==IOCTL_800_READ)
		{
		//	Irp->AssociatedIrp.SystemBuffer=(VOID*)OutputBuffer;
		//	DbgPrint(CURINFO "USBFilter GetInformation IOCTL_800_READ: %s...\n",OutputBuffer);
		}
	}*/
	
		USBDeviceExe=(PUSB_DEVICE_EXTENSION) DeviceObject->DeviceExtension;
	ntStatus=IoAcquireRemoveLock(&USBDeviceExe->RemoveLock,Irp);

	if (!NT_SUCCESS(ntStatus))
	{
		Irp->IoStatus.Status=ntStatus;
		IoCompleteRequest(Irp,IO_NO_INCREMENT);
		return ntStatus;
	}
	
	IoSkipCurrentIrpStackLocation(Irp);
	ntStatus=IoCallDriver(USBDeviceExe->NextLowerDriver,Irp);
	IoReleaseRemoveLock(&USBDeviceExe->RemoveLock,Irp);
	
	return	ntStatus;
}






NTSTATUS
USBFilterPnp(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
	NTSTATUS ntStatus=STATUS_SUCCESS;
	PUSB_DEVICE_EXTENSION USBDeviceExe;
	PIO_STACK_LOCATION IrpStack;
	KEVENT event;
	
	DbgPrint(CURINFO "USBFilterPnp...\n");

	PAGED_CODE();
	
	USBDeviceExe=(PUSB_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
	IrpStack=IoGetCurrentIrpStackLocation(Irp);
	ntStatus=IoAcquireRemoveLock(&USBDeviceExe->RemoveLock,Irp);
	if(!NT_SUCCESS(ntStatus))
	{
		DbgPrint(CURINFO " USBFilterPnp IoAcquireRemoveLock is falied with error code 0x%x\n",ntStatus);
		Irp->IoStatus.Status=ntStatus;
		IoCompleteRequest(Irp,IO_NO_INCREMENT);
		return ntStatus;
	}
	switch(IrpStack->MinorFunction)
	{
	case IRP_MN_START_DEVICE:
		DbgPrint(CURINFO " USBFilterPnp IRP_MN_START_DEVICE ...\n");
		KeInitializeEvent(&event,NotificationEvent,FALSE);
		IoCopyCurrentIrpStackLocationToNext(Irp);
		IoSetCompletionRoutine(Irp,\
							   (PIO_COMPLETION_ROUTINE)USBFilterStartCompletionRoutine,\
							   &event,\
							   TRUE,\
							   TRUE,\
							   TRUE);
		ntStatus=IoCallDriver(USBDeviceExe->NextLowerDriver,Irp);
		if(ntStatus==STATUS_PENDING)
		{
			KeWaitForSingleObject(&event,Executive,KernelMode,FALSE,NULL);
			ntStatus=Irp->IoStatus.Status;
		}
		if (NT_SUCCESS(ntStatus))
		{
			SET_NEW_PNP_STATE(USBDeviceExe,Started);

			if (USBDeviceExe->NextLowerDriver->Characteristics & FILE_REMOVABLE_MEDIA)
			{
				DeviceObject->Characteristics|=FILE_REMOVABLE_MEDIA;
			}
		}
		Irp->IoStatus.Status = ntStatus;
		IoCompleteRequest(Irp,IO_NO_INCREMENT);
		IoReleaseRemoveLock(&USBDeviceExe->RemoveLock,Irp);

		return ntStatus;
	case IRP_MN_REMOVE_DEVICE:		
		DbgPrint(CURINFO " USBFilterPnp IRP_MN_REMOVE_DEVICE ...\n");		
		IoReleaseRemoveLockAndWait(&USBDeviceExe->RemoveLock,Irp);		
		IoSkipCurrentIrpStackLocation(Irp);		
		ntStatus = IoCallDriver(USBDeviceExe->NextLowerDriver,Irp);		
		SET_NEW_PNP_STATE(USBDeviceExe,Deleted);		
		IoDetachDevice(USBDeviceExe->NextLowerDriver);
		IoDeleteDevice(DeviceObject);
		
		return	ntStatus;
	case IRP_MN_QUERY_STOP_DEVICE:
		
		DbgPrint(CURINFO " USBFilterPnp IRP_MN_QUERY_STOP_DEVICE ...\n");		
		
		SET_NEW_PNP_STATE(USBDeviceExe,StopPending);
		ntStatus = STATUS_SUCCESS;
		break;
	case IRP_MN_CANCEL_STOP_DEVICE:
		
		DbgPrint(CURINFO " USBFilterPnp IRP_MN_CANCEL_STOP_DEVICE ...\n");		
		
		if (StopPending == USBDeviceExe->DevicePnPState)
		{
			RESTORE_PREVIOUS_PNP_STATE(USBDeviceExe);
		}
		
		ntStatus = STATUS_SUCCESS;
		break;
		
	case IRP_MN_STOP_DEVICE:
		DbgPrint(CURINFO " USBFilterPnp IRP_MN_STOP_DEVICE ...\n");		
        SET_NEW_PNP_STATE(USBDeviceExe, Stopped);
        ntStatus = STATUS_SUCCESS;
        break;
		
    case IRP_MN_QUERY_REMOVE_DEVICE:
		
		DbgPrint(CURINFO " USBFilterPnp IRP_MN_QUERY_REMOVE_DEVICE ...\n");		
		
        SET_NEW_PNP_STATE(USBDeviceExe, RemovePending);
        ntStatus = STATUS_SUCCESS;
        break;
		
    case IRP_MN_SURPRISE_REMOVAL:
		
		DbgPrint(CURINFO " USBFilterPnp IRP_MN_SURPRISE_REMOVAL ...\n");		
		
        SET_NEW_PNP_STATE(USBDeviceExe, SurpriseRemovePending);
        ntStatus = STATUS_SUCCESS;
        break;
		
    case IRP_MN_CANCEL_REMOVE_DEVICE:
		
		DbgPrint(CURINFO " USBFilterPnp IRP_MN_CANCEL_REMOVE_DEVICE ...\n");		
		
		if(RemovePending == USBDeviceExe->DevicePnPState)
        {
            RESTORE_PREVIOUS_PNP_STATE(USBDeviceExe);
        }
		
        ntStatus = STATUS_SUCCESS; // We must not fail this IRP.
        break;
	case IRP_MN_DEVICE_USAGE_NOTIFICATION:
		
		DbgPrint(CURINFO " USBFilterPnp IRP_MN_DEVICE_USAGE_NOTIFICATION ...\n");		
		
		if ((DeviceObject->AttachedDevice == NULL) ||
            (DeviceObject->AttachedDevice->Flags & DO_POWER_PAGABLE)) {
			
            DeviceObject->Flags |= DO_POWER_PAGABLE;
        }
		
		IoCopyCurrentIrpStackLocationToNext(Irp);
		
		IoSetCompletionRoutine(
            Irp,
            FilterDeviceUsageNotificationCompletionRoutine,
            NULL,
            TRUE,
            TRUE,
            TRUE
            );
		
		return IoCallDriver(USBDeviceExe->NextLowerDriver, Irp);
		
	default:
		
		DbgPrint(CURINFO " USBFilterPnp Default ...\n");		
		
		ntStatus = Irp->IoStatus.Status;		
        break;
	}
	Irp->IoStatus.Status = ntStatus;
	IoSkipCurrentIrpStackLocation(Irp);
	ntStatus = IoCallDriver(USBDeviceExe->NextLowerDriver,Irp);
	IoReleaseRemoveLock(&USBDeviceExe->RemoveLock,Irp);

	return	ntStatus;
}


NTSTATUS
USBFilterStartCompletionRoutine(
	IN PDEVICE_OBJECT DeviceObject, 
	IN PIRP Irp, IN PVOID Context 
	)
{
	PKEVENT		event = (PKEVENT)Context;

	DbgPrint(CURINFO " FilterStartCompletionRoutine!...\n");

	UNREFERENCED_PARAMETER(DeviceObject);

	if (Irp->PendingReturned == TRUE)
	{
		KeSetEvent(event,IO_NO_INCREMENT,FALSE);
	}

	return STATUS_MORE_PROCESSING_REQUIRED;
}

NTSTATUS
FilterDeviceUsageNotificationCompletionRoutine(
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp,
    IN PVOID            Context
    )
{
	PUSB_DEVICE_EXTENSION       USBDeviceExe;

	DbgPrint(CURINFO "FilterDeviceUsageNotificationCompletionRoutine!...\n");

    UNREFERENCED_PARAMETER(Context);

    USBDeviceExe = (PUSB_DEVICE_EXTENSION) DeviceObject->DeviceExtension;

	if (Irp->PendingReturned) 
	{
        IoMarkIrpPending(Irp);
    }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区三区的国产在线播放| 麻豆国产精品一区二区三区 | 在线成人小视频| 久久超碰97中文字幕| 亚洲伦在线观看| 337p日本欧洲亚洲大胆色噜噜| 色综合婷婷久久| 国产剧情一区在线| 美腿丝袜一区二区三区| 亚洲一区二区三区三| 国产精品久久久久桃色tv| 日韩欧美的一区| 欧美人与禽zozo性伦| 99精品视频在线免费观看| 国产综合成人久久大片91| 亚洲妇女屁股眼交7| 最新高清无码专区| 欧美国产成人精品| 久久久久久电影| 日韩视频123| 这里是久久伊人| 欧美精品色一区二区三区| av一二三不卡影片| 国产成人午夜精品5599| 狠狠色丁香久久婷婷综| 美女www一区二区| 石原莉奈在线亚洲二区| 亚洲大片免费看| 一区二区在线免费| 亚洲精品v日韩精品| 国产精品国产精品国产专区不片| 国产夜色精品一区二区av| 精品日韩99亚洲| 久久综合久久综合久久| 欧美岛国在线观看| 日韩精品一区二区三区视频| 日韩色在线观看| 精品噜噜噜噜久久久久久久久试看 | 亚洲欧美一区二区三区极速播放 | 午夜视频久久久久久| 亚洲精品老司机| 一区二区三区在线免费| 亚洲日本青草视频在线怡红院 | 欧美zozo另类异族| 日韩欧美一级二级| 欧美videos中文字幕| 精品美女在线观看| 国产日韩欧美一区二区三区综合| 国产偷国产偷精品高清尤物| 国产欧美久久久精品影院| 中文欧美字幕免费| 亚洲色图视频网| 亚洲无人区一区| 丝袜亚洲另类欧美综合| 免费看欧美美女黄的网站| 精品一区二区三区在线观看 | 欧美美女直播网站| 4438x成人网最大色成网站| 日韩亚洲欧美一区| 久久久一区二区三区| 国产精品免费视频观看| 一区二区三区精品在线| 五月婷婷另类国产| 精品亚洲国产成人av制服丝袜 | 国产精品久久毛片a| 《视频一区视频二区| 一卡二卡三卡日韩欧美| 日韩国产在线一| 国产91在线观看丝袜| 色综合久久久久久久久久久| 91精品国产综合久久久久| 久久女同精品一区二区| 亚洲欧美日韩人成在线播放| 亚洲va欧美va天堂v国产综合| 日本不卡的三区四区五区| 国产精品一区专区| 在线视频亚洲一区| 精品国产免费人成电影在线观看四季 | 亚洲欧美日韩在线| 日本欧美一区二区三区乱码| 国产精品一区二区免费不卡| 色悠悠久久综合| 欧美一级二级在线观看| 国产精品乱码人人做人人爱| 亚洲1区2区3区4区| 国产成a人无v码亚洲福利| 色久综合一二码| 亚洲精品一区二区精华| 亚洲男人的天堂在线aⅴ视频| 琪琪一区二区三区| 成人黄色av网站在线| 欧美三级乱人伦电影| 国产婷婷色一区二区三区四区 | 免费在线观看日韩欧美| 波多野结衣精品在线| 欧美一区二区三区四区视频| 亚洲品质自拍视频网站| 韩国精品一区二区| 欧美日韩国产色站一区二区三区| 国产日韩欧美一区二区三区乱码 | 欧美一区日本一区韩国一区| 国产精品美女久久久久aⅴ| 免费观看30秒视频久久| 一本一道久久a久久精品 | 色琪琪一区二区三区亚洲区| 欧美mv日韩mv国产网站| 午夜国产不卡在线观看视频| 91视频免费播放| 久久久久久久综合| 蜜臀av一区二区| 欧美精品日韩一区| 亚洲一区在线免费观看| 99精品热视频| 欧美激情一区在线| 国产一区福利在线| 精品女同一区二区| 日本特黄久久久高潮| 欧美日韩国产bt| 亚洲一区在线观看免费观看电影高清| 成人一区二区三区| 欧美激情一区在线观看| 国产乱色国产精品免费视频| 精品久久久久久久久久久久包黑料| 天天综合网 天天综合色| 欧美三级日韩在线| 午夜伊人狠狠久久| 欧美吞精做爰啪啪高潮| 一区二区三区中文字幕| 一本久久精品一区二区| 亚洲视频每日更新| 97aⅴ精品视频一二三区| 国产精品久久精品日日| 成人免费高清视频| 中文字幕av一区 二区| 成人h动漫精品| 亚洲人成在线观看一区二区| 91在线看国产| 有码一区二区三区| 欧美性受xxxx黑人xyx| 亚洲一区二区中文在线| 欧美日韩一二三区| 日韩精品一二三四| 日韩欧美国产综合在线一区二区三区| 免费精品视频最新在线| 精品处破学生在线二十三| 国产精品羞羞答答xxdd| 国产欧美日产一区| 99国产精品国产精品毛片| 亚洲蜜桃精久久久久久久| 91久久国产最好的精华液| 亚洲国产视频直播| 日韩一区二区影院| 国产精品一区二区久久精品爱涩| 国产视频亚洲色图| 9l国产精品久久久久麻豆| 亚洲欧美激情在线| 欧美夫妻性生活| 精品亚洲成a人在线观看| 欧美激情综合网| 日本福利一区二区| 日本不卡免费在线视频| 久久精品一区二区三区四区| 99精品欧美一区二区三区小说 | 制服丝袜亚洲色图| 精品一区二区三区在线观看 | 日韩精品1区2区3区| 精品日韩一区二区三区免费视频| 国产传媒久久文化传媒| 亚洲视频香蕉人妖| 在线播放一区二区三区| 国产精品影视在线| 亚洲精品第一国产综合野| 欧美一区二区三区视频免费| 国产麻豆成人传媒免费观看| 亚洲女与黑人做爰| 欧美一区二区高清| 成人激情小说乱人伦| 亚洲成av人**亚洲成av**| 久久久九九九九| 欧美影院精品一区| 国产一二三精品| 亚洲成av人片在线| 欧美国产日韩精品免费观看| 欧美日韩一级视频| 国产91丝袜在线播放九色| 亚洲国产精品久久人人爱| 久久久久久99精品| 欧美日韩在线一区二区| 国产精品综合久久| 午夜视频在线观看一区| 国产精品视频一二| 日韩精品一区二区三区四区| 91亚洲国产成人精品一区二区三| 美国毛片一区二区| 亚洲精品中文在线| 国产日韩欧美一区二区三区乱码 | 国产成人av资源| 视频一区视频二区中文| 亚洲欧洲在线观看av| 精品国产伦理网|