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

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

?? drvmain.c

?? Pseudo Driver Test Demo Direct IO
?? C
字號(hào):
/*************************************************************************
/*
/*      Copyright 2004/02/03
/*      Author : Meng-Jer Tsai(Taiwan R.O.C)
/*      Email : mjtsai87@ms31.hinet.net
/*      Declaration and Agreement Statements:
/*      [1]This Program is free for redistribution with
/*         or without any modify of the source code containing
/*         in this source file on conditions that the Declaration
/*         and Agreement Statements is included.
/*      [2]If any damanage done to your computer system due to the
/*         execution of the source code in this file, no responsibility
/*         will be taken by the Author.
/*      [3]Any commercial binary executable product developed based on
/*         this source code must have the Copyright and all items in
/*         this Declaration and Agreement Statements in its User License
/*         Agreement, or will be regarded as inappropriate occupy of
/*         software creativity.
/*
/*************************************************************************/

/*************************************************************************
/*
/*       This file contains the implementation for mandatory part for
/*       Pseudo Driver to work with the support of the I/O Control Code
/*       handling and use Direct I/O for data read/write.
/*
/*************************************************************************/

#include <wdm.h>
#include "DrvMain.h"
#include "..\ShareFiles\Basic\WDMDefault.h"
#include "..\ShareFiles\PnP\PnP.h"
#include "..\ShareFiles\PM\PM.h"

UNICODE_STRING Global_sz_Drv_RegInfo;
UNICODE_STRING Global_sz_DeviceName;
PDEVICE_POWER_INFORMATION Global_PowerInfo_Ptr;

NTSTATUS 
  DriverEntry( 
    IN PDRIVER_OBJECT  DriverObject, 
    IN PUNICODE_STRING  RegistryPath 
	)
{
	RtlInitUnicodeString(
		&Global_sz_Drv_RegInfo,
		RegistryPath->Buffer);
	
	// Initialize function pointers

	DriverObject->DriverUnload = DriverUnload;
	DriverObject->DriverExtension->AddDevice = AddDevice;

	DriverObject->MajorFunction[IRP_MJ_CREATE] = PsdoDispatchCreate;
	DriverObject->MajorFunction[IRP_MJ_CLOSE] = PsdoDispatchClose;
	DriverObject->MajorFunction[IRP_MJ_READ] =  PsdoDispatchRead;
	DriverObject->MajorFunction[IRP_MJ_WRITE] =  PsdoDispatchWrite;
	DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = PsdoDispatchDeviceControl;
	DriverObject->MajorFunction[IRP_MJ_POWER] = PsdoDispatchPower;
	DriverObject->MajorFunction[IRP_MJ_PNP] = PsdoDispatchPnP;

	return STATUS_SUCCESS;
}

