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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dump.c

?? ddk wizard demo for vc programe
?? C
字號:
/*
 * Copyright (c) 1999, 2000
 *	Politecnico di Torino.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that: (1) source code distributions
 * retain the above copyright notice and this paragraph in its entirety, (2)
 * distributions including binary code include the above copyright notice and
 * this paragraph in its entirety in the documentation or other materials
 * provided with the distribution, and (3) all advertising materials mentioning
 * features or use of this software display the following acknowledgement:
 * ``This product includes software developed by the Politecnico
 * di Torino, and its contributors.'' Neither the name of
 * the University nor the names of its contributors may be used to endorse
 * or promote products derived from this software without specific prior
 * written permission.
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 */

#include <stdarg.h>
#include <ntddk.h>
#include <ntiologc.h>
#include <ndis.h>
#include "debug.h"
#include "packet.h"

#include "win_bpf.h"

//-------------------------------------------------------------------

NTSTATUS
NPF_OpenDumpFile(POPEN_INSTANCE Open , PUNICODE_STRING fileName, BOOLEAN Append)
{
	NTSTATUS ntStatus;
	IO_STATUS_BLOCK IoStatus;
	OBJECT_ATTRIBUTES ObjectAttributes;
	PWCHAR PathPrefix;
	USHORT PathLen;
	UNICODE_STRING FullFileName;
	ULONG FullFileNameLength;
	PDEVICE_OBJECT fsdDevice;

	FILE_STANDARD_INFORMATION StandardInfo;
	
    IF_LOUD(DbgPrint("NPF: OpenDumpFile.\n");)

	if(fileName->Buffer[0] == L'\\' &&
		fileName->Buffer[1] == L'?' &&
		fileName->Buffer[2] == L'?' &&
		fileName->Buffer[3] == L'\\'
	){
		PathLen = 0;
	}
	else{
		PathPrefix = L"\\??\\";
		PathLen = 8;
	}
	
	// Insert the correct path prefix.
	FullFileNameLength = PathLen + fileName->MaximumLength;
	
	FullFileName.Buffer = ExAllocatePoolWithTag(NonPagedPool, 
		FullFileNameLength,
		'0DWA');
	
	if (FullFileName.Buffer == NULL) {
		ntStatus = STATUS_INSUFFICIENT_RESOURCES;
		return ntStatus;
	}
	
	FullFileName.Length = PathLen;
	FullFileName.MaximumLength = (USHORT)FullFileNameLength;
	
	if(PathLen)
		RtlMoveMemory (FullFileName.Buffer, PathPrefix, PathLen);
	
	RtlAppendUnicodeStringToString (&FullFileName, fileName);
	
	IF_LOUD(DbgPrint( "Packet: Attempting to open %wZ\n", &FullFileName);)
	
	InitializeObjectAttributes ( &ObjectAttributes,
		&FullFileName,
		OBJ_CASE_INSENSITIVE,
		NULL,
		NULL );
	
	// Create the dump file
	ntStatus = ZwCreateFile( &Open->DumpFileHandle,
		SYNCHRONIZE | FILE_WRITE_DATA,
		&ObjectAttributes,
		&IoStatus,
		NULL,
		FILE_ATTRIBUTE_NORMAL,
		FILE_SHARE_READ,
		(Append)?FILE_OPEN_IF:FILE_SUPERSEDE,
		FILE_SYNCHRONOUS_IO_NONALERT,
		NULL,
		0 );

    if ( !NT_SUCCESS( ntStatus ) )
    {
        IF_LOUD(DbgPrint("NPF: Error opening file %x\n", ntStatus);)
		
        ExFreePool(FullFileName.Buffer);
		Open->DumpFileHandle=NULL;
        ntStatus = STATUS_NO_SUCH_FILE;
        return ntStatus;
    }
	
	ExFreePool(FullFileName.Buffer);
	
	ntStatus = ObReferenceObjectByHandle(Open->DumpFileHandle,
		FILE_WRITE_ACCESS,
		*IoFileObjectType,
		KernelMode,
		&Open->DumpFileObject,
		0);
	
    if ( !NT_SUCCESS( ntStatus ) )
    {
        IF_LOUD(DbgPrint("NPF: Error creating file, status=%x\n", ntStatus);)
			
		ZwClose( Open->DumpFileHandle );
		Open->DumpFileHandle=NULL;
		
        ntStatus = STATUS_NO_SUCH_FILE;
        return ntStatus;
    }
	
    fsdDevice = IoGetRelatedDeviceObject(Open->DumpFileObject);

	IF_LOUD(DbgPrint("NPF: Dump: write file created succesfully, status=%d \n",ntStatus);)

	return ntStatus;
}	

