精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

網(wǎng)絡安全編程:Windows消息機制實例

安全
那么窗口接收到消息后的一系列行為是如何發(fā)生的?下面通過熟悉Windows的消息機制來理解消息處理背后的秘密。

[[376643]]

 SendMessage()將指定的消息發(fā)送給指定的窗口,窗口接收到消息也有相應的行為發(fā)生。那么窗口接收到消息后的一系列行為是如何發(fā)生的?下面通過熟悉Windows的消息機制來理解消息處理背后的秘密。

01 DOS程序與Windows程序執(zhí)行流程對比

Windows下的窗口應用程序都是基于消息機制的,操作系統(tǒng)與應用程序之間、應用程序與應用程序之間,大部分都是通過消息機制進行通信、交互的。要真正掌握Windows應用程序內(nèi)部對消息的處理,必須分析實際的源代碼。在編寫一個基于消息的Windows應用程序前,先來比較DOS程序和Windows程序在執(zhí)行時的流程。

1. DOS程序執(zhí)行流程

在DOS下將編寫完的程序進行執(zhí)行,在執(zhí)行時有較為清晰的流程。比如用C語言編寫程序后,程序執(zhí)行時的大致流程如圖1所示。

圖1  傳統(tǒng)DOS程序執(zhí)行流程

在圖1中可以看出,DOS程序的流程是按照代碼的順序(這里的順序并不是指程序控制結構中的順序、分支和循環(huán)的意思,而是指程序運行的邏輯有明顯的流程)和流程依次執(zhí)行。大致步驟為:DOS程序從main()主函數(shù)開始執(zhí)行(其實程序真正的入口并不是main()函數(shù));執(zhí)行的過程中按照代碼編寫流程依次調(diào)用各個子程序;在執(zhí)行的過程中會等待用戶的輸入等操作;當各個子程序執(zhí)行完成后,最終會返回main()主函數(shù),執(zhí)行main()主函數(shù)的return語句后,程序退出(其實程序真正的出口也并不是main()函數(shù)的return語句)。

2. Windows程序執(zhí)行流程

DOS程序的執(zhí)行流程比較簡單,但是Windows應用程序的執(zhí)行流程就比較復雜了。DOS是單任務的操作系統(tǒng)。在DOS中,通過輸入命令,DOS操作系統(tǒng)會將控制權由Command.com轉交給DOS程序從而執(zhí)行。而Windows是多任務的操作系統(tǒng),在Windows下同時會運行若干個應用程序,那么Windows就無法把控制權完全交給一個應用程序。Windows下的應用程序是如何工作的?首先看一下Windows應用程序內(nèi)部的大致結構圖,如圖2所示。

圖2  Windows應用程序執(zhí)行原理圖

圖2可能看起來比較復雜,其實Windows應用程序的內(nèi)部結構比該示意圖更復雜。在實際開發(fā)Windows應用程序時,需要關注的部分主要是“主程序”和“窗口過程”兩部分。但是從圖2來看,主程序和窗口過程沒有直接的調(diào)用關系,而在主程序和窗口過程之間有一個“系統(tǒng)程序模塊”。“主程序”的功能是用來注冊窗口類、獲取消息和分發(fā)消息。而“窗口過程”中定義了需要處理的消息,“窗口過程”會根據(jù)不同的消息執(zhí)行不同的動作,而不需要程序處理的消息則會交給默認的系統(tǒng)過程進行處理。

在“主程序”中,RegisterClassEx()函數(shù)會注冊一個窗口類,窗口類中的字段中包含了“窗口過程”的地址信息,也就是把“窗口類”的信息(包括“窗口過程的地址信息”)告訴操作系統(tǒng)。然后“主程序”不斷通過調(diào)用GetMessage()函數(shù)獲取消息,再交由DispatchMessge()函數(shù)來分發(fā)消息。消息分發(fā)后并沒有直接調(diào)用“窗口過程”讓其處理消息,而是由系統(tǒng)模塊查找該窗口指定的窗口類,通過窗口類再找到窗口過程的地址,最后將消息送給該窗口過程,由窗口過程處理消息。

02 一個簡單的Windows應用程序

相對一個簡單的DOS程序來說一個簡單的Windows應用程序要很長。下面的例子中只實現(xiàn)了一個特別簡單的Windows程序,這個程序在桌面上顯示一個簡單的窗口,它沒有菜單欄、工具欄、狀態(tài)欄,只是在窗口中輸出一段簡單的字符串。雖然程序如此簡單,但是也要編寫100行左右的代碼。考慮到初學的朋友,這里將一部分一部分地逐步介紹代碼中的細節(jié),以減少代碼的長度,從而方便初學者的學習。

1. Windows窗口應用程序的主函數(shù)——WinMain()

