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

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

?? usbhid.h

?? Latest USB 802.3, HID printer and mass storage divers from Microsoft for Platform Builder 4.2.
?? H
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*++

THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

Module Name:
    usbhid.h

Abstract:
    USB Client Driver for Human Interface Device (HID) Class.

Functions:

Notes:

--*/

#ifndef _USBHID_H_
#define _USBHID_H_

#include <windows.h>
#include <usbdi.h>

#include "usbclient.h"
#include "utils.h"

#include "hidpddi.h"
#include "hiddbg.h"
#include "queue.h"
#include "hiddi.h"


#define DRIVER_NAME             _T("USBHID.DLL")
#define DEVICE_PREFIX           _T("HID")

#define CLASS_NAME_SZ           _T("Hid_Class")
#define CLIENT_REGKEY_SZ        _T("Drivers\\USB\\ClientDrivers\\") CLASS_NAME_SZ

#define DEFAULT_SZ              _T("Default")
#define LOAD_CLIENTS_PATH_SZ    _T("Drivers\\HID\\LoadClients")
#define DLL_VALUE_SZ            _T("Dll")


#define USB_HID_SIG 'HBSU' // "USBH" tag
#define USB_HID_CLIENT_SIG 'CDIH' // "HIDC" tag

#define MANUAL_RESET_EVENT TRUE
#define AUTO_RESET_EVENT   FALSE


// Class-specific definitions (from the HID specification).
// Must use IssueVendorTransfer to make these requests.
#define USB_REQUEST_HID_GET_REPORT      0x01
#define USB_REQUEST_HID_GET_IDLE        0x02
#define USB_REQUEST_HID_GET_PROTOCOL    0x03
#define USB_REQUEST_HID_SET_REPORT      0x09
#define USB_REQUEST_HID_SET_IDLE        0x0A
#define USB_REQUEST_HID_SET_PROTOCOL    0x0B

#define HID_DESCRIPTOR_TYPE             0x21
#define HID_REPORT_DESCRIPTOR_TYPE      0x22

#define HID_INTERFACE_NO_SUBCLASS       0x00
#define HID_INTERFACE_BOOT_SUBCLASS     0x01

#define HID_BOOT_PROTOCOL               0x00
#define HID_REPORT_PROTOCOL             0x01


#pragma pack (1)
typedef struct _HID_DESCRIPTOR
{
    UCHAR   bLength;
    UCHAR   bDescriptorType;
    USHORT  bcdHID;
    UCHAR   bCountryCode;
    UCHAR   bNumDescriptors;
    UCHAR   bClassDescriptorType;
    USHORT  wDescriptorLength;
} HID_DESCRIPTOR, *PHID_DESCRIPTOR;
#pragma pack ()


typedef struct _FLAGS {
    UCHAR    Open           : 1; // bits 0
    UCHAR    UnloadPending  : 1; // bits 1
    UCHAR    Reserved       : 6; // bits 2-7
} FLAGS, *PFLAGS;


struct _HID_CLIENT_HANDLE;

//
// Our notion of a Pipe
//
typedef struct _PIPE {
    //
    // USB Pipe handle received from the stack
    //
    USB_PIPE hPipe;

    //
    // Endpoint's Address
    //
    UCHAR bIndex;

    //
    // Endpoint's wMaxPacketSize
    //
    USHORT wMaxPacketSize;

    //
    // Completion Event
    //
    HANDLE hEvent;

} PIPE, *PPIPE;


typedef struct _USBHID_CONTEXT {
    //
    // We use a Signature (defined above) for validation
    //
    ULONG Sig;

    //
    // sync object for this instance
    //
    CRITICAL_SECTION csLock;

#ifdef DEBUG
    // The current depth of csLock
    INT cInCS;
#endif

    //
    // USB handle to the device
    //
    USB_HANDLE hUsbDevice;

    //
    // USBD Function table
    //
    LPCUSB_FUNCS pUsbFuncs;

    //
    // Fields from USB_INTERFACE that we need
    //
    LPCUSB_INTERFACE pUsbInterface;

    //
    // Interrupt In Pipe
    //
    PIPE InterruptIn;

    //
    // completion signal used for endpoint 0 (control)
    //
    HANDLE hEP0Event;

    //
    // Signals the device has been closed.
    //
    HANDLE hThread;

    //
    // FLAGS
    //
    FLAGS Flags;

    // Regarding fSendToInterface.  The original HID spec said that the Hid
    // descriptor would come after the interface and endpoint descriptors.
    // It also said that class specific commands should be sent to the endpoint.
    // The next spec said that the HID descriptor would come after the interface
    // descriptor (not at the end) and that commands should be sent to the
    // interface, not to the endpoint.  So, I'm assuming that if I find the
    // Hid descriptor after the interface, the device is following the new spec
    // and I should send commands to the interface.  Otherwise, I'll send them
    // to the endpoint, as stated in the old spec.
    BOOL fSendToInterface;

    // Our parsed report descriptor data
    PHIDP_DEVICE_DESC phidpDeviceDesc;

    // The queues used to send data to HID clients
    HidTLCQueue *pQueues;

    // The structures passed to HID clients as a handle
    _HID_CLIENT_HANDLE *pClientHandles;

} USBHID_CONTEXT, *PUSBHID_CONTEXT;