//-------------------------------------------------------------------

NTSTATUS
NPF_StartDump(POPEN_INSTANCE Open)
{
	NTSTATUS ntStatus;
	struct packet_file_header hdr;
	IO_STATUS_BLOCK IoStatus;
    NDIS_REQUEST pRequest;
	ULONG MediaType;
	OBJECT_ATTRIBUTES ObjectAttributes;

    IF_LOUD(DbgPrint("NPF: StartDump.\n");)

	// Init the file header
	hdr.magic = TCPDUMP_MAGIC;
	hdr.version_major = PCAP_VERSION_MAJOR;
	hdr.version_minor = PCAP_VERSION_MINOR;
	hdr.thiszone = 0; /*Currently not set*/
	hdr.snaplen = 1514;
	hdr.sigfigs = 0;

	// Detect the medium type
	switch (Open->Medium){
		
	case NdisMediumWan:
		hdr.linktype = DLT_EN10MB;
		break;
		
	case NdisMedium802_3:
		hdr.linktype = DLT_EN10MB;
		break;
		
	case NdisMediumFddi:
		hdr.linktype = DLT_FDDI;
		break;
		
	case NdisMedium802_5:			
		hdr.linktype = DLT_IEEE802;	
		break;
		
	case NdisMediumArcnet878_2:
		hdr.linktype = DLT_ARCNET;
		break;
		
	case NdisMediumAtm:
		hdr.linktype = DLT_ATM_RFC1483;
		break;
		
	default:
		hdr.linktype = DLT_EN10MB;
	}

	// Write the header.
	// We can use ZwWriteFile because we are in the context of the application
	ntStatus = ZwWriteFile(Open->DumpFileHandle,
		NULL,
		NULL,
		NULL,
		&IoStatus,
		&hdr,
		sizeof(hdr),
		NULL,
		NULL );

	
    if ( !NT_SUCCESS( ntStatus ) )
    {
        IF_LOUD(DbgPrint("NPF: Error dumping file %x\n", ntStatus);)
		
		ZwClose( Open->DumpFileHandle );
		Open->DumpFileHandle=NULL;
		
        ntStatus = STATUS_NO_SUCH_FILE;
        return ntStatus;
    }

	Open->DumpOffset.QuadPart=24;
			
	ntStatus = PsCreateSystemThread(&Open->DumpThreadHandle,
		THREAD_ALL_ACCESS,
		(ACCESS_MASK)0L,
		0,
		0,
		NPF_DumpThread,
		Open);
	
    if ( !NT_SUCCESS( ntStatus ) )
    {
        IF_LOUD(DbgPrint("NPF: Error creating dump thread, status=%x\n", ntStatus);)
		
		ZwClose( Open->DumpFileHandle );
		Open->DumpFileHandle=NULL;

        return ntStatus;
    }  

	ntStatus = ObReferenceObjectByHandle(Open->DumpThreadHandle,
		THREAD_ALL_ACCESS,
		NULL,
		KernelMode,
		&Open->DumpThreadObject,
		0);

    if ( !NT_SUCCESS( ntStatus ) )
    {
        IF_LOUD(DbgPrint("NPF: Error creating dump thread, status=%x\n", ntStatus);)
		
		ObDereferenceObject(Open->DumpFileObject);
		ZwClose( Open->DumpFileHandle );
		Open->DumpFileHandle=NULL;

        return ntStatus;
    }  

	
	return ntStatus;
	
}

//-------------------------------------------------------------------
// Dump Thread
//-------------------------------------------------------------------