在DOS時代,或編寫Windows下的命令行的程序,要使用C語言編寫代碼的時候都是從main()函數(shù)開始的。而在Windows下編寫有窗口的程序時,要用C語言編寫窗口程序就不再從main()函數(shù)開始了,取而代之的是WinMain()函數(shù)。

既然Windows應用程序的主函數(shù)是WinMain(),那么就從了解WinMain()函數(shù)的定義開始學習Windows應用程序的開發(fā)。WinMain()函數(shù)的定義如下: 

  1. int WINAPI WinMain(  
  2.  HINSTANCE hInstance,  
  3.  HINSTANCE hPrevInstance,  
  4.  LPSTR lpCmdLine,  
  5.  int nCmdShow  
  6. ); 

該函數(shù)的定義取自MSDN中,在看到WinMain()函數(shù)的定義后,很直觀地會發(fā)現(xiàn)WinMain函數(shù)的參數(shù)比main()函數(shù)的參數(shù)變多了。從參數(shù)個數(shù)上來說,WinMain()函數(shù)接收的信息更多了。下面來看每個參數(shù)的含義。

hInstance是應用程序的實例句柄。保存在磁盤上的程序文件是靜態(tài)的,當被加載到內(nèi)存中時,被分配了CPU、內(nèi)存等進程所需的資源后,一個靜態(tài)的程序就被實例化為一個有各種執(zhí)行資源的進程了。句柄的概念隨上下文的不同而不同,句柄是操作某個資源的“把手”。當需要對某個實例化進程操作時,需要借助該實例句柄進行操作。這里的實例句柄是程序裝入內(nèi)存后的起始地址。實例句柄的值也可以通過GetModuleHandle()參數(shù)來獲得(注意系統(tǒng)中沒有GetInstanceHandle()函數(shù),不要誤以為是hInstance就會有GetInstance×××()類的函數(shù))。

句柄這個詞在開發(fā)Windows程序時是非常常見的一個詞。“句柄”一詞的含義隨上下文的不同而所有改變。比如,磁盤上的程序文件被加載到內(nèi)存中后,就創(chuàng)建了一個實例句柄,這個實例句柄是程序裝入內(nèi)存后的“起始地址”,或者說是“模塊的起始地址”。

拿SendMessage()函數(shù)舉例來說,句柄相當于一個操作的面板,對句柄發(fā)送的消息相當于面板上的各個開關按鍵,消息的附加數(shù)據(jù),相當于給開關按鍵送的各種參數(shù),這些參數(shù)根據(jù)按鍵的不同而不同。

hPrevInstance是同一個文件創(chuàng)建的上一個實例的實例句柄。這個參數(shù)是Win16平臺下的遺留物,在Win32下已經(jīng)不再使用了。

lpCmdLine是主函數(shù)的參數(shù),用于在程序啟動時給進程傳遞參數(shù)。比如在“開始”菜單的“運行”中輸入“notepad c:\boot.ini”,這樣就通過記事本打開了C盤下的boot.ini文件。C:\Boot.ini文件是通過WinMain()函數(shù)的lpCmdLine參數(shù)傳遞給notepad.exe程序的。

nCmdShow是進程顯示的方式,可以是最大化顯示、最小化顯示,或者是隱藏等顯示方式(如果是啟動木馬程序的話,啟動方式當然要由自己進行控制)。

主函數(shù)的參數(shù)都介紹完了。編寫Windows的窗口程序,需要主函數(shù)中應該完成哪些操作是下面要討論的內(nèi)容。

2. WinMain()函數(shù)中的流程

編寫Windows下的窗口程序,在WinMain()主函數(shù)中主要完成的任務是注冊一個窗口類,創(chuàng)建一個窗口并顯示創(chuàng)建的窗口,然后不停地獲取屬于自己的消息并分發(fā)給自己的窗口過程,直到收到WM_QUIT消息后退出消息循環(huán)結束進程。這是主函數(shù)中程序的執(zhí)行脈絡,程序中將注冊窗口類、創(chuàng)建窗口的操作封裝為自定義函數(shù)。

代碼如下: 

  1. int WINAPI WinMain(  
  2.  HINSTANCE hInstance,  
  3.  HINSTANCE hPrevInstance,  
  4.  LPSTR lpCmdLine,  
  5.  int nCmdShow)  
  6.  
  7.   MSG Msg;  
  8.   BOOL bRet;  
  9.   // 注冊窗口類  
  10.   MyRegisterClass(hInstance);  
  11.   // 創(chuàng)建窗口并顯示窗口  
  12.   if ( !InitInstance(hInstance, SW_SHOWNORMAL) )  
  13.   {  
  14.     return FALSE; 
  15.   }  
  16.   // 消息循環(huán)  
  17.   // 獲取屬于自己的消息并進行分發(fā)  
  18.   while( (bRet = GetMessage(&Msg, NULL, 0, 0)) != 0 )  
  19.   {  
  20.     if ( bRet == -1 )  
  21.     {  
  22.       // handle the error and possibly exit  
  23.       break;  
  24.     }  
  25.     else  
  26.     {  
  27.       TranslateMessage(&Msg);  
  28.       DispatchMessage(&Msg);  
  29.     }  
  30.   }  
  31.   return Msg.wParam;  

