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

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

?? uninstalldevdlg.cpp

?? 驅動的安裝和卸載
?? CPP
字號:
// UnInstallDevDlg.cpp : implementation file
//
#include "stdafx.h"
#include "UnInstallDev.h"
#include "UnInstallDevDlg.h"
static const GUID GUID_READER = {0x50dd5230,0xba8a,0x11d1,0xb5,0xfd,0x00,0x00,0xf8,0x05,0xf5,0x30};
static const GUID GUID_USBDEV = 
{ 0xA5DCBF10L, 0x6530, 0x11D2, { 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } };

static const GUID GUID_CAR = {0x4D36E96C,0xE325,0x11CE,0xBF,0xC1,0x08,0x00,0x2B,0xE1,0x03,0x18};


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUnInstallDevDlg dialog

CUnInstallDevDlg::CUnInstallDevDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CUnInstallDevDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CUnInstallDevDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CUnInstallDevDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUnInstallDevDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CUnInstallDevDlg, CDialog)
	//{{AFX_MSG_MAP(CUnInstallDevDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUnInstallDevDlg message handlers

BOOL CUnInstallDevDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	DeleteDevices();
	OnOK();
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CUnInstallDevDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CUnInstallDevDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CUnInstallDevDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}
 
BOOL CUnInstallDevDlg::DeleteDevices()
{
	BOOL bSuccess = FALSE;
	GUID hidGuid;
	memcpy(&hidGuid, &GUID_USBDEV, sizeof(GUID));
	HDEVINFO hDevInfo = SetupDiGetClassDevs(&hidGuid,
	NULL, // no enumerator 
	NULL, // no parent
	(DIGCF_PRESENT | DIGCF_INTERFACEDEVICE)); 
	if(!hDevInfo)
	{
		DT("Couldn't get handle for USB devices");
		return FALSE;
	}

	SP_INTERFACE_DEVICE_DATA devInfoData;
	devInfoData.cbSize = sizeof (SP_INTERFACE_DEVICE_DATA);

	SP_DEVINFO_DATA  spdevInfoData;
	spdevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
	int deviceNo = 0;

	SetLastError(NO_ERROR);

	while(GetLastError() != ERROR_NO_MORE_ITEMS)
	{
		if(SetupDiEnumInterfaceDevice (hDevInfo,
		0, 
		&hidGuid,
		deviceNo,
		&devInfoData))
		{
			ULONG requiredLength = 0;
			SetupDiGetInterfaceDeviceDetail(hDevInfo,
			&devInfoData,
			NULL,
			0,
			&requiredLength,
			NULL);

			PSP_INTERFACE_DEVICE_DETAIL_DATA devDetail = (SP_INTERFACE_DEVICE_DETAIL_DATA*) malloc (requiredLength);
			devDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);

			if(! SetupDiGetInterfaceDeviceDetail(hDevInfo,
			&devInfoData,
			devDetail,
			requiredLength,
			NULL,
			NULL)) 
			{
				DT("Couldn't get USB details");
				free(devDetail);
				return FALSE;
			}
			DT(devDetail->DevicePath);
			CString strDevicePath(devDetail->DevicePath);
			int  nFind = strDevicePath.Find(_T("usb#vid_eb1a&pid_2870#5&39fed2b0&0&3"));
			
			if(nFind == -1)
			{
				deviceNo++;
				continue;
			}
			else//find the device
			{
				bSuccess = SetupDiDeleteDeviceInterfaceData(hDevInfo, &devInfoData);
				bSuccess = SetupDiDeleteDeviceInterfaceRegKey(hDevInfo, &devInfoData, 0);
			}
			
		}

		bSuccess = SetupDiEnumDeviceInfo(hDevInfo, deviceNo, &spdevInfoData);
		if (bSuccess)
		{
			LPOLESTR  olestrGUID;
			char  szGUID[MAX_PATH];
			StringFromCLSID(spdevInfoData.ClassGuid, &olestrGUID);
			WideCharToMultiByte(CP_ACP, 0, olestrGUID, -1, szGUID, 
			MAX_PATH, NULL, NULL);
			CoTaskMemFree(olestrGUID);
			DT(szGUID);
			bSuccess = ChangeDeviceState(hDevInfo, spdevInfoData, DICS_STOP);
			bSuccess = SetupDiDeleteDeviceInfo(hDevInfo, &spdevInfoData);
			bSuccess = SetupDiDeleteDevRegKey(hDevInfo, &spdevInfoData, DICS_FLAG_GLOBAL, 0xFFFFFFFF, DIREG_BOTH );
//			DWORD dwEror = GetLastError();
			bSuccess = SetupDiCallClassInstaller(DIF_REMOVE, hDevInfo, &spdevInfoData);
			
			
		}
		deviceNo++;
	}

	bSuccess = FindExistingDevice("USB\\Vid_0ac8&Pid_305b&Rev_0100");
	if(bSuccess)
	{
		int nSesult = RemoveDriver("USB\\Vid_0ac8&Pid_305b&Rev_0100");
	}

	bSuccess = FindExistingDevice("USB\\Vid_0ac8&Pid_305b");
	if(bSuccess)
	{
		int nSesult = RemoveDriver("USB\\Vid_0ac8&Pid_305b");
	}
	return TRUE;
}