VOID NPF_DumpThread(POPEN_INSTANCE Open)
{
	ULONG		FrozenNic;

    IF_LOUD(DbgPrint("NPF: In the work routine.  Parameter = 0x%0x\n",Open);)

	while(TRUE){

		// Wait until some packets arrive or the timeout expires
		NdisWaitEvent(&Open->DumpEvent, 5000);  

		IF_LOUD(DbgPrint("NPF: Worker Thread - event signalled\n");)
			
		if(Open->DumpLimitReached ||
			Open->Size==0){		// BufSize=0 means that this instance was closed, or that the buffer is too
									// small for any capture. In both cases it is better to end the dump

			IF_LOUD(DbgPrint("NPF: Worker Thread - Exiting happily\n");)
			IF_LOUD(DbgPrint("Thread: Dumpoffset=%I64d\n",Open->DumpOffset.QuadPart);)

			PsTerminateSystemThread(STATUS_SUCCESS);
			return;
		}
		
		NdisResetEvent(&Open->DumpEvent);

		// Write the content of the buffer to the file
		if(NPF_SaveCurrentBuffer(Open) != STATUS_SUCCESS){
			PsTerminateSystemThread(STATUS_SUCCESS);
			return;
		}
	
	}

}

//-------------------------------------------------------------------

NTSTATUS NPF_SaveCurrentBuffer(POPEN_INSTANCE Open)
{
	UINT		Thead;
	UINT		Ttail;
	UINT		TLastByte;
	PUCHAR		CurrBuff;
	NTSTATUS	ntStatus;
	IO_STATUS_BLOCK IoStatus;
    PMDL		lMdl;
	UINT		SizeToDump;

#if 0

	Thead=Open->Bhead;
	Ttail=Open->Btail;
	TLastByte=Open->BLastByte;
	
    IF_LOUD(DbgPrint("NPF: NPF_SaveCurrentBuffer.\n");)

	// Get the address of the buffer
	CurrBuff=Open->Buffer;
	//
	// Fill the application buffer
	//
	if( Ttail < Thead )
	{
		if(Open->MaxDumpBytes &&
			(UINT)Open->DumpOffset.QuadPart /*+ GetBuffOccupation(Open)*/ > Open->MaxDumpBytes)
		{
			// Size limit reached
			UINT PktLen;
			
			SizeToDump = 0;
			
			// Scan the buffer to detect the exact amount of data to save
			while(TRUE){
				PktLen = ((struct sf_pkthdr*)(CurrBuff + Thead + SizeToDump))->caplen + sizeof(struct sf_pkthdr);
				
				if((UINT)Open->DumpOffset.QuadPart + SizeToDump + PktLen > Open->MaxDumpBytes)
					break;
				
				SizeToDump += PktLen;
			}
			
		}
		else
			SizeToDump = TLastByte-Thead;
		
		lMdl=IoAllocateMdl(CurrBuff+Thead, SizeToDump, FALSE, FALSE, NULL);
		if (lMdl == NULL)
		{
			// No memory: stop dump
			IF_LOUD(DbgPrint("NPF: dump thread: Failed to allocate Mdl\n");)
			return STATUS_UNSUCCESSFUL;
		}
		
		MmBuildMdlForNonPagedPool(lMdl);
		
		// Write to disk
		NPF_WriteDumpFile(Open->DumpFileObject,
			&Open->DumpOffset,
			SizeToDump,
			lMdl,
			&IoStatus);
		
		IoFreeMdl(lMdl);
		
		if(!NT_SUCCESS(IoStatus.Status)){
			// Error
			return STATUS_UNSUCCESSFUL;
		}
		
		if(SizeToDump != TLastByte-Thead){
			// Size limit reached.
			Open->DumpLimitReached = TRUE;
	
			// Awake the application
			KeSetEvent(Open->ReadEvent,0,FALSE);

			return STATUS_UNSUCCESSFUL;
		}
		
		// Update the packet buffer
		Open->DumpOffset.QuadPart+=(TLastByte-Thead);
		Open->BLastByte=Ttail;
		Open->Bhead=0;
	}

	if( Ttail > Thead ){
		
		if(Open->MaxDumpBytes &&
			(UINT)Open->DumpOffset.QuadPart /* +GetBuffOccupation(Open)*/ > Open->MaxDumpBytes)
		{
			// Size limit reached
			UINT PktLen;
						
			SizeToDump = 0;
			
			// Scan the buffer to detect the exact amount of data to save
			while(Thead + SizeToDump < Ttail){

				PktLen = ((struct sf_pkthdr*)(CurrBuff + Thead + SizeToDump))->caplen + sizeof(struct sf_pkthdr);
				
				if((UINT)Open->DumpOffset.QuadPart + SizeToDump + PktLen > Open->MaxDumpBytes)
					break;
				
				SizeToDump += PktLen;
			}
			
		}
		else
			SizeToDump = Ttail-Thead;
				
		lMdl=IoAllocateMdl(CurrBuff+Thead, SizeToDump, FALSE, FALSE, NULL);
		if (lMdl == NULL)
		{
			// No memory: stop dump
			IF_LOUD(DbgPrint("NPF: dump thread: Failed to allocate Mdl\n");)
			return STATUS_UNSUCCESSFUL;
		}
		
		MmBuildMdlForNonPagedPool(lMdl);
		
		// Write to disk
		NPF_WriteDumpFile(Open->DumpFileObject,
			&Open->DumpOffset,
			SizeToDump,
			lMdl,
			&IoStatus);
		
		IoFreeMdl(lMdl);
		
		if(!NT_SUCCESS(IoStatus.Status)){
			// Error
			return STATUS_UNSUCCESSFUL;
		}
		
		if(SizeToDump != Ttail-Thead){
			// Size limit reached.
			Open->DumpLimitReached = TRUE;

			// Awake the application
			KeSetEvent(Open->ReadEvent,0,FALSE);
			
			return STATUS_UNSUCCESSFUL;
		}
		
		// Update the packet buffer
		Open->DumpOffset.QuadPart+=(Ttail-Thead);			
		Open->Bhead=Ttail;
		
	}
#endif
	return STATUS_SUCCESS;
}