//
// Is the pointer a valid PUSBHID_CONTEXT
//
#define VALID_CONTEXT( p ) \
   ( p && (USB_HID_SIG == p->Sig) )


// This is what gets passed to HID clients as a handle
typedef struct _HID_CLIENT_HANDLE {
    // We use a Signature (defined above) for validation
    ULONG Sig;

    HINSTANCE hInst;
    LPVOID lpvNotifyParameter;
    PUSBHID_CONTEXT pUsbHid;
    PHIDP_PREPARSED_DATA phidpPreparsedData;
    HidTLCQueue *pQueue;
    HID_DRIVER_SETTINGS driverSettings;
} HID_CLIENT_HANDLE, *PHID_CLIENT_HANDLE;

// Is the pointer a valid PHID_CLIENT_HANDLE
#define VALID_CLIENT_HANDLE( p ) \
   ( p && (USB_HID_CLIENT_SIG == p->Sig) )


// The size in bytes of the global array of devices
#define HID_ARRAY_BYTE_SIZE(count) (sizeof(PUSBHID_CONTEXT) * count)


//
// USB_DRIVER_SETTINGS
//
// As specified in the HID spec, HID class devices are identified in 
// the interface descriptor, so we only need to specify the 
// dwInterfaceClass field.
//
#define DRIVER_SETTINGS \
            sizeof(USB_DRIVER_SETTINGS),  \
            USB_NO_INFO,   \
            USB_NO_INFO,   \
            USB_NO_INFO,   \
            USB_NO_INFO,   \
            USB_NO_INFO,   \
            USB_NO_INFO,   \
            USB_DEVICE_CLASS_HUMAN_INTERFACE,      \
            USB_NO_INFO,   \
            USB_NO_INFO


// Hid functions
BOOL
InitializeGlobalHidData(
    void
    );

void
FreeGlobalHidData(
    void
    );

LPCUSB_INTERFACE
ParseUsbDescriptors(
    USB_HANDLE hUsbDevice,
    LPCUSB_FUNCS pUsbFuncs,
    LPCUSB_INTERFACE pCurrInterface
    );

PUSBHID_CONTEXT
CreateHidDevice(
    USB_HANDLE hUsbDevice,
    PCUSB_FUNCS pUsbFuncs,
    PCUSB_INTERFACE pUsbInterface
    );

BOOL
AddDeviceToList(
    PUSBHID_CONTEXT pUsbHid
    );

void
RemoveDeviceContext(
   PUSBHID_CONTEXT pUsbHid
   );

BOOL
CreateInterruptThread(
    PUSBHID_CONTEXT pUsbHid
    );

void
ProcessReport(
    PUSBHID_CONTEXT pUsbHid,
    BYTE *pData,
    DWORD cbData
    );

DWORD
ClearEndpointZeroStall(
    PUSBHID_CONTEXT pUsbHid
    );

void
DetermineDestination(
    PUSBHID_CONTEXT pUsbHid,
    BYTE *pbmRequestType,
    USHORT *pwIndex
    );


DWORD
WINAPI
GetReport(
    HID_HANDLE       hDevice,
    HIDP_REPORT_TYPE type,
    PCHAR            pbBuffer,
    DWORD            cbBuffer,
    PDWORD           pcbTransferred,
    DWORD            dwTimeout
    );

DWORD
WINAPI
SetReport(
    HID_HANDLE       hDevice,
    HIDP_REPORT_TYPE type,
    PCHAR            pbBuffer,
    DWORD            cbBuffer,
    DWORD            dwTimeout
    );

DWORD
WINAPI 
GetInterruptReport(
    HID_HANDLE hDevice,
    PCHAR      pbBuffer,
    DWORD      cbBuffer, 
    PDWORD     pcbTransferred,
    HANDLE     hCancel,
    DWORD      dwTimeout
    );