NTSTATUS
  AddDevice(
    IN PDRIVER_OBJECT  DriverObject,
    IN PDEVICE_OBJECT  PhysicalDeviceObject 
    )
{
	ULONG DeviceExtensionSize;
	PDEVICE_EXTENSION p_DVCEXT;
	PDEVICE_OBJECT ptr_PDO;
	NTSTATUS status;
	ULONG IdxPwrState;

	RtlInitUnicodeString(
		&Global_sz_DeviceName,
		L"\\DosDevices\\PSDODIRDVC");
	//Get DEVICE_EXTENSION required memory space
	DeviceExtensionSize = sizeof(DEVICE_EXTENSION);
	status = IoCreateDevice(
		DriverObject,
		DeviceExtensionSize,
		&Global_sz_DeviceName,
		FILE_DEVICE_UNKNOWN, 
		FILE_DEVICE_SECURE_OPEN, 
		FALSE,
		&ptr_PDO
    );

	if (NT_SUCCESS(status)) {
		ptr_PDO->Flags &= ~DO_DEVICE_INITIALIZING;
		ptr_PDO->Flags |= DO_DIRECT_IO;
		p_DVCEXT = ptr_PDO->DeviceExtension;
		p_DVCEXT->DeviceObject = ptr_PDO;
		RtlInitUnicodeString(
			&p_DVCEXT->Device_Description,
			L"This is a Direct I/O Driver for Pseudo Device\r\n"
			L"Created by mjtsai 2003/8/4\r\n");
		IoInitializeRemoveLock(
			&p_DVCEXT->RemoveLock,
			'KCOL',
			0,
			0
		);
		p_DVCEXT->DataBuffer = ExAllocatePool(
			NonPagedPool, 1024);
		RtlZeroMemory(
			p_DVCEXT->DataBuffer,
			1024);
		//Initialize driver power state
		p_DVCEXT->SysPwrState = PowerSystemWorking;
		p_DVCEXT->DevPwrState = PowerDeviceD0;

		//Initialize device power information
		Global_PowerInfo_Ptr = ExAllocatePool(
			NonPagedPool, sizeof(DEVICE_POWER_INFORMATION));
		RtlZeroMemory(
			Global_PowerInfo_Ptr,
			sizeof(DEVICE_POWER_INFORMATION));
		Global_PowerInfo_Ptr->SupportQueryCapability = FALSE;
		Global_PowerInfo_Ptr->DeviceD1 = 0;
		Global_PowerInfo_Ptr->DeviceD2 = 0;
		Global_PowerInfo_Ptr->WakeFromD0 = 0;
		Global_PowerInfo_Ptr->WakeFromD1 = 0;
		Global_PowerInfo_Ptr->WakeFromD2 = 0;
		Global_PowerInfo_Ptr->WakeFromD3 = 0;
		Global_PowerInfo_Ptr->DeviceWake = 0;
		Global_PowerInfo_Ptr->SystemWake = 0;
		for (IdxPwrState = 0;
			IdxPwrState < PowerSystemMaximum;
			IdxPwrState++)
		{
			Global_PowerInfo_Ptr->DeviceState[IdxPwrState] = 0;
		}
		//Store next-layered device object
		//Attach device object to device stack
		p_DVCEXT->NextDeviceObject = 
			IoAttachDeviceToDeviceStack(ptr_PDO, PhysicalDeviceObject);
	}

	return status;
}

VOID 
  DriverUnload( 
    IN PDRIVER_OBJECT  DriverObject 
    )
{
	PDEVICE_EXTENSION p_DVCEXT;

	DbgPrint("In DriverUnload : Begin\r\n");

	p_DVCEXT = DriverObject->DeviceObject->DeviceExtension;
	ExFreePool(Global_PowerInfo_Ptr);
	RtlFreeUnicodeString(&Global_sz_Drv_RegInfo);
	RtlFreeUnicodeString(
		&p_DVCEXT->Device_Description);
	IoDetachDevice(
		p_DVCEXT->DeviceObject);
	IoDeleteDevice(
		p_DVCEXT->NextDeviceObject);

	DbgPrint("In DriverUnload : End\r\n");
	return;
}

NTSTATUS
  PsdoDispatchCreate(
    IN PDEVICE_OBJECT  DeviceObject,
    IN PIRP  Irp
    )
{
	PIO_STACK_LOCATION p_IO_STK;
	PDEVICE_EXTENSION p_DVCEXT;
	NTSTATUS status;

	p_IO_STK = IoGetCurrentIrpStackLocation(Irp);
	p_DVCEXT = DeviceObject->DeviceExtension;
	status = IoAcquireRemoveLock(&p_DVCEXT->RemoveLock, p_IO_STK->FileObject);
	if (NT_SUCCESS(status)) {
		CompleteRequest(Irp, STATUS_SUCCESS, 0);
		return STATUS_SUCCESS;
	} else {
		IoReleaseRemoveLock(&p_DVCEXT->RemoveLock, p_IO_STK->FileObject);
		CompleteRequest(Irp, status, 0);
		return status;
	}
}

NTSTATUS
  PsdoDispatchClose(
    IN PDEVICE_OBJECT  DeviceObject,
    IN PIRP  Irp
    )
{
	PIO_STACK_LOCATION p_IO_STK;
	PDEVICE_EXTENSION p_DVCEXT;

	p_IO_STK = IoGetCurrentIrpStackLocation(Irp);
	p_DVCEXT = DeviceObject->DeviceExtension;
	IoReleaseRemoveLock(&p_DVCEXT->RemoveLock, 
		p_IO_STK->FileObject);
	CompleteRequest(Irp, STATUS_SUCCESS, 0);
	return STATUS_SUCCESS;
}