在代碼中,MyRegisterClass()和InitInstance()是兩個自定義的函數(shù),分別用來注冊窗口類,創(chuàng)建窗口并顯示更新創(chuàng)建的窗口。后面的消息循環(huán)部分用來獲得消息并進行消息分發(fā)。它的流程如圖2所示的“主程序”部分。

代碼中主要是3個函數(shù),分別是GetMessage()、TranslateMessage()和DispatchMessage()。這3個函數(shù)是Windows提供的API函數(shù)。GetMessage()的定義如下: 

  1. BOOL GetMessage(  
  2.  LPMSG lpMsg,  
  3.  HWND hWnd,  
  4.  UINT wMsgFilterMin,  
  5.  UINT wMsgFilterMax  
  6. ); 

該函數(shù)用來獲取屬于自己的消息,并填充MSG結構體。有一個類似于GetMessage()的函數(shù)是PeekMessage(),它可以判斷消息隊列中是否有消息,如果沒有消息,可以主動讓出CPU時間給其他進程。關于PeekMessage()函數(shù)的使用,請參考MSDN: 

  1. BOOL TranslateMessage(CONST MSG *lpMsg); 

該函數(shù)是用來處理鍵盤消息的。它將虛擬碼消息轉換為字符消息,也就是將WM_KEYDOWN消息和WM_KEYUP消息轉換為WM_CHAR消息,將WM_SYSKEYDOWN消息和WM_SYSKEYUP消息轉換為WM_SYSCHAR消息: 

  1. LRESULT DispatchMessage(CONST MSG *lpmsg); 

該函數(shù)是將消息分發(fā)到窗口過程中。

3. 注冊窗口類的自定義函數(shù)

在WinMain()函數(shù)中,首先調(diào)用了MyRegisterClass()這個自定義函數(shù),需要傳遞進程的實例句柄hInstance作為參數(shù)。該函數(shù)完成窗口類的注冊,分為兩步:第一步是填充WNDCLASSEX結構體,第二步是調(diào)用RegisterClassEx()函數(shù)進行注冊。該函數(shù)相對簡單,但是,該函數(shù)中稍微復雜的是WNDCLASSEX結構體的成員較多。

代碼如下: 

  1. ATOM MyRegisterClass(HINSTANCE hInstance)  
  2.  
  3.   WNDCLASSEX WndCls;  
  4.   // 填充結構體為 0  
  5.   ZeroMemory(&WndCls, sizeof(WNDCLASSEX));  
  6.   // cbSize 是結構體大小  
  7.   WndCls.cbSize = sizeof(WNDCLASSEX);  
  8.   // lpfnWndProc 是窗口過程地址  
  9.   WndCls.lpfnWndProc = WindowProc 
  10.   // hInstance 是實例句柄  
  11.   WndCls.hInstance = hInstance;  
  12.   // lpszClassName 是窗口類類名  
  13.   WndCls.lpszClassName = CLASSNAME 
  14.   // style 是窗口類風格  
  15.   WndCls.style = CS_HREDRAW | CS_VREDRAW;  
  16.   // hbrBackground 是窗口類背景色  
  17.   WndCls.hbrBackground = (HBRUSH)COLOR_WINDOWFRAME + 1;  
  18.   // hCursor 是鼠標句柄  
  19.   WndCls.hCursor = LoadCursor(NULL, IDC_ARROW);  
  20.   // hIcon 是圖標句柄  
  21.   WndCls.hIcon = LoadIcon(NULL, IDI_QUESTION);  
  22.   // 其他  
  23.   WndCls.cbClsExtra = 0 
  24.   WndCls.cbWndExtra = 0 
  25.   return RegisterClassEx(&WndCls);  

在代碼中,WNDCLASSEX結構體的成員都介紹了。WNDCLASSEX中最重要的字段是lpfnWndProc,它將保存的是窗口過程的地址。窗口過程是對各種消息進程處理的“匯集地”,也是編寫Windows應用程序的重點部分。代碼中的函數(shù)都比較簡單,主要涉及LoadCursor()、LoadIcon()和RegisterClassEx()這3個函數(shù)。由于這3個函數(shù)使用簡單,通過代碼就可以進行理解,這里不做過多介紹。