#define RegOpenKey(hkey, lpsz, phk) \
        RegOpenKeyEx((hkey), (lpsz), 0, 0, (phk))


#ifdef DEBUG

//
// ***** Debug utility functions *****
// 

HLOCAL
HidAlloc(
    SIZE_T cb
    );

HLOCAL
HidReAlloc(
    HLOCAL hMem,
    SIZE_T cb,
    UINT   uiFlags    
    );

HLOCAL
HidFree(
    LPVOID ptr
    );

BOOL
IsHidDataLocked(
    void
    );

void
LockHidData(
    void
    );


// Leaves the global access cs
void
ReleaseHidData(
    void
    );

BOOL
IsHidContextLocked(
    const USBHID_CONTEXT *pUsbHid
    );

void
LockHidContext(
    USBHID_CONTEXT *pUsbHid
    );

void
ReleaseHidContext(
    USBHID_CONTEXT *pUsbHid
    );

void
ValidateHidContext(
    PUSBHID_CONTEXT pUsbHid 
    );

void
ValidateHidGlobals(
    void
    );

void
ValidateClientHandle(
    PHID_CLIENT_HANDLE pHidClient
    );

void 
DumpHIDDeviceDescription(
    const HIDP_DEVICE_DESC *phidpDeviceDesc
    );


// Data dumping macros

#define DUMP_USB_DEVICE_DESCRIPTOR( d ) { \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("USB_DEVICE_DESCRIPTOR:\n"))); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("----------------------\n"))); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bLength: 0x%x\n"), d.bLength ));   \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDescriptorType: 0x%x\n"), d.bDescriptorType ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bcdUSB: 0x%x\n"), d.bcdUSB ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDeviceClass: 0x%x\n"), d.bDeviceClass ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDeviceSubClass: 0x%x\n"), d.bDeviceSubClass ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDeviceProtocol: 0x%x\n"), d.bDeviceProtocol ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bMaxPacketSize0: 0x%x\n"), d.bMaxPacketSize0 ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("idVendor: 0x%x\n"), d.idVendor )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("idProduct: 0x%x\n"), d.idProduct ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bcdDevice: 0x%x\n"), d.bcdDevice ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("iManufacturer: 0x%x\n"), d.iManufacturer ));   \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("iProduct: 0x%x\n"), d.iProduct )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("iSerialNumber: 0x%x\n"), d.iSerialNumber ));   \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bNumConfigurations: 0x%x\n"), d.bNumConfigurations ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("\n")));  \
}

#define DUMP_USB_CONFIGURATION_DESCRIPTOR( c ) { \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("USB_CONFIGURATION_DESCRIPTOR:\n"))); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("-----------------------------\n"))); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bLength: 0x%x\n"), c.bLength )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDescriptorType: 0x%x\n"), c.bDescriptorType )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("wTotalLength: 0x%x\n"), c.wTotalLength )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bNumInterfaces: 0x%x\n"), c.bNumInterfaces )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bConfigurationValue: 0x%x\n"), c.bConfigurationValue )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("iConfiguration: 0x%x\n"), c.iConfiguration )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bmAttributes: 0x%x\n"), c.bmAttributes )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("MaxPower: 0x%x\n"), c.MaxPower )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("\n"))); \
}

#define DUMP_USB_INTERFACE_DESCRIPTOR( i, _index ) { \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("USB_INTERFACE_DESCRIPTOR[%d]:\n"), _index )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("-------------------------\n"))); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bLength: 0x%x\n"), i.bLength )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDescriptorType: 0x%x\n"), i.bDescriptorType )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bInterfaceNumber: 0x%x\n"), i.bInterfaceNumber )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bAlternateSetting: 0x%x\n"), i.bAlternateSetting )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bNumEndpoints: 0x%x\n"), i.bNumEndpoints )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bInterfaceClass: 0x%x\n"), i.bInterfaceClass )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bInterfaceSubClass: 0x%x\n"), i.bInterfaceSubClass )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bInterfaceProtocol: 0x%x\n"), i.bInterfaceProtocol )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("iInterface: 0x%x\n"), i.iInterface )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("\n"))); \
}

