精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲偷熟乱区亚洲香蕉av| 色噜噜狠狠一区二区三区果冻| 91免费在线观看网站| 97超碰人人干| 欧美h版在线| 日韩亚洲欧美成人一区| 农村妇女精品一二区| 精品176二区| 91毛片在线观看| 91香蕉国产在线观看| 国产真人做爰毛片视频直播 | 香蕉国产精品偷在线观看不卡| 在线精品播放av| 无码人妻久久一区二区三区蜜桃| 国产调教在线| 亚洲精品国产精华液| 秋霞久久久久久一区二区| 亚洲国产999| 国产精品久久久久一区二区三区厕所 | 91在线porny国产在线看| 国产精品手机播放| 欧美三级午夜理伦| 欧美国产三区| 日韩免费视频一区二区| 一级特黄性色生活片| heyzo高清在线| 综合欧美亚洲日本| 日韩精品一线二线三线| 午夜成人鲁丝片午夜精品| 精品一区二区三区在线播放 | 99er在线视频| 毛片网站在线免费观看| 国产调教视频一区| 久久亚洲一区二区| 日韩一级免费毛片| 亚洲国内自拍| 久久av资源网站| 国产精品久久国产精麻豆96堂| 日韩精品亚洲aⅴ在线影院| 日韩写真欧美这视频| 亚洲天堂国产视频| 成年人网站在线| 国产欧美日韩视频一区二区| 乱一区二区三区在线播放| 日本韩国免费观看| 国产东北露脸精品视频| 亚洲一区中文字幕| 国产一区二区三区黄片| 免费成人小视频| 国产精品久久久久久久久久新婚| 香蕉污视频在线观看| 午夜在线视频观看日韩17c| 69久久夜色精品国产69| www.天天色| 夜夜嗨网站十八久久| 午夜精品视频在线| 成人毛片18女人毛片| 亚洲日产国产精品| 欧美亚洲另类激情另类| 黄色污污网站在线观看| 男男视频亚洲欧美| 国产精品自拍偷拍视频| 91theporn国产在线观看| 精品一区中文字幕| 3d动漫啪啪精品一区二区免费| 精品人妻无码一区二区三区蜜桃一| 国产精品亚洲午夜一区二区三区| 亚洲精品免费网站| 亚洲免费视频网| 久久尤物电影视频在线观看| 色99中文字幕| 国产精品实拍| 亚洲大尺度视频在线观看| 每日在线观看av| 无遮挡爽大片在线观看视频| 91久久久免费一区二区| 成人黄色一级大片| 99久热这里只有精品视频免费观看| 亚洲成人a级网| 欧美色图亚洲激情| 日韩国产综合| 欧美大片在线看| 亚洲AV无码成人精品区东京热| 日本vs亚洲vs韩国一区三区二区 | 91精品国产91久久久久久久久| 国产亚洲欧美在线精品| 韩国三级在线一区| 国产一区二区免费电影| 国产1区2区3区在线| 亚洲综合清纯丝袜自拍| 午夜视频在线瓜伦| 日韩精品一区二区三区中文字幕| 日韩国产高清视频在线| a一级免费视频| 亚洲美女一区| 91九色国产社区在线观看| 日本精品久久久久| 国产精品人妖ts系列视频| 妞干网视频在线观看| 国产精品第一| 亚洲精品久久久一区二区三区| 中文字幕黄色网址| 亚洲精品亚洲人成在线观看| 日韩中文字幕视频| 日韩精品乱码久久久久久| 青青草一区二区三区| 国产亚洲欧美另类一区二区三区| 婷婷激情在线| 一本一道久久a久久精品 | 中文亚洲av片在线观看| 高清shemale亚洲人妖| 亚洲国产婷婷香蕉久久久久久99| 你懂的好爽在线观看| 国产精品网站在线观看| 久久久999免费视频| 国产精品1区| 尤物yw午夜国产精品视频明星| 国产一级做a爰片在线看免费| 美女视频一区二区| 欧美精品一区三区在线观看| 黄页网站大全在线免费观看| 在线成人小视频| 成年人在线免费看片| 国产日韩欧美在线播放不卡| www日韩av| 在线观看操人| 7777女厕盗摄久久久| 在线看片中文字幕| 丝袜国产日韩另类美女| 美日韩免费视频| 成人观看网址| 精品精品国产高清a毛片牛牛| www.超碰在线观看| 国产制服丝袜一区| 中文字幕av导航| 欧美一级网址| 色阁综合伊人av| 中文字幕一二区| 国产日韩精品一区二区浪潮av | 国产丝袜精品第一页| 久久精品久久国产| 成人免费视频网站在线观看| 国产又粗又猛又爽又黄的网站| 国产美女视频一区二区| 俺去亚洲欧洲欧美日韩| 亚洲视频在线免费播放| 国产精品久久久一本精品| 特级丰满少妇一级| 久久亚洲国产| 91久热免费在线视频| 欧美成年黄网站色视频| 欧美一二三四在线| 久久国产一级片| 成人自拍视频在线| www.av中文字幕| 亚洲区小说区图片区qvod| 欧美在线观看网址综合| 久蕉在线视频| 欧美日韩精品一区二区| 日韩成人短视频| 国产精品一区二区三区乱码| 色欲色香天天天综合网www| 极品尤物一区| 国产成人在线亚洲欧美| 91网在线播放| 欧美一二三在线| 日韩三级视频在线播放| 久久久亚洲精品石原莉奈| 日韩av片网站| 一区二区免费不卡在线| 国产伦精品一区二区三区在线| 日本在线影院| 在线观看91精品国产麻豆| 九九热最新地址| www.性欧美| www.精品在线| 亚洲一级电影| 奇米精品在线| 韩国一区二区三区视频| 97久久久免费福利网址| www亚洲人| 精品国产制服丝袜高跟| 九九热在线视频播放| 国产精品少妇自拍| 国产一精品一aⅴ一免费| 国产乱码精品| 中国老女人av| 欧美日韩播放| 99视频免费观看| 免费亚洲电影| 欧美黑人巨大精品一区二区| 奇米影视888狠狠狠777不卡| 777xxx欧美| 国产污视频网站| 亚洲资源中文字幕| 少妇愉情理伦三级| 不卡视频免费播放| 亚洲网中文字幕| 久久福利影视| 僵尸世界大战2 在线播放| 久久国产精品成人免费观看的软件| 国产成人av一区二区三区| 视频在线日韩| 亚洲 日韩 国产第一| 黄黄的网站在线观看| 亚洲欧美另类中文字幕| 97人妻精品一区二区三区软件| 欧美视频免费在线观看| 久久久久亚洲AV| 中文字幕一区二区三区在线观看| 日本少妇xxxx| 国产精品99久久久久久宅男| 午夜免费一区二区| 午夜综合激情| www.99热这里只有精品| 欧美在线播放| 亚洲精品高清视频| 精品日韩免费| 久久久神马电影| 福利电影一区| 4444kk亚洲人成电影在线| 日本成人在线网站| 国产精品高潮粉嫩av| 都市激情综合| 欧美亚洲视频一区二区| 2020国产在线| 久久久久久久久久国产精品| 91麻豆免费在线视频| 日韩在线观看免费网站| 一广人看www在线观看免费视频| 亚洲人成在线观看网站高清| 五月婷婷狠狠干| 亚洲精品短视频| 无码国产精品一区二区色情男同| 精品精品欲导航| 成人乱码一区二区三区| 日韩亚洲欧美在线观看| 国产99999| 日韩一卡二卡三卡国产欧美| 国产黄色免费大片| 欧美一区二区三区视频免费播放| 国产精品丝袜黑色高跟鞋| 欧美日韩国产首页| 91中文字幕在线播放| 在线成人av影院| 99热这里只有精品在线| 日韩午夜小视频| 亚洲成熟女性毛茸茸| 欧美草草影院在线视频| 人妻夜夜爽天天爽| 日韩激情视频在线播放| 免费在线一级视频| 亚洲视频视频在线| 中文字幕日本在线观看| 久久人人爽人人爽爽久久| av免费在线观看网址| 欧美国产日韩一区| 三级在线看中文字幕完整版| 日本久久精品视频| 久久人体av| 亚洲综合在线播放| 豆花视频一区二区| 欧美午夜精品理论片a级大开眼界| 免费短视频成人日韩| 亚洲三区在线观看| 亚洲欧美综合| 欧洲黄色一级视频| 日本伊人色综合网| 毛毛毛毛毛毛毛片123| 国产99久久久国产精品潘金| 波多野结衣办公室33分钟| 中文字幕乱码一区二区免费| 免费在线观看黄色小视频| 亚洲一区二区高清| 国产精品777777| 9191精品国产综合久久久久久| 亚洲第九十九页| 亚洲人成欧美中文字幕| 老司机在线永久免费观看| 欧美极品第一页| 国产电影一区二区三区爱妃记| 亚洲精品日韩av| 亚洲区小说区图片区qvod| 亚洲综合首页| 激情婷婷久久| 国产九九在线视频| 国产成人精品免费在线| 人妻aⅴ无码一区二区三区| 亚洲天堂av老司机| 国产农村妇女aaaaa视频| 欧美裸体bbwbbwbbw| 外国精品视频在线观看 | 日韩一区二区a片免费观看| 亚洲欧美另类久久久精品2019| 日本三级理论片| 在线不卡中文字幕| 欧美孕妇孕交xxⅹ孕妇交| 欧美成人午夜免费视在线看片| 国偷自产一区二区免费视频| 亚洲综合日韩在线| 国际精品欧美精品| 99久久国产综合精品五月天喷水| 美国毛片一区二区三区| 少妇光屁股影院| 亚洲一卡二卡三卡四卡无卡久久| 亚洲精品国产精品国自产网站按摩| 欧美va亚洲va在线观看蝴蝶网| eeuss影院www在线播放| 欧美性一区二区三区| 77成人影视| 中文字幕色呦呦| 另类小说综合欧美亚洲| 中文字幕在线免费看线人| 樱花影视一区二区| 亚洲一区二区影视| 在线观看久久久久久| 色网在线免费观看| 国产精品久久久久久免费观看 | 久久精品中文字幕一区| 春暖花开亚洲一区二区三区| 国内精品久久久久久久果冻传媒| 影音先锋日韩在线| 免费精品99久久国产综合精品应用| 久久日韩精品一区二区五区| 日本五十熟hd丰满| 精品日韩在线观看| 中文字幕伦理免费在线视频| 成人精品视频在线| 久久国产亚洲精品| 天天综合网日韩| 国产欧美精品一区二区三区四区| 国产乱国产乱老熟| 亚洲欧美激情一区| 小视频免费在线观看| 精品一区日韩成人| 一区二区国产精品| 黄色片视频免费观看| 欧美日韩亚洲精品内裤| 免费观看毛片网站| 国内精品久久久| 欧美理论电影在线精品| 免费成人午夜视频| 97成人超碰视| 在线观看免费av片| 国产一区二区美女视频| 视频在线日韩| 一区二区三区免费看| 精品一区二区免费| 国产女人18水真多毛片18精品| 欧美一卡在线观看| 中文字幕资源网在线观看| 成人欧美一区二区三区视频| 在线日本成人| 国产精品揄拍100视频| 色老汉av一区二区三区| 国产高清视频在线播放| 国产裸体写真av一区二区 | 婷婷综合电影| 国产精品视频黄色| 国产精品不卡一区二区三区| h狠狠躁死你h高h| 欧美激情中文字幕在线| 日本亚洲不卡| 亚洲色图 在线视频| 亚洲丝袜制服诱惑| 亚洲奶汁xxxx哺乳期| 欧美在线性爱视频 | 亚洲无线观看| 欧美丰满熟妇bbbbbb百度| 欧美国产日韩一二三区| 亚洲图片小说视频| 色综合久久久888| 西野翔中文久久精品国产| 亚洲无吗一区二区三区| 玉米视频成人免费看| 欧美套图亚洲一区| 国产精品网站入口| 一区在线观看| 日本二区在线观看| 日韩美女一区二区三区四区| 一二三四视频在线中文| 综合一区中文字幕| 成人app下载| 欧美成人一区二区视频| 久久6精品影院| 国产亚洲第一伦理第一区| 色综合五月婷婷| 欧美丝袜一区二区三区| 国产原创视频在线观看| 蜜桃视频成人| 福利一区在线观看| 中文字幕观看在线| 欧美精品videos| 不卡中文一二三区| 久久久老熟女一区二区三区91| 欧美日韩精品欧美日韩精品| 超碰在线视屏| 亚洲区成人777777精品| 国产无人区一区二区三区| 黄色a在线观看|