注冊窗口類(提到窗口類,你是否想到了FindWindow()函數(shù)的第一個參數(shù)呢?)的重點是在后面的代碼中可以根據(jù)該窗口類創(chuàng)建該種類型的窗口。代碼中,在定義窗口類時指定了背景色、鼠標指針、窗口圖標等,那么使用該窗口類創(chuàng)建的窗口都具有相同的窗口類型。

4. 創(chuàng)建主窗口并顯示更新

注冊窗口類后,根據(jù)該窗口類創(chuàng)建具體的主窗口并顯示和更新窗口。

代碼如下: 

  1. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)  
  2.  
  3.   HWND hWnd = NULL 
  4.   // 創(chuàng)建窗口  
  5.   hWnd = CreateWindowEx(WS_EX_CLIENTEDGE,  
  6.     CLASSNAME,  
  7.     "MyFirstWindow",  
  8.     WS_OVERLAPPEDWINDOW,  
  9.     CW_USEDEFAULT, CW_USEDEFAULT,  
  10.     CW_USEDEFAULT, CW_USEDEFAULT,  
  11.     NULL, NULL, hInstance, NULL);  
  12.   if ( NULL == hWnd )  
  13.   {  
  14.     return FALSE;  
  15.   }  
  16.   // 顯示窗口  
  17.   ShowWindow(hWnd, nCmdShow);  
  18.   // 更新窗口  
  19.   UpdateWindow(hWnd);  
  20.   return TRUE;  

在調(diào)用該函數(shù)時,需要給該函數(shù)傳遞實例句柄和窗口顯示方式兩個參數(shù)。這兩個參數(shù)的第1個參數(shù)通過WinMain()函數(shù)的參數(shù)hInstance指定,第2個參數(shù)可以通過WinMain()函數(shù)的第3個參數(shù)指定,也可以進行自定義指定。程序中的調(diào)用代碼如下: 

  1. InitInstance(hInstance, SW_SHOWNORMAL); 

在創(chuàng)建主窗口時調(diào)用了CreateWindowEx()函數(shù),先來看看它的函數(shù)原型: 

  1. HWND CreateWindowEx(  
  2.  DWORD dwExStyle,  
  3.  LPCTSTR lpClassName,  
  4.  LPCTSTR lpWindowName,  
  5.  DWORD dwStyle,  
  6.  int x,  
  7.  int y,  
  8.  int nWidth,  
  9.  int nHeight,  
  10.  HWND hWndParent,  
  11.  HMENU hMenu,  
  12.  HINSTANCE hInstance,  
  13.  LPVOID lpParam  
  14. ); 

CreateWindowEx()中的第2個參數(shù)是lpClassName,由注釋可以知道是已經(jīng)注冊的類名。這個已經(jīng)注冊的類名就是WNDCLASSEX結構體的lpszClassName字段。

5. 處理消息的窗口過程

按照如圖2所示的流程,WinMain()主函數(shù)的部分已經(jīng)都實現(xiàn)完成了。接下來看程序中關鍵的部分——窗口過程。從WinMain()主函數(shù)中看出,在WinMain()主函數(shù)中沒有任何地方直接調(diào)用窗口過程,只是在注冊窗口類時指定了窗口過程的地址。那么窗口類是由誰進行調(diào)用的呢?答案是由操作系統(tǒng)進行調(diào)用的。原因有二,首先窗口過程的地址是由系統(tǒng)維護的,注冊窗口類時是將“窗口過程的地址”向操作系統(tǒng)進行注冊。其次是除了應用程序本身會調(diào)用自己的窗口過程外,其他應用程序也會調(diào)用自己的窗口過程,比如前面的例子中調(diào)用SendMessage()函數(shù)發(fā)送消息后,需要系統(tǒng)調(diào)用目標程序的窗口過程來完成相應的動作。如果窗口過程由自己調(diào)用,那么窗口就要自己維護窗口類的信息,進程間消息的通信會非常繁瑣,也會無形中增加系統(tǒng)的開銷。

窗口過程的代碼如下: 

  1. LRESULT CALLBACK WindowProc(  
  2.     HWND hwnd,  
  3.     UINT uMsg,  
  4.     WPARAM wParam,  
  5.     LPARAM lParam)  
  6.  
  7.   PAINTSTRUCT ps;  
  8.   HDC hDC;  
  9.   RECT rt;  
  10.   char *pszDrawText = "Hello Windows Program." 
  11.   switch (uMsg)  
  12.   {  
  13.   case WM_PAINT:  
  14.     {  
  15.       hDC = BeginPaint(hwnd, &ps);  
  16.       GetClientRect(hwnd, &rt);  
  17.       DrawTextA(hDC,  
  18.         pszDrawText, strlen(pszDrawText),&rt,  
  19.         DT_CENTER | DT_VCENTER | DT_SINGLELINE);  
  20.       EndPaint(hwnd, &ps);  
  21.       break;  
  22.     }  
  23.   case WM_CLOSE:  
  24.     {  
  25.       if ( IDYES == MessageBox(hwnd,  
  26.         "是否退出程序", "MyFirstWin", MB_YESNO) )  
  27.       {  
  28.         DestroyWindow(hwnd);  
  29.         PostQuitMessage(0);  
  30.       }  
  31.       break;  
  32.     }  
  33.   default:  
  34.     {  
  35.       return DefWindowProc(hwnd, uMsg, wParam, lParam);  
  36.     }  
  37.   }  
  38.   return 0;  