BOOL CUnInstallDevDlg::ChangeDeviceState(HDEVINFO hDevInfo, SP_DEVINFO_DATA& did, DWORD State)
{
  SP_PROPCHANGE_PARAMS pcp = {sizeof(SP_CLASSINSTALL_HEADER)};

  pcp.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
  pcp.Scope = (State == DICS_START || State == DICS_STOP )? DICS_FLAG_CONFIGSPECIFIC : DICS_FLAG_GLOBAL;
  pcp.StateChange = State;

  if(!::SetupDiSetClassInstallParams(hDevInfo, &did,
    (SP_CLASSINSTALL_HEADER *)&pcp, sizeof(pcp)))
  {
    DT("SetupDiSetClassInstallParams");
    return FALSE;
  }
  return TRUE;
}


BOOL CUnInstallDevDlg::FindExistingDevice(IN LPTSTR HardwareId)
{
    HDEVINFO DeviceInfoSet;
    SP_DEVINFO_DATA DeviceInfoData;
    DWORD i,err;
    BOOL Found = FALSE;

    DeviceInfoSet = SetupDiGetClassDevs(NULL,0,0, DIGCF_ALLCLASSES | DIGCF_PRESENT ); // All devices present on system

    if (DeviceInfoSet == INVALID_HANDLE_VALUE)
    {
		DT(TEXT("GetClassDevs(All Present Devices)"));
        return FALSE;
    }

    DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
    for (i=0; SetupDiEnumDeviceInfo(DeviceInfoSet,i,&DeviceInfoData); i++)
    {
        DWORD DataT;
        LPTSTR p,buffer = NULL;
        DWORD buffersize = 0;

        while (!SetupDiGetDeviceRegistryProperty(
            DeviceInfoSet,
            &DeviceInfoData,
            SPDRP_HARDWAREID,
            &DataT,
            (PBYTE)buffer,
            buffersize,
            &buffersize))
        {
            if (GetLastError() == ERROR_INVALID_DATA)
            {
                break;
            }
            else if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
            {
                if (buffer)
				{
                    LocalFree(buffer);
				}
                buffer = (char *)LocalAlloc(LPTR,buffersize);
            }
            else
            {
                err = GetLastError();
				SetupDiDestroyDeviceInfoList(DeviceInfoSet);
				SetLastError(err);
            }
        }

        if (GetLastError() == ERROR_INVALID_DATA)
		{
            continue;
		}
        //
        for (p=buffer;*p&&(p<&buffer[buffersize]);p+=lstrlen(p)+sizeof(TCHAR))
        {
            DT(TEXT("Compare device ID: [%s]\n"),p);
            if (_tcscmp(HardwareId,p) == 0)
            {
                Found = TRUE;
				if (buffer) 
				{
					LocalFree(buffer);
				}
                return TRUE;
            }
        }
    }

    return FALSE; 
}