//-------------------------------------------------------------------

NTSTATUS NPF_CloseDumpFile(POPEN_INSTANCE Open){
	NTSTATUS	ntStatus;
	IO_STATUS_BLOCK IoStatus;
    PMDL		WriteMdl;
    PUCHAR		VMBuff;
	UINT		VMBufLen;

#if 0
    IF_LOUD(DbgPrint("NPF: NPF_CloseDumpFile.\n");)
    IF_LOUD(DbgPrint("Dumpoffset=%d\n",Open->DumpOffset.QuadPart);)

DbgPrint("1\n");
	// Consistency check
	if(Open->DumpFileHandle == NULL)
		return STATUS_UNSUCCESSFUL;

DbgPrint("2\n");
	ZwClose( Open->DumpFileHandle );

	ObDereferenceObject(Open->DumpFileObject);
/*
	if(Open->DumpLimitReached == TRUE)
		// Limit already reached: don't save the rest of the buffer.
		return STATUS_SUCCESS;
*/
DbgPrint("3\n");

	NPF_OpenDumpFile(Open,&Open->DumpFileName, TRUE);

	// Flush the buffer to file 
	NPF_SaveCurrentBuffer(Open);

	// Close The file
	ObDereferenceObject(Open->DumpFileObject);
	ZwClose( Open->DumpFileHandle );
	
	Open->DumpFileHandle = NULL;

	ObDereferenceObject(Open->DumpFileObject);
#endif
	return STATUS_SUCCESS;
}

//-------------------------------------------------------------------

static NTSTATUS PacketDumpCompletion(PDEVICE_OBJECT DeviceObject,
                                PIRP Irp,
                                PVOID Context)
{

    // Copy the status information back into the "user" IOSB
    *Irp->UserIosb = Irp->IoStatus;
    
    // Wake up the mainline code
    KeSetEvent(Irp->UserEvent, 0, FALSE);
          
    return STATUS_MORE_PROCESSING_REQUIRED;
}

//-------------------------------------------------------------------