在WinMain()函數(shù)中,通過調(diào)用RegisterClassEx()函數(shù)進行了窗口類的注冊,通過調(diào)用CreateWindowEx()函數(shù)創(chuàng)建了窗口,并且GetMessage()函數(shù)不停地獲取消息,但是在主函數(shù)中沒有對被創(chuàng)建的窗口做任何處理。那是因為真正對窗口行為的處理全部放在了窗口過程中。當WinMain()函數(shù)中的消息循環(huán)得到消息以后,通過調(diào)用DispatchMessage()函數(shù)將消息派發(fā)(實際不是由DispatchMessage()函數(shù)直接派發(fā))給了窗口過程,從而由窗口過程對消息進行處理。

窗口過程的定義是按照MSDN上給出的形式進行定義的,MSDN上的定義形式如下: 

  1. LRESULT CALLBACK WindowProc(  
  2.  HWND hwnd,  
  3.  UINT uMsg,  
  4.  WPARAM wParam,  
  5.  LPARAM lParam  
  6. ); 

WindowProc是窗口過程的函數(shù)名,這個函數(shù)名可以隨意改變,但是該窗口過程的函數(shù)名必須與WNDCLASSEX結構體中l(wèi)pfnWndProc的成員變量的值一致。函數(shù)的第1個參數(shù)hwnd是窗口的句柄,第2個參數(shù)uMsg是消息值,第3個和第4個參數(shù)是對于消息值的附加參數(shù)。這4個參數(shù)的類型與SendMessage()函數(shù)的參數(shù)相對應。

上面WindowProc()窗口過程中只對兩個消息進行了處理,分別是WM_PAINT和WM_CLOSE。這里為了演示因此只簡單處理了兩個消息。Windows中有上千種消息,那么多的消息不可能全部都由程序員自己去處理,程序員只處理一些程序中需要的消息,其余的消息就交給了DefWindowProc()函數(shù)進行處理。DefWindowProc()函數(shù)實際上是將消息傳遞給了操作系統(tǒng),由操作系統(tǒng)來處理程序中沒有處理的消息。比如,在調(diào)用CreateWindow()函數(shù)時,系統(tǒng)會發(fā)送消息WM_CREATE給窗口過程,但是這個消息可能對程序的功能并不需要進行特殊的處理,因此直接交由DefWindowProc()函數(shù)讓系統(tǒng)進行處理。

DefWindowProc()函數(shù)的定義如下: 

  1. LRESULT DefWindowProc(  
  2.  HWND hWnd,  
  3.  UINT Msg,  
  4.  WPARAM wParam,  
  5.  LPARAM lParam  
  6. ); 

該函數(shù)的4個參數(shù)跟窗口過程的參數(shù)相同,只要將窗口過程的參數(shù)依次傳遞給DefWindowProc()函數(shù)就可以完成該函數(shù)的調(diào)用。在switch分支結構中的default位置直接調(diào)用DefWindowProc()函數(shù)就可以了。

WM_CLOSE消息是關閉窗口時發(fā)出的消息,在這個消息中需要調(diào)用DestoryWindow()函數(shù)來銷毀窗口,并且調(diào)用PostQuitMessage()來退出消息循環(huán),使程序退出。對于WM_PAINT消息,這里不進行介紹,涉及的幾個API函數(shù)可以參考MSDN進行了解。

有的資料在介紹消息循環(huán)時會給出一個建議,就是把需要經(jīng)常處理的消息放到程序靠上的位置,而將不經(jīng)常處理的消息放到程序靠下的位置,從而提高程序的效率。其實,在窗口過程中往往會使用switch結構對消息進行判斷(如果使用if和else結構進行消息的判斷,那么常用的消息是要放到前面),而switch結構在編譯器進行編譯后會進行優(yōu)化處理,從而大大提高程序的運行效率。 

 

責任編輯:龐桂玉 來源: 計算機與網(wǎng)絡安全
相關推薦

2021-05-24 11:55:55

網(wǎng)絡安全Windows鉤子函數(shù)