BOOL CUnInstallDevDlg::InstallRootEnumeratedDriver(IN  LPTSTR HardwareId,
    IN  LPTSTR INFFile,
    OUT PBOOL  RebootRequired  OPTIONAL
    )
{
    HDEVINFO DeviceInfoSet = 0;
    SP_DEVINFO_DATA DeviceInfoData;
    GUID ClassGUID;
    TCHAR ClassName[MAX_PATH];
   
    if (!SetupDiGetINFClass(INFFile,&ClassGUID,ClassName,sizeof(ClassName),0))


    {
        return DT(TEXT("GetINFClass fail"));
    }

    DeviceInfoSet = SetupDiCreateDeviceInfoList(&ClassGUID,0);
    if(DeviceInfoSet == INVALID_HANDLE_VALUE)
    {
        return DT(TEXT("CreateDeviceInfoList Fail"));
    }

    DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
    if (!SetupDiCreateDeviceInfo(DeviceInfoSet,
        ClassName,
        &ClassGUID,
        NULL,
        0,
        DICD_GENERATE_ID,
        &DeviceInfoData))
    {
        DT(TEXT("CreateDeviceInfo fail"));
        SetupDiDestroyDeviceInfoList(DeviceInfoSet);
		return FALSE;
    }

    //
    // Add the HardwareID to the Device's HardwareID property.
    //
    if(!SetupDiSetDeviceRegistryProperty(DeviceInfoSet,
        &DeviceInfoData,
        SPDRP_HARDWAREID,
        (LPBYTE)HardwareId,
        (lstrlen(HardwareId)+1+1)*sizeof(TCHAR)))
    {
        DT(TEXT("SetDeviceRegistryProperty"));
        SetupDiDestroyDeviceInfoList(DeviceInfoSet);
		return FALSE;
    }

    //
    // Transform the registry element into an actual devnode
    // in the PnP HW tree.
    //
    if (!SetupDiCallClassInstaller(DIF_REGISTERDEVICE,
        DeviceInfoSet,
        &DeviceInfoData))
    {
        DT(TEXT("CallClassInstaller(REGISTERDEVICE)"));
        SetupDiDestroyDeviceInfoList(DeviceInfoSet);
		return FALSE;
    }

    if (!UpdateDriverForPlugAndPlayDevices(0,
        HardwareId,
        INFFile,
        INSTALLFLAG_FORCE,
        RebootRequired))
    {
        DWORD err = GetLastError();
        DT(TEXT("UpdateDriverForPlugAndPlayDevices fail"));

        if (!SetupDiCallClassInstaller(
            DIF_REMOVE,
            DeviceInfoSet,
            &DeviceInfoData))
        {
            DT(TEXT("CallClassInstaller(REMOVE)"));
        }

		return FALSE;
    }
	
    return TRUE;
}

int CUnInstallDevDlg::InstallDriver(_TCHAR *InfName, _TCHAR *HardwareID)
{
    WIN32_FIND_DATA FindFileData;
    BOOL RebootRequired = 0; // Must be cleared.
    _TCHAR *FName, *HWID;
    FName = InfName;
    HWID = HardwareID;

    if (FindFirstFile(FName,&FindFileData)==INVALID_HANDLE_VALUE)
    {
        DT(TEXT("File not found.\n"));
        return 2; // Install Failure
    }

    if (FindExistingDevice(HWID))
    {
        //
        // No Need to Create a Device Node, just call our API.
        //
        if (!UpdateDriverForPlugAndPlayDevices(0, // No Window Handle
            HWID, // Hardware ID
            FName, // FileName
            INSTALLFLAG_FORCE,
            &RebootRequired))
        {
            DT(TEXT("UpdateDriverForPlugAndPlayDevices fail"));
            return 2; // Install Failure
        }
    }
    else
    {
        if (GetLastError()!= ERROR_NO_MORE_ITEMS)
        {
            return 2; // Install Failure
        }
        if (!InstallRootEnumeratedDriver(HWID, // HardwareID
            FName, // FileName
            &RebootRequired))
        {
            DT(TEXT("(InstallRootEnumeratedDriver Failure! Code = 2)\n"));
            return 2; // Install Failure
        }
    }

    if (RebootRequired)
    {
        DT(TEXT("(Reboot Required)\n"));
        return 1; // Install Success, reboot required.
    }
    return 0; // Install Success, no reboot required.
}