VOID NPF_WriteDumpFile(PFILE_OBJECT FileObject,
			                    PLARGE_INTEGER Offset,
								ULONG Length,
								PMDL Mdl,
								PIO_STATUS_BLOCK IoStatusBlock)
{
    PIRP irp;
    KEVENT event;
    PIO_STACK_LOCATION ioStackLocation;
    PDEVICE_OBJECT fsdDevice = IoGetRelatedDeviceObject(FileObject);
    NTSTATUS Status;
 
    // Set up the event we'll use
    KeInitializeEvent(&event, SynchronizationEvent, FALSE);
    
    // Allocate and build the IRP we'll be sending to the FSD
    irp = IoAllocateIrp(fsdDevice->StackSize, FALSE);

    if (!irp) {
        // Allocation failed, presumably due to memory allocation failure
        IoStatusBlock->Status = STATUS_INSUFFICIENT_RESOURCES;
        IoStatusBlock->Information = 0;

		return;
    }
    
    irp->MdlAddress = Mdl;
    irp->UserEvent = &event;
    irp->UserIosb = IoStatusBlock;
    irp->Tail.Overlay.Thread = PsGetCurrentThread();
    irp->Tail.Overlay.OriginalFileObject= FileObject;    
    irp->RequestorMode = KernelMode;
    
    // Indicate that this is a WRITE operation
    irp->Flags = IRP_WRITE_OPERATION;    
    
    // Set up the next I/O stack location
    ioStackLocation = IoGetNextIrpStackLocation(irp);
    ioStackLocation->MajorFunction = IRP_MJ_WRITE;
    ioStackLocation->MinorFunction = 0;
    ioStackLocation->DeviceObject = fsdDevice;
    ioStackLocation->FileObject = FileObject;
    IoSetCompletionRoutine(irp, PacketDumpCompletion, 0, TRUE, TRUE, TRUE);    
    ioStackLocation->Parameters.Write.Length = Length;    
    ioStackLocation->Parameters.Write.ByteOffset = *Offset;
    

    // Send it on.  Ignore the return code
    (void) IoCallDriver(fsdDevice, irp);
     
    // Wait for the I/O to complete.
    KeWaitForSingleObject(&event, Executive, KernelMode, TRUE, 0);

    // Free the IRP now that we are done with it
    IoFreeIrp(irp);

    return;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合色区另类av| 成人动漫在线一区| 国产91高潮流白浆在线麻豆| 日本丰满少妇一区二区三区| 久久久久久久免费视频了| 偷窥少妇高潮呻吟av久久免费| 国产一二精品视频| 欧美一区二区在线不卡| 亚洲另类中文字| www.在线成人| 国产精品全国免费观看高清| 九九九精品视频| 日韩一级欧美一级| 天天综合色天天综合色h| a级精品国产片在线观看| 国产人成亚洲第一网站在线播放| 蜜臀久久久99精品久久久久久| 欧美日韩视频一区二区| 亚洲资源中文字幕| 91成人看片片| 亚洲一区视频在线观看视频| 色婷婷久久久久swag精品| 亚洲日本一区二区| 91麻豆swag| 一区二区在线观看免费| 91福利国产成人精品照片| 亚洲理论在线观看| 在线看国产一区| 亚洲成a天堂v人片| 51精品秘密在线观看| 五月婷婷另类国产| 51精品国自产在线| 久久国产精品99久久久久久老狼 | 亚洲激情欧美激情| 在线观看视频91| 亚洲图片欧美视频| 7777精品伊人久久久大香线蕉 | 国产午夜亚洲精品不卡| 国产一区二区三区蝌蚪| 中文av一区特黄| 色久综合一二码| 日韩av电影天堂| 久久婷婷综合激情| 丁香婷婷综合五月| 亚洲女子a中天字幕| 欧美乱妇15p| 久久91精品久久久久久秒播| 国产情人综合久久777777| 91在线视频官网| 日韩综合小视频| 26uuu亚洲| 97se亚洲国产综合自在线不卡| 亚洲午夜电影在线观看| 日韩美女视频在线| 91在线看国产| 蜜桃传媒麻豆第一区在线观看| 精品国产一区二区三区忘忧草| 成人免费视频一区| 视频一区二区三区在线| 国产午夜亚洲精品午夜鲁丝片| 91免费小视频| 裸体一区二区三区| 成人欧美一区二区三区白人| 欧美精品三级在线观看| 国产成人综合在线播放| 天天操天天干天天综合网| 久久美女高清视频| 欧美日韩亚洲综合在线| 日韩午夜在线观看视频| 一区二区三区欧美亚洲| 国产一区二区三区美女| 亚洲精品日日夜夜| 精品欧美一区二区三区精品久久| 99精品桃花视频在线观看| 秋霞影院一区二区| 亚洲精品午夜久久久| 日韩欧美国产1| 91国偷自产一区二区开放时间 | 国产成人av影院| 亚洲国产成人va在线观看天堂| 国产亲近乱来精品视频| 欧美一级黄色大片| 欧美在线免费播放| 不卡在线视频中文字幕| 精品一区二区三区蜜桃| 亚洲成av人在线观看| 日韩一区在线免费观看| 久久久久国产精品免费免费搜索| 欧美日韩夫妻久久| 在线观看日韩国产| 99视频热这里只有精品免费| 国产在线精品一区二区| 蜜桃免费网站一区二区三区| 亚洲成人资源网| 亚洲与欧洲av电影| 一区二区三区成人| 亚洲精品免费一二三区| 国产精品久久久久久久岛一牛影视 | 不卡一二三区首页| 国产精品综合av一区二区国产馆| 日韩avvvv在线播放| 亚洲超丰满肉感bbw| 亚洲一区二区三区在线看| 亚洲美腿欧美偷拍| 亚洲色图.com| 亚洲欧洲综合另类| 亚洲四区在线观看| 亚洲欧美一区二区在线观看| 中文字幕第一区二区| 久久久久久久久97黄色工厂| 欧美电影免费观看高清完整版在 | 欧美性一级生活| 欧美午夜不卡在线观看免费| 欧美在线免费视屏| 欧美日韩三级在线| 51精品视频一区二区三区| 欧美日产在线观看| 日韩午夜在线观看视频| 日韩欧美亚洲另类制服综合在线| 日韩一区二区三| 精品国产免费一区二区三区四区| 日韩三级视频在线看| 精品国产三级电影在线观看| 国产色综合久久| 日韩毛片视频在线看| 亚洲图片另类小说| 亚洲国产一二三| 日本网站在线观看一区二区三区| 久久成人av少妇免费| 国产成人亚洲综合a∨婷婷图片 | 欧美二区在线观看| 欧美xxx久久| 国产色产综合产在线视频| 亚洲欧美综合色| 午夜欧美大尺度福利影院在线看| 日本成人在线视频网站| 国产很黄免费观看久久| 一本一本大道香蕉久在线精品 | 一区二区三区在线视频观看58| 日本网站在线观看一区二区三区 | 日本一不卡视频| 国产不卡视频一区二区三区| 91社区在线播放| 日韩欧美久久一区| 中文字幕永久在线不卡| 日韩精品成人一区二区三区| 国产美女在线观看一区| 色婷婷综合久久久中文一区二区| 欧美精品成人一区二区三区四区| 久久夜色精品国产噜噜av| 一区二区三区高清| 国内一区二区视频| 日本久久电影网| 久久久不卡网国产精品一区| 亚洲美女屁股眼交| 韩国成人福利片在线播放| 欧美性生活大片视频| 欧美国产精品一区二区三区| 香蕉加勒比综合久久| 成人av电影观看| 欧美成人video| 亚洲一二三级电影| 粉嫩av一区二区三区在线播放| 欧美日韩三级一区二区| 中文字幕字幕中文在线中不卡视频| 日本不卡一区二区| 欧美又粗又大又爽| 国产精品高潮呻吟久久| 国产美女一区二区| 日韩一区二区三区在线观看 | 欧美日韩国产综合久久| 国产精品色婷婷久久58| 久久精品999| 91精品国产一区二区三区香蕉| 一区二区三区影院| 成人免费视频播放| 国产丝袜在线精品| 精品影院一区二区久久久| 5566中文字幕一区二区电影| 亚洲一卡二卡三卡四卡| 91黄色小视频| 一区二区三区中文在线观看| 99精品国产一区二区三区不卡| 国产日韩在线不卡| 国产九九视频一区二区三区| 日韩一二三区不卡| 免费观看91视频大全| 欧美猛男gaygay网站| 亚洲成在人线在线播放| 欧美性一区二区| 亚洲二区在线观看| 欧美视频在线观看一区| 夜夜揉揉日日人人青青一国产精品| www.一区二区| 亚洲女人小视频在线观看| 91免费精品国自产拍在线不卡| 国产精品视频看| 色呦呦国产精品| 一区二区三区四区在线免费观看| 一本色道久久综合亚洲91|