NTSTATUS
  PsdoDispatchRead(
    IN PDEVICE_OBJECT  DeviceObject,
    IN PIRP  Irp
    )
{
	PVOID Buf;		//Buffer provided by user program
	ULONG BufLen;	//Buffer length for user provided buffer
	ULONG Offset;//Buffer Offset
	PVOID DataBuf;  //Buffer provided by Driver
	ULONG DataLen;  //Buffer length for Driver Data Buffer
	ULONG ByteTransferred;
	PIO_STACK_LOCATION p_IO_STK;
	PDEVICE_EXTENSION p_DVCEXT;

	DbgPrint("IRP_MJ_READ : Begin\r\n");
	//Get I/o Stack Location & Device Extension
	p_IO_STK = IoGetCurrentIrpStackLocation(Irp);
	p_DVCEXT = DeviceObject->DeviceExtension;
	/*
	//Lock the physical memory referenced by MDL
	MmProbeAndLockPages(
		Irp->MdlAddress,
		KernelMode,
		IoWriteAccess
    );
	*/
	//Get User Output Buffer & Length 
	Buf = MmGetSystemAddressForMdlSafe(
		Irp->MdlAddress, HighPagePriority);
	//Buf = MmGetMdlVirtualAddress(Irp->MdlAddress);

	if (Buf == NULL) {
		DbgPrint("Can't get Virtual Address from MDL\r\n");
		return STATUS_INSUFFICIENT_RESOURCES;
	}
	BufLen = MmGetMdlByteCount(Irp->MdlAddress);
	Offset = MmGetMdlByteOffset(Irp->MdlAddress);

	//Get Driver Data Buffer & Length
	DataBuf = p_DVCEXT->DataBuffer;
	if (DataBuf == NULL)
		DataLen = 0;
	else
		DataLen = 1024;

	IoAcquireRemoveLock(&p_DVCEXT->RemoveLock, Irp);

	DbgPrint("Output Buffer Length : %d\r\n", BufLen);
	DbgPrint("Offset for Buffer in the Memory Page: %d\r\n", Offset);
	DbgPrint("Driver Data Length : %d\r\n", DataLen);
	//
	if (BufLen <= DataLen) {
		ByteTransferred = BufLen;	
	} else {
		ByteTransferred = DataLen;
	}
	
	RtlCopyMemory(
		Buf, 
		DataBuf, 
		ByteTransferred);

	IoReleaseRemoveLock(&p_DVCEXT->RemoveLock, Irp);
	//MmUnlockPages(Irp->MdlAddress);
	CompleteRequest(Irp, STATUS_SUCCESS, ByteTransferred);

	DbgPrint("IRP_MJ_READ : End\r\n");
	return STATUS_SUCCESS;
}

NTSTATUS
  PsdoDispatchWrite(
    IN PDEVICE_OBJECT  DeviceObject,
    IN PIRP  Irp
    )
{
	PVOID Buf;		//Buffer provided by user program
	ULONG BufLen;	//Buffer length for user provided buffer
	ULONG Offset;//Buffer Offset
	PVOID DataBuf;  //Buffer provided by Driver
	ULONG DataLen;  //Buffer length for Driver Data Buffer
	ULONG ByteTransferred;
	PIO_STACK_LOCATION p_IO_STK;
	PDEVICE_EXTENSION p_DVCEXT;
	NTSTATUS status;

	DbgPrint("IRP_MJ_WRITE : Begin\r\n");

	//Get I/o Stack Location & Device Extension
	p_IO_STK = IoGetCurrentIrpStackLocation(Irp);
	p_DVCEXT = DeviceObject->DeviceExtension;

	/*
	//Lock the physical memory referenced by MDL
	MmProbeAndLockPages(
		Irp->MdlAddress,
		KernelMode,
		IoReadAccess
    );
	*/

	//Get User Input Buffer & Length 
	Buf = MmGetSystemAddressForMdlSafe(
		Irp->MdlAddress, HighPagePriority);

	//Buf = MmGetMdlVirtualAddress(Irp->MdlAddress);

	if (Buf == NULL) {
		DbgPrint("Can't get Virtual Address from MDL\r\n");
		MmUnlockPages(Irp->MdlAddress);
		return STATUS_INSUFFICIENT_RESOURCES;
	}

	BufLen = MmGetMdlByteCount(Irp->MdlAddress);
	Offset = MmGetMdlByteOffset(Irp->MdlAddress);

	//Get Driver Data Buffer & Length
	DataBuf = p_DVCEXT->DataBuffer;
	DataLen = 1024;
	
	IoAcquireRemoveLock(&p_DVCEXT->RemoveLock, Irp);

	DbgPrint("Input Buffer Length : %d\r\n", BufLen);
	DbgPrint("Offset for Buffer in the Memory Page: %d\r\n", Offset);
	DbgPrint("Driver Data Length : %d\r\n", DataLen);

	if (BufLen <= DataLen) {
		ByteTransferred = BufLen;	
	} else {
		ByteTransferred = DataLen;
	}

	ByteTransferred = BufLen;
	RtlZeroMemory(
		p_DVCEXT->DataBuffer,
		1024);

	RtlCopyMemory(
		DataBuf,
		Buf, 
		ByteTransferred);

	IoReleaseRemoveLock(&p_DVCEXT->RemoveLock, Irp);
	//MmUnlockPages(Irp->MdlAddress);
	CompleteRequest(Irp, STATUS_SUCCESS, ByteTransferred);

	DbgPrint("IRP_MJ_WRITE : End\r\n");
	return STATUS_SUCCESS;
}