#define DUMP_USB_ENDPOINT_DESCRIPTOR( e ) { \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("USB_ENDPOINT_DESCRIPTOR:\n"))); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("-----------------------------\n"))); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bLength: 0x%x\n"), e.bLength )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDescriptorType: 0x%x\n"), e.bDescriptorType )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bEndpointAddress: 0x%x\n"), e.bEndpointAddress )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bmAttributes: 0x%x\n"), e.bmAttributes )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("wMaxPacketSize: 0x%x\n"), e.wMaxPacketSize )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bInterval: 0x%x\n"), e.bInterval ));\
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("\n"))); \
}

#define DUMP_USB_HID_DESCRIPTOR( h ) { \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("USB_HID_DESCRIPTOR:\n"))); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("-----------------------------\n"))); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bLength: 0x%x\n"), h.bLength )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDescriptorType: 0x%x\n"), h.bDescriptorType )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bcdHID: 0x%x\n"), h.bcdHID )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bCountryCode: 0x%x\n"), h.bCountryCode )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bNumDescriptors: 0x%x\n"), h.bNumDescriptors )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bClassDescriptorType: 0x%x\n"), h.bClassDescriptorType )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("wDescriptorLength: 0x%x\n"), h.wDescriptorLength )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("\n"))); \
}


#else

#define LockHidData() EnterCriticalSection(&g_csHidLock)
#define ReleaseHidData() LeaveCriticalSection(&g_csHidLock)
#define ValidateHidGlobals()
#define ValidateHidContext(ptr)
#define ValidateClientHandle(ptr)
#define DumpHIDDeviceDescription(x)
#define LockHidContext(x) EnterCriticalSection(&x->csLock);
#define ReleaseHidContext(x) LeaveCriticalSection(&x->csLock);
#define HidAlloc(cb) LocalAlloc(LMEM_FIXED, cb)
#define HidReAlloc(ptr, cb, flags) LocalReAlloc(ptr, cb, flags)
#define HidFree(ptr) LocalFree(ptr)

#define DUMP_USB_DEVICE_DESCRIPTOR( p )
#define DUMP_USB_CONFIGURATION_DESCRIPTOR( c )
#define DUMP_USB_INTERFACE_DESCRIPTOR( i, index )
#define DUMP_USB_ENDPOINT_DESCRIPTOR( e )
#define DUMP_USB_HID_DESCRIPTOR( h )

#endif // DEBUG