2021-04-30 18:50:44

網(wǎng)絡安全PE編程添加節(jié)區(qū)

2021-04-26 10:32:38

網(wǎng)絡安全PE編程工具

2021-03-03 12:20:42

網(wǎng)絡安全DLL編程

2021-02-19 09:30:52

網(wǎng)絡安全服務控制管理器代碼

2021-04-28 14:35:48

網(wǎng)絡安全PE編程代碼

2021-04-25 21:25:09

網(wǎng)絡安全網(wǎng)絡安全編程PE編程

2021-03-05 13:46:56

網(wǎng)絡安全遠程線程

2021-01-26 13:45:03

網(wǎng)絡安全Winsock編程

2021-01-22 10:58:16

網(wǎng)絡安全進程間碼如

2021-02-21 18:19:43

網(wǎng)絡安全網(wǎng)絡安全編程創(chuàng)建進程

2021-02-23 10:20:07

網(wǎng)絡安全進程代碼

2011-05-20 14:23:59

WLANWEPWPA

2016-10-10 00:18:27

2021-06-18 09:55:09

網(wǎng)絡安全目錄監(jiān)控

2010-09-26 08:46:08

802.1x

2011-03-17 13:32:45

2018-08-06 15:33:02

網(wǎng)絡安全CISO投資

2021-03-01 11:20:13

網(wǎng)絡安全多線程代碼

2021-03-15 13:50:24

網(wǎng)絡安全Android安全機制
點贊
收藏

51CTO技術棧公眾號