NTSTATUS
  PsdoDispatchDeviceControl(
    IN PDEVICE_OBJECT  DeviceObject,
    IN PIRP  Irp
    )
{
	ULONG code, cbin, cbout, info, pwrinf_size;
	PIO_STACK_LOCATION p_IO_STK;
	PDEVICE_EXTENSION p_DVCEXT;
	PDEVICE_POWER_INFORMATION pValue;
	ULONG IdxPwrState;
	NTSTATUS status;

	DbgPrint("IRP_MJ_DEVICE_IO_CONTROL : Begin\r\n");
	p_IO_STK = IoGetCurrentIrpStackLocation(Irp);
	p_DVCEXT = DeviceObject->DeviceExtension;
	code = p_IO_STK->Parameters.DeviceIoControl.IoControlCode;
	cbin = p_IO_STK->Parameters.DeviceIoControl.InputBufferLength;
	cbout = p_IO_STK->Parameters.DeviceIoControl.OutputBufferLength;
	IoAcquireRemoveLock(&p_DVCEXT->RemoveLock, Irp);

	switch(code)
	{
	case IOCTL_READ_DEVICE_INFO:
		if (p_DVCEXT->Device_Description.Length > cbout) {
			cbout = p_DVCEXT->Device_Description.Length;
			info = cbout;
		} else {
			info = p_DVCEXT->Device_Description.Length;
		}
			
		RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer,
			p_DVCEXT->Device_Description.Buffer,
			info);
		status = STATUS_SUCCESS;
		break;
	case IOCTL_READ_POWER_INFO:
		pwrinf_size = sizeof(DEVICE_POWER_INFORMATION);
		if (pwrinf_size > cbout)
		{
			cbout = pwrinf_size;
			info = cbout;
		} else {
			info = pwrinf_size;
		}
		//Display Related Device Power State
		DbgPrint("Support Query Device Capability : %$r\n",
			Global_PowerInfo_Ptr->SupportQueryCapability ? "Yes" : "No");
		DbgPrint("DeviceD1 : %d\r\n", Global_PowerInfo_Ptr->DeviceD1);
		DbgPrint("DeviceD2 : %d\r\n", Global_PowerInfo_Ptr->DeviceD2);
		DbgPrint("WakeFromD0 : %d\r\n", Global_PowerInfo_Ptr->WakeFromD0);
		DbgPrint("WakeFromD1 : %d\r\n", Global_PowerInfo_Ptr->WakeFromD1);
		DbgPrint("WakeFromD2 : %d\r\n", Global_PowerInfo_Ptr->WakeFromD2);
		DbgPrint("WakeFromD3 : %d\r\n", Global_PowerInfo_Ptr->WakeFromD3);
		DbgPrint("SystemWake : %d\r\n", Global_PowerInfo_Ptr->SystemWake);
		DbgPrint("DeviceWake : %d\r\n", Global_PowerInfo_Ptr->DeviceWake);
		for (IdxPwrState = 0;
			IdxPwrState < PowerSystemMaximum;
			IdxPwrState++)
		{
			DbgPrint("DeviceState[%d] : %d\r\n", 
				IdxPwrState, 
				Global_PowerInfo_Ptr->DeviceState[IdxPwrState]);
		}
#ifdef _DEF_HANDLE_BY_POWER_INFO_STRUCTURE
		pValue = (PDEVICE_POWER_INFORMATION)
			Irp->AssociatedIrp.SystemBuffer;
		pValue->SupportQueryCapability = Global_PowerInfo_Ptr->SupportQueryCapability;
		pValue->DeviceD1 = Global_PowerInfo_Ptr->DeviceD1;
		pValue->DeviceD2 = Global_PowerInfo_Ptr->DeviceD2;
		pValue->DeviceWake = Global_PowerInfo_Ptr->DeviceWake;
		pValue->SystemWake = Global_PowerInfo_Ptr->SystemWake;
		pValue->WakeFromD0 = Global_PowerInfo_Ptr->WakeFromD0;
		pValue->WakeFromD1 = Global_PowerInfo_Ptr->WakeFromD1;
		pValue->WakeFromD2 = Global_PowerInfo_Ptr->WakeFromD2;
		pValue->WakeFromD3 = Global_PowerInfo_Ptr->WakeFromD3;
		for (IdxPwrState = 0; 
			IdxPwrState < PowerSystemMaximum;
			IdxPwrState++)
		{
			pValue->DeviceState[IdxPwrState] = 
			Global_PowerInfo_Ptr->DeviceState[IdxPwrState];
		}
#else
		RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer,
			Global_PowerInfo_Ptr,
			info);