int CUnInstallDevDlg::RemoveDriver(_TCHAR *HardwareID)
{
    HDEVINFO DeviceInfoSet;
    SP_DEVINFO_DATA DeviceInfoData;
    DWORD i;

    DeviceInfoSet = SetupDiGetClassDevs(NULL, // All Classes
        0,
        0,
        DIGCF_ALLCLASSES | DIGCF_PRESENT ); // All devices present on system

    if (DeviceInfoSet == INVALID_HANDLE_VALUE)
    {
        DT(TEXT("GetClassDevs(All Present Devices)"));
        return 1;
    }

    DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
    for (i=0;SetupDiEnumDeviceInfo(DeviceInfoSet,i,&DeviceInfoData);i++)
    {
        DWORD DataT;
        LPTSTR p,buffer = NULL;
        DWORD buffersize = 0;
		
        while (!SetupDiGetDeviceRegistryProperty(
            DeviceInfoSet,
            &DeviceInfoData,
            SPDRP_HARDWAREID,
            &DataT,
            (PBYTE)buffer,
            buffersize,
            &buffersize))
        {
            if (GetLastError() == ERROR_INVALID_DATA)
            {
                break;
            }
            else if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
            {
                if (buffer)
				{
                    LocalFree(buffer);
				}
                buffer = (char *)LocalAlloc(LPTR,buffersize);
            }
            else
            {
                DT(TEXT("GetDeviceRegistryProperty fail"));
                SetupDiDestroyDeviceInfoList(DeviceInfoSet);
            }
        }

        if (GetLastError() == ERROR_INVALID_DATA)
		{
            continue;
		}

   
        for (p=buffer;*p&&(p<&buffer[buffersize]);p+=lstrlen(p)+sizeof(TCHAR))
        {
            DT(TEXT("XXXXXXCompare device ID: [%s], HardwareID = [%s]\n"),p, HardwareID);
            if (_tcscmp(HardwareID,p) == 0)
            {
                if (!SetupDiCallClassInstaller(DIF_REMOVE,
                    DeviceInfoSet,
                    &DeviceInfoData))
                {
                    DT(TEXT("Remove Driver Fail"));
                }
				else
				{
					DT(TEXT("Remove Driver Success "));
				}
                break;
            }
        }

        if (buffer) 
		{
			LocalFree(buffer);
		}
    }

    if ((GetLastError()!=NO_ERROR) || (GetLastError()!=ERROR_NO_MORE_ITEMS))
    {
		return 1;
        DT(TEXT("EnumDeviceInfo fail"));
    }
    return 0;
}