日本精品一区二区| 久热精品视频在线免费观看| 1024av视频| 蜜桃色一区二区三区| 国产免费av在线| 日本不卡中文字幕| 欧美久久久久久久久中文字幕| 国产伦精品免费视频| 国产1区2区在线观看| 男男gaygays亚洲| 成人激情免费网站| 日韩最新免费不卡| 日韩欧美不卡在线| 神马电影在线观看| 九九视频免费观看视频精品 | 免费国产黄色网址| 一级做a爱片久久毛片| 天天做天天爱天天爽综合网| 亚洲成av人片一区二区| 久久久99爱| 中日韩一级黄色片| av成人亚洲| 成人午夜av电影| 欧美亚洲另类在线| 国产精品中文久久久久久| 日韩成人黄色| 午夜在线精品偷拍| 91精品国产福利| 精品一区二区三区在线视频| 欧美国产视频在线| 欧美激情2020午夜免费观看| 91视频最新入口| 成人精品一区二区三区免费| 免费亚洲一区| 中文日韩在线视频| 国偷自产av一区二区三区麻豆| 午夜久久中文| 一区二区三区在线免费视频| 日韩高清dvd| 视频一区二区三区四区五区| 51精品国产| 一卡二卡三卡日韩欧美| 国产精品大陆在线观看| 北京富婆泄欲对白| 素人啪啪色综合| 亚洲精品第1页| 亚洲激情一区二区| 青青久在线视频免费观看| 国产乱人伦精品一区二区在线观看| 日本久久久久久久久| 久久久久久久久免费看无码| 精品视频一二| 欧美顶级毛片在线播放| 精品久久一区| 精品国产伦一区二区三区观看体验 | 欧美成人激情图片网| 人妻少妇一区二区| 国产调教精品| 亚洲一区二区视频在线| 91免费看国产| 最新黄色网址在线观看| 精品久久成人| 日韩精品一区二区视频| 久久久久中文字幕亚洲精品| 一区二区三区日本视频| 亚洲欧美综合网| 91在线观看欧美日韩| 亚洲天堂aaa| 免费日本视频一区| 久久精品国产欧美亚洲人人爽| 粉嫩虎白女毛片人体| 日本午夜在线视频| 狠狠狠色丁香婷婷综合激情| 色综合伊人色综合网| 国产精品815.cc红桃| 欧美在线导航| 亚洲精选中文字幕| 制服 丝袜 综合 日韩 欧美| 新片速递亚洲合集欧美合集| 色中色一区二区| 亚洲一区二区自拍偷拍| 91社区在线观看播放| 日本一区二区视频在线| 天堂资源在线亚洲资源| 国产女人在线观看| 99久久精品99国产精品| 欧美综合国产精品久久丁香| 中文字幕精品亚洲| 91中文字幕精品永久在线| 日韩一区和二区| 免费人成视频在线播放| 在线精品自拍| 精品视频在线观看日韩| 爱爱的免费视频| 精品视频免费| 爱福利视频一区| 麻豆一区二区三区精品视频| 国产日本精品| 国产精品黄视频| 国产精品综合在线| 不卡的av电影在线观看| 欧美一二三四五区| 精品孕妇一区二区三区| 成人精品高清在线| 久久亚洲高清| 日本精品在线| 午夜视频一区在线观看| 国产免费一区二区三区视频| 99只有精品| 精品久久久久99| 成年人小视频网站| 88xx成人永久免费观看| 欧美一区二区久久| 国产精品无码午夜福利| 98精品久久久久久久| 久久久久久久一区二区| 久久精品亚洲a| 在线免费高清一区二区三区| 色妞一区二区三区| 亚洲一区二区91| 欧美激情aⅴ一区二区三区| 777午夜精品福利在线观看| 欧美福利在线视频| 欧美日韩视频一区二区三区| 日本精品一区二区三区在线播放视频| 国产精品无码天天爽视频| 99久久综合狠狠综合久久| 不卡日韩av| 国产福利在线视频| 亚洲福利电影网| 亚洲精品蜜桃久久久久久| 成人动漫在线免费观看| 亚洲午夜在线电影| 激情五月俺来也| 国产欧美在线观看免费| 欧美性三三影院| 美女黄色片视频| 精品日产乱码久久久久久仙踪林| 日韩中文在线中文网在线观看 | 日本wwwxxxx| 国产精品18久久久久久久网站| 久久久久成人精品免费播放动漫| av片哪里在线观看| 精品视频色一区| jizz欧美性20| 午夜日韩激情| 国产日韩欧美91| 欧美日韩 一区二区三区| 国产精品白丝jk黑袜喷水| 亚洲免费视频一区| 成人啊v在线| 亚洲男女性事视频| 丰满少妇乱子伦精品看片| 国产iv一区二区三区| 一区二区三区视频| 成人自拍视频网| 亚洲人成在线观| 天天操夜夜操视频| caoporm超碰国产精品| 免费观看亚洲视频| 韩国一区二区三区视频| 久久精品国产2020观看福利| 亚洲在线免费观看视频| 国产欧美一区二区精品性色 | 欧美午夜影院一区| 最新中文字幕av| 免费久久99精品国产| 日本在线免费观看一区| 成人免费福利| 中文字幕亚洲欧美在线| 亚洲一区中文字幕永久在线| 国产精品久久久久久久久免费丝袜| 日韩美女一区| 亚洲精品国产嫩草在线观看| 伊人伊人伊人久久| 国产精品午夜一区二区| 国产精品久久久一本精品| av网站在线不卡| 99久久婷婷这里只有精品| 成人免费淫片视频软件| 四虎影视成人| 亚洲国产精品人久久电影| 国产精品美女久久久久av爽| 免费观看在线综合色| 特级西西444www大精品视频| 另类一区二区| 欧美日韩福利电影| 色婷婷av一区二区三区之e本道| 亚洲激情五月婷婷| 日韩少妇一区二区| 久久婷婷一区| 中文字幕日韩精品一区二区| 亚洲日本一区二区三区在线| 97精品在线观看| 黄色美女网站在线观看| 欧美日本不卡视频| 国产精品扒开腿做爽爽| 美女诱惑一区二区| 高清无码视频直接看| 欧美天堂社区| 国产欧美一区二区三区视频| 污视频在线免费观看网站| 日韩精品在线第一页| 波多野结衣视频观看| 亚洲乱码国产乱码精品精的特点| 免费看污污网站| 综合国产在线| 成人激情在线观看| 美足av综合网| 亚洲精品视频在线播放| 国产又粗又猛又黄又爽| 午夜久久久久久久久| 亚洲一区 欧美| 丁香啪啪综合成人亚洲小说| 看欧美ab黄色大片视频免费| 欧美日韩综合| 神马影院我不卡| 国产成人免费av一区二区午夜 | 精品国产乱码久久久久久久软件| 在线视频婷婷| 91麻豆精品国产自产在线观看一区| www.99r| 超碰成人97| 国产日韩欧美高清在线| 性欧美xxxx| 日本视频在线| 亚洲欧美在线一区二区| 精品欧美一区二区精品少妇| 91久久香蕉国产日韩欧美9色| 中文字幕无码人妻少妇免费| 蜜臀av性久久久久av蜜臀妖精 | 国产91精品久久久久久| 中文字幕有码在线视频| 综合久久五月天| 青青青草网站免费视频在线观看| 精品国产乱码久久久久久图片| 国产一区二区视频免费| 久久婷婷成人综合色| 久久亚洲中文字幕无码| 国产国产精品| 日韩高清专区| 欧美理伦片在线播放| 91精品久久久久久久久久久| 韩国精品主播一区二区在线观看 | 欧美国产日韩在线观看成人| av网站一区二区三区| japan高清日本乱xxxxx| 久久精品国产免费| 人妻无码视频一区二区三区| 亚洲免费网址| 国产xxxxx在线观看| 国产精品自在线拍| 91丨九色丨国产| 亚洲最大的免费视频网站| 91女神在线视频| 午夜视频久久久| 免费久久精品| 狠狠干一区二区| aiss精品大尺度系列| 成人av资源| 国产伦理久久久久久妇女| 99视频在线播放| 国产福利一区二区精品秒拍| 国产亚洲精品美女久久久m| 麻豆精品久久| av一区二区三区在线观看| 久久久91麻豆精品国产一区| 亚洲综合av影视| 亚洲精品v亚洲精品v日韩精品| 亚洲一区二区中文字幕| 精品亚洲二区| 99在线看视频| 国产精品自在| 欧美高清一区二区| 欧美精品系列| 亚洲国产日韩美| 99久精品视频在线观看视频| 香蕉视频在线网址| 亚洲高清电影| 国产在线观看福利| 日韩精品一二区| 亚洲综合婷婷久久| 国产综合一区二区| 免费一级特黄录像| 久久成人av少妇免费| 日日夜夜精品视频免费观看| 成人小视频免费在线观看| 日本五十肥熟交尾| 国产三级欧美三级日产三级99| 山东少妇露脸刺激对白在线| 《视频一区视频二区| 九九热精品在线观看| 精品国产31久久久久久| 中国一级特黄视频| 日韩欧美一区中文| 天堂视频中文在线| 国产亚洲精品一区二555| 伊人免费在线| 欧美黑人巨大xxx极品| 小早川怜子影音先锋在线观看| 国产精品都在这里| 亚洲1区在线| 奇门遁甲1982国语版免费观看高清 | 最新av在线播放| 97超级碰碰碰| 五月天色综合| 精品一区2区三区| 999国产精品视频| 熟妇人妻va精品中文字幕| 国产成人精品影院| 日韩av网站在线播放| 欧美日韩亚洲一区二区三区| 性欧美8khd高清极品| 中文字幕亚洲色图| 亚洲淫成人影院| 国产精品一区二区欧美| 亚洲一区二区日韩| jizz大全欧美jizzcom| 久久久无码精品亚洲日韩按摩| 久久久久久久久久久网| 欧美久久一二区| 波多野结衣在线网站| 日韩av手机在线观看| 精品淫伦v久久水蜜桃| 黄色网zhan| 亚洲精品国产偷自在线观看| 国产v亚洲v天堂无码久久久 | 乱人伦精品视频在线观看| 亚洲婷婷在线观看| 亚洲一区在线播放| 精品国产av 无码一区二区三区| 中文国产成人精品| 日本综合视频| 日韩欧美精品一区二区| 先锋亚洲精品| 亚洲综合网在线观看| 欧美日韩亚洲高清| 无码国产色欲xxxx视频| 97精品国产97久久久久久| 超碰在线成人| 成人午夜精品久久久久久久蜜臀| 丁香婷婷综合五月| 黄网站免费在线| 欧美精品一区二区三区蜜臀 | 国产精品日日做人人爱| 精品国产乱码久久久久久1区2匹| 欧美日韩第二页| 国产午夜精品一区二区三区视频 | 中文字幕日韩在线播放| 99欧美精品| 欧美日韩亚洲国产成人| 国产乱码精品一区二区三区五月婷 | 日本肉体xxxx裸体xxx免费| 中文字幕av一区二区三区免费看| 中日韩av在线| 欧美美女15p| 免费观看成人www动漫视频| 国内性生活视频| 欧美激情一区三区| 91久久精品国产91性色69 | 亚洲欧美日韩直播| a欧美人片人妖| 四虎影院一区二区三区 | 免费成人在线视频观看| 成人三级视频在线观看| 欧美一二三区在线观看| 91美女主播在线视频| 欧美日韩综合网| 六月婷婷色综合| 国产一级做a爱免费视频| 日韩精品在线第一页| 成人视屏在线观看| 麻豆一区二区三区在线观看| 国产日韩欧美三级| 日韩人妻无码一区二区三区| 欧美性欧美巨大黑白大战| 麻豆视频在线| 日本高清不卡的在线| 精品国产一区一区二区三亚瑟| 五月激情婷婷在线| 亚洲一区二区精品久久av| 青青草在线播放| 成人在线精品视频| 国产欧美一级| 久久av红桃一区二区禁漫| 亚洲精品在线免费观看视频| 欧美黑人疯狂性受xxxxx野外| 黄瓜视频免费观看在线观看www| 成人妖精视频yjsp地址| 欧美日韩在线视频播放| 欧美激情亚洲精品| 欧美日韩在线观看视频小说| 精产国品一区二区三区| 一本大道久久a久久综合| 看黄网站在线| 欧美日韩一区在线播放| 国产精品自在在线| 国语对白做受69按摩| 久久久久国产视频| 99精品网站|