#endif
		status = STATUS_SUCCESS;
		break;
	default:
		info = 0;
		status = STATUS_INVALID_DEVICE_REQUEST;
		break;
	}

	IoReleaseRemoveLock(&p_DVCEXT->RemoveLock, Irp);

	CompleteRequest(Irp, STATUS_SUCCESS, info);
	DbgPrint("IRP_MJ_DEVICE_IO_CONTROL : End\r\n");
	return status;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
东方欧美亚洲色图在线| 日韩精品一区二区三区四区| 国产99久久精品| 国产精品香蕉一区二区三区| 韩国理伦片一区二区三区在线播放 | 欧美日韩在线播放| 在线观看av一区| 在线观看一区二区精品视频| 欧美吞精做爰啪啪高潮| 精品视频在线免费看| 欧美精品三级日韩久久| 91精品国产综合久久久蜜臀粉嫩 | 亚洲一区二区三区免费视频| 夜夜夜精品看看| 亚洲电影在线免费观看| 天堂蜜桃91精品| 奇米色一区二区三区四区| 麻豆精品国产传媒mv男同| 韩国女主播成人在线| 成人午夜电影久久影院| 99久久99久久精品国产片果冻| 91麻豆免费看片| 欧美人动与zoxxxx乱| 日韩美女一区二区三区| 日本一区二区三区视频视频| 1区2区3区欧美| 亚洲国产日韩精品| 久久国内精品自在自线400部| 国产黄色成人av| 一本一本久久a久久精品综合麻豆| 欧美亚洲图片小说| 欧美大胆一级视频| 中文字幕av一区 二区| 亚洲免费av在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 国内成人免费视频| 色婷婷综合久久久久中文一区二区| 欧美日韩在线直播| 久久久亚洲精品一区二区三区| 国产精品三级视频| 婷婷亚洲久悠悠色悠在线播放| 国产在线播放一区| 在线观看日韩高清av| 精品国偷自产国产一区| 亚洲私人黄色宅男| 蜜桃一区二区三区在线观看| 成年人午夜久久久| 91精品欧美综合在线观看最新| 国产亚洲一二三区| 亚洲精品免费一二三区| 久久精品国产一区二区三区免费看| 成人动漫视频在线| 欧美一区二区免费| 亚洲美女屁股眼交3| 久草热8精品视频在线观看| 99久久免费国产| 精品久久久网站| 亚洲国产精品一区二区久久 | 色欧美片视频在线观看| 日韩免费一区二区三区在线播放| 中文字幕永久在线不卡| 麻豆极品一区二区三区| 欧美午夜一区二区三区免费大片| 久久久久久久久97黄色工厂| 污片在线观看一区二区| 成人午夜在线视频| 欧美成人一区二区三区| 一区二区三区在线免费视频| 丁香天五香天堂综合| 日韩一区二区在线免费观看| 亚洲免费观看高清完整版在线 | 91精品国产综合久久久久久久久久 | 欧美日韩三级视频| 国产精品久99| 精品一二线国产| 精品视频一区三区九区| 亚洲欧美日韩国产另类专区| 国产精品自在欧美一区| 日韩天堂在线观看| 婷婷中文字幕一区三区| 91亚洲精品久久久蜜桃网站| 国产视频一区二区在线| 麻豆国产91在线播放| 欧美精品日韩一区| 伊人色综合久久天天人手人婷| 成人精品一区二区三区四区 | 亚洲一区二区视频在线| av中文字幕在线不卡| 国产日韩欧美精品电影三级在线| 免费的国产精品| 正在播放亚洲一区| 午夜精品一区二区三区三上悠亚| 91免费视频网址| 成人欧美一区二区三区白人| jizzjizzjizz欧美| 中文字幕乱码一区二区免费| 国产精品18久久久久| 精品福利一二区| 精品一区二区三区在线观看国产| 欧美一区二区三区电影| 日韩影视精彩在线| 欧美群妇大交群中文字幕| 亚洲第一综合色| 制服丝袜一区二区三区| 日韩av一级电影| 欧美白人最猛性xxxxx69交| 久久精品999| 久久久精品一品道一区| 国产成人亚洲精品青草天美| 久久色中文字幕| 国产91在线观看丝袜| 国产精品久久综合| 91在线精品一区二区| 亚洲蜜桃精久久久久久久| 色综合天天做天天爱| 一区二区三区在线观看国产 | 亚洲少妇30p| 一本一本久久a久久精品综合麻豆| 一区二区久久久久久| 欧美日韩黄视频| 美女网站色91| 国产无人区一区二区三区| av一本久道久久综合久久鬼色| 亚洲视频一二区| 欧美日韩一卡二卡| 美国三级日本三级久久99| 久久久久久久综合| eeuss鲁一区二区三区| 一区二区三区不卡在线观看| 欧美理论片在线| 国模娜娜一区二区三区| 国产精品无遮挡| 欧美中文字幕不卡| 九色综合狠狠综合久久| 国产精品美女久久久久久久久| 91在线精品一区二区| 日韩精品91亚洲二区在线观看 | 久久99精品国产麻豆婷婷| 久久久久久电影| 欧美在线免费观看亚洲| 免费成人在线网站| 国产精品天干天干在观线| 91久久免费观看| 久久精品99国产精品| 中文字幕一区二区三区在线不卡| 欧美色综合网站| 国产精品资源在线| 亚洲制服丝袜av| 欧美精品一区二区在线播放| 色综合天天综合给合国产| 日本vs亚洲vs韩国一区三区二区| 欧美韩国日本一区| 欧美日韩国产精选| 丁香天五香天堂综合| 日日摸夜夜添夜夜添亚洲女人| 中文字幕第一页久久| 91 com成人网| 99久久久无码国产精品| 久久国产免费看| 亚洲精品免费看| 欧美韩日一区二区三区四区| 欧美喷潮久久久xxxxx| 高清久久久久久| 日本一区中文字幕| 亚洲特黄一级片| 国产婷婷色一区二区三区四区| 欧美日本乱大交xxxxx| 99免费精品视频| 激情偷乱视频一区二区三区| 亚洲一区欧美一区| 国产精品视频一区二区三区不卡| 91精品欧美一区二区三区综合在| 97久久超碰国产精品电影| 韩国精品免费视频| 五月婷婷激情综合| 亚洲人成小说网站色在线| 久久精品一区蜜桃臀影院| 7777精品伊人久久久大香线蕉完整版 | 成人激情视频网站| 韩国av一区二区三区四区| 亚洲国产另类av| 亚洲精品美腿丝袜| 中文av一区二区| 久久免费的精品国产v∧| 5月丁香婷婷综合| 精品视频资源站| 在线亚洲欧美专区二区| youjizz久久| 福利视频网站一区二区三区| 久久99国产精品麻豆| 午夜欧美视频在线观看| 亚洲一区二区三区四区五区黄 | av在线播放不卡| 丁香六月综合激情| 国产一区在线看| 久久黄色级2电影| 久久精品99国产精品| 日韩av在线发布| 蜜臀91精品一区二区三区| 日韩av在线免费观看不卡|