?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜宅男影院| 亚洲综合视频网| 欧美xxxxx裸体时装秀| 3d动漫精品啪啪| 日韩视频一区在线观看| 欧美精品一级二级三级| 6080午夜不卡| 欧美一区二区视频免费观看| 日韩你懂的电影在线观看| 日韩免费在线观看| 久久久久久**毛片大全| 国产精品色在线观看| 综合久久久久久| 一区二区三区免费在线观看| 爽爽淫人综合网网站| 蜜臀久久99精品久久久久宅男| 久久精品免费看| 国产精品一区二区三区乱码| 成人av片在线观看| 欧洲一区在线电影| 欧美一级一区二区| 精品久久久久久亚洲综合网| 中文字幕不卡三区| 一区二区三区中文字幕在线观看| 亚洲国产成人tv| 蜜乳av一区二区| 国产精品亚洲成人| 91成人在线观看喷潮| 欧美一区欧美二区| 国产午夜精品久久久久久免费视| 综合欧美一区二区三区| 日韩精品亚洲专区| 黑人精品欧美一区二区蜜桃| 91性感美女视频| 制服丝袜一区二区三区| 亚洲国产精品激情在线观看| 一区二区三区在线视频观看| 捆绑变态av一区二区三区| 风间由美一区二区三区在线观看 | www.色综合.com| 欧美日韩国产综合一区二区三区 | 亚洲成av人片一区二区| 精品一区二区国语对白| 91亚洲男人天堂| 精品入口麻豆88视频| 亚洲欧美日韩小说| 美女高潮久久久| 91丨porny丨在线| 欧美成人高清电影在线| 日韩毛片一二三区| 精东粉嫩av免费一区二区三区| 911精品产国品一二三产区| 国产亚洲欧美日韩日本| 亚洲一卡二卡三卡四卡五卡| 国产自产高清不卡| 欧美色成人综合| 国产精品亲子乱子伦xxxx裸| 免费高清在线视频一区·| 91丨porny丨首页| 精品国内二区三区| 亚洲大片精品永久免费| 成人激情动漫在线观看| 日韩视频免费观看高清完整版| 成人免费在线视频观看| 国产一区二区三区黄视频| 欧美日韩电影在线播放| 亚洲欧洲日韩av| 国产尤物一区二区| 91精品国产色综合久久不卡电影 | 中文字幕av一区二区三区高| 日韩高清欧美激情| 色伊人久久综合中文字幕| 久久九九久精品国产免费直播| 日本在线不卡一区| 欧美主播一区二区三区| 日韩一区有码在线| 懂色av一区二区三区免费看| 日韩亚洲欧美在线| 午夜激情一区二区| 欧美三级中文字幕在线观看| 亚洲免费在线播放| av亚洲精华国产精华| 国产午夜亚洲精品午夜鲁丝片| 麻豆成人在线观看| 91麻豆精品国产91久久久使用方法 | 91浏览器入口在线观看| 久久只精品国产| 免费精品视频最新在线| 欧美美女一区二区| 亚洲在线一区二区三区| 日本精品裸体写真集在线观看 | 日本欧美在线观看| 欧美日韩国产一级片| 亚洲午夜视频在线观看| 色成年激情久久综合| 国产精品对白交换视频 | 国产欧美日韩中文久久| 国产麻豆一精品一av一免费| 精品盗摄一区二区三区| 麻豆中文一区二区| 欧美成人乱码一区二区三区| 久久er99精品| 精品国产亚洲在线| 国产精品456露脸| 国产日韩欧美激情| 不卡一区二区在线| 中文字幕制服丝袜一区二区三区| yourporn久久国产精品| 1024成人网色www| 91九色02白丝porn| 夜夜爽夜夜爽精品视频| 欧美日韩在线三级| 日韩成人av影视| 精品日韩99亚洲| 激情成人午夜视频| 国产日产欧产精品推荐色| www.av精品| 亚洲高清不卡在线观看| 日韩欧美一二三区| 国产精品888| 自拍偷拍欧美激情| 欧美肥妇free| 国产资源精品在线观看| 亚洲天堂免费在线观看视频| 欧美三级视频在线| 精彩视频一区二区| 国产精品电影院| 欧美日本在线一区| 国产剧情在线观看一区二区| 国产精品电影院| 欧美剧情片在线观看| 国产原创一区二区三区| 国产精品成人一区二区艾草| 91国产福利在线| 久久国产生活片100| 国产精品电影院| 7878成人国产在线观看| 国产精品亚洲а∨天堂免在线| 亚洲精品网站在线观看| 日韩精品在线看片z| www.亚洲激情.com| 青青草成人在线观看| 国产精品丝袜久久久久久app| 欧美日韩一区二区在线观看| 韩国一区二区三区| 一区二区成人在线观看| 精品欧美一区二区久久| 成人av电影在线| 免费成人在线影院| 亚洲图片另类小说| 精品少妇一区二区三区免费观看| 99久久久精品| 青青草国产成人99久久| 日韩毛片一二三区| 精品日韩一区二区三区免费视频| 色综合久久中文综合久久97| 精品一区二区三区在线视频| 一区二区三区在线视频免费观看| 久久久亚洲精华液精华液精华液| 色婷婷av一区二区三区大白胸 | 99riav一区二区三区| 日韩高清中文字幕一区| 国产亚洲美州欧州综合国| 欧美日韩电影一区| 91美女蜜桃在线| 国产在线视视频有精品| 亚洲成av人片| 亚洲欧美色图小说| 久久久久久久久99精品| 欧美精品在线视频| 日本韩国精品一区二区在线观看| 国产伦精一区二区三区| 欧美aⅴ一区二区三区视频| 亚洲伦在线观看| 国产欧美日韩三级| 日韩欧美在线综合网| 欧美日韩视频不卡| 91丨九色porny丨蝌蚪| 懂色中文一区二区在线播放| 蜜桃在线一区二区三区| 亚洲无人区一区| 亚洲男同性视频| 亚洲婷婷国产精品电影人久久| 国产欧美一区二区精品久导航 | 亚洲一区视频在线| 国产精品免费免费| 久久久蜜臀国产一区二区| 欧美一区二区视频在线观看 | 91麻豆精品国产| 欧美日韩一区二区三区在线看| 色综合咪咪久久| 91亚洲精品久久久蜜桃| 99久久伊人精品| 成人午夜大片免费观看| 粉嫩久久99精品久久久久久夜| 国产最新精品免费| 激情小说欧美图片| 国产麻豆91精品| 高清不卡一区二区在线| 国产成人自拍高清视频在线免费播放|