#endif // _USBHID_H_

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级午夜理伦三级中视频| 日韩精品中午字幕| 另类小说综合欧美亚洲| 首页综合国产亚洲丝袜| 日本亚洲视频在线| 久久99精品久久久久久久久久久久 | 日韩欧美一级片| 国产精品蜜臀在线观看| 亚洲欧洲中文日韩久久av乱码| 综合激情网...| 亚洲.国产.中文慕字在线| 日韩电影免费在线观看网站| 不卡av在线网| 欧美人与性动xxxx| 精品国产成人系列| 中文字幕一区二区三区视频| 亚洲国产精品一区二区www| 日本aⅴ精品一区二区三区| 国产九色sp调教91| 色94色欧美sute亚洲线路二| 日韩欧美精品在线视频| 五月天激情综合网| 成人免费福利片| 欧美影院精品一区| 欧美激情中文不卡| 亚洲123区在线观看| 欧美三级蜜桃2在线观看| 亚洲欧洲综合另类| 在线看一区二区| 久久亚洲影视婷婷| 亚洲午夜一区二区| 欧美主播一区二区三区美女| 亚洲永久精品大片| 成人毛片老司机大片| 久久精品视频免费观看| 日韩电影在线免费看| 欧美日韩国产高清一区二区三区| 亚洲一区二区黄色| 制服视频三区第一页精品| 国产精品免费网站在线观看| 成人三级伦理片| 亚洲啪啪综合av一区二区三区| 99在线精品免费| 久久日韩精品一区二区五区| 亚洲欧美一区二区视频| 99re8在线精品视频免费播放| 精品国产乱码久久久久久老虎| 久久99热狠狠色一区二区| 久久蜜桃av一区精品变态类天堂 | 婷婷综合五月天| 日韩一区二区不卡| 亚洲高清视频中文字幕| 91精品国产福利在线观看| 亚洲女人小视频在线观看| 欧美三级中文字| 久久国产精品99精品国产| 久久久精品国产免费观看同学| 大白屁股一区二区视频| 亚洲图片自拍偷拍| 欧美电影免费观看完整版| 波多野结衣一区二区三区| 亚洲国产视频网站| 精品电影一区二区三区| 99视频热这里只有精品免费| 天天操天天色综合| 国产精品色一区二区三区| 欧美日韩成人综合| 成人免费黄色在线| 天堂va蜜桃一区二区三区漫画版| 久久一夜天堂av一区二区三区| 91亚洲国产成人精品一区二三 | 成人美女在线视频| 亚洲福利国产精品| 国产精品久久久久久福利一牛影视| 久久精品二区亚洲w码| 国产精品久久久久影院| 欧美日韩精品免费观看视频 | 国产在线一区观看| 欧美va亚洲va香蕉在线| 精品系列免费在线观看| 亚洲精选一二三| 欧美三级一区二区| 成人久久18免费网站麻豆| 日本一不卡视频| 夜夜嗨av一区二区三区中文字幕| 精品视频一区三区九区| 国产成人综合在线播放| 亚洲视频在线一区二区| 欧美电视剧在线看免费| 欧美亚洲国产一区二区三区va| 成人综合在线网站| 国产在线视频精品一区| 免费看欧美女人艹b| 夜夜嗨av一区二区三区网页| 国产精品欧美一区二区三区| xfplay精品久久| 欧美一区二区三区四区视频| 欧美综合一区二区| 色综合天天天天做夜夜夜夜做| 亚洲国产视频一区二区| 亚洲精品大片www| 中文字幕一区二区三区在线观看| 久久精品亚洲国产奇米99| 亚洲精品在线观看视频| 日韩三级免费观看| 日韩一卡二卡三卡国产欧美| 7777精品伊人久久久大香线蕉 | 欧美极品xxx| 久久欧美一区二区| 欧美精品一区二区不卡 | 国产精品一区专区| 狠狠久久亚洲欧美| 久久疯狂做爰流白浆xx| 久久精品99国产精品日本| 精品亚洲欧美一区| 韩国女主播成人在线观看| 国产在线视频一区二区三区| 国产精品主播直播| 丰满岳乱妇一区二区三区| 日韩精品亚洲专区| 免费人成网站在线观看欧美高清| 免费成人av在线播放| 久久99久久99精品免视看婷婷 | 三级精品在线观看| 青娱乐精品视频| 国产一区福利在线| 亚洲成人中文在线| 日韩成人免费在线| 久久不见久久见中文字幕免费| 国产一区二区女| 不卡电影一区二区三区| 在线免费观看一区| 91精品国产高清一区二区三区| 精品欧美一区二区三区精品久久| 欧美精品一区二区不卡| 日韩一区日韩二区| 亚洲.国产.中文慕字在线| 国产自产v一区二区三区c| caoporm超碰国产精品| 欧洲国内综合视频| 日韩精品一区二区三区在线观看| 中文字幕第一区二区| 亚洲国产精品麻豆| 激情综合网激情| www..com久久爱| 欧美精品久久天天躁| 欧美性淫爽ww久久久久无| 欧美一级免费观看| 国产精品天美传媒| 三级不卡在线观看| 国内外成人在线| 日本韩国欧美一区| 欧美tk丨vk视频| 一区二区三区在线观看国产 | 久久久久国产精品人| 亚洲免费电影在线| 极品尤物av久久免费看| 91麻豆蜜桃一区二区三区| 欧美一区二视频| ㊣最新国产の精品bt伙计久久| 日日嗨av一区二区三区四区| 成人爱爱电影网址| 欧美一级高清大全免费观看| 日韩一区在线播放| 国产伦精品一区二区三区在线观看| 一本大道av一区二区在线播放| 日韩欧美久久一区| 一区二区成人在线视频| 国产91精品一区二区麻豆网站| 欧美久久婷婷综合色| 国产精品日韩成人| 老司机精品视频在线| 欧美这里有精品| 亚洲日本青草视频在线怡红院| 韩国av一区二区三区在线观看| 欧美撒尿777hd撒尿| 久久久美女毛片| 老司机一区二区| 欧美精品视频www在线观看| 综合电影一区二区三区 | 欧美日本免费一区二区三区| 亚洲天堂久久久久久久| 国产伦精一区二区三区| 日韩免费成人网| 奇米色一区二区三区四区| 欧美性色综合网| 亚洲女同ⅹxx女同tv| 91亚洲大成网污www| 国产精品美女久久久久久久久久久| 久久66热偷产精品| 欧美xxxx在线观看| 另类小说综合欧美亚洲| 日韩一区二区三区高清免费看看| 亚洲午夜影视影院在线观看| 色一情一伦一子一伦一区| 亚洲欧美日韩在线| 色综合 综合色| 亚洲一区二区3| 欧美午夜在线一二页| 亚洲国产裸拍裸体视频在线观看乱了|