日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > Java > 正文

Windows服務編寫原理及探討(3)

2019-09-06 23:33:38
字體:
來源:轉載
供稿:網友

                   

(三)對服務的深入討論之下

  現在我們還剩下一個函數可以在細節上討論,那就是服務的CtrlHandler函數。

   

  當調用RegisterServiceCtrlHandler函數時,SCM得到并保存這個回調函數的地址。一個SCP調一個告訴SCM如何去控制服務的Win32函數,現在已經有10個預定義的控制請求:

                                                                                                                                                                                                                                                                                                                           
       

         Control           code

       
       

         Meaning

       
               SERVICE_CONTROL_STOP        Requests the         service to stop. The hService handle must have SERVICE_STOP         access.
               SERVICE_CONTROL_PAUSE        Requests the         service to pause. The hService handle must have         SERVICE_PAUSE_CONTINUE access.
               SERVICE_CONTROL_CONTINUE        Requests the         paused service to resume. The hService handle must have         SERVICE_PAUSE_CONTINUE access.
               SERVICE_CONTROL_INTERROGATE        Requests the         service to update immediately its current status information to the         service control manager. The hService handle must have         SERVICE_INTERROGATE access.
               SERVICE_CONTROL_SHUTDOWN        Requests the         service to perform cleanup tasks, because the system is shutting down.                For more information, see Remarks.
               SERVICE_CONTROL_PARAMCHANGE        Windows         2000: Requests the service to reread its startup parameters. The        hService handle must have SERVICE_PAUSE_CONTINUE access.
               SERVICE_CONTROL_NETBINDCHANGE        Windows         2000: Requests the service to update its network binding. The        hService handle must have SERVICE_PAUSE_CONTINUE access.
               SERVICE_CONTROL_NETBINDREMOVE        Windows         2000: Notifies a network service that a component for binding has         been removed. The service should reread its binding information and         unbind from the removed component.
               SERVICE_CONTROL_NETBINDENABLE        Windows         2000: Notifies a network service that a disabled binding has been         enabled. The service should reread its binding information and add the         new binding.
               SERVICE_CONTROL_NETBINDDISABLE        Windows         2000: Notifies a network service that one of its bindings has been         disabled. The service should reread its binding information and remove         the binding.
   

  上表中標有Windows     2000字樣的就是2000中新添加的控制代碼。除了這些代碼之外,服務也可以接受用戶定義的,范圍在128-255之間的代碼。

   

  當CtrlHandler函數收到一個SERVICE_CONTROL_STOP、SERVICE_CONTROL_PAUSE、        SERVICE_CONTROL_CONTINUE控制代碼的時候,SetServiceStatus必須被調用去確認這個代碼,并指定你認為服務處理這個狀態變化所需要的時間。

   

  例如:你的服務收到了停止請求,首先要把SERVICE_STATUS結構的dwCurrentState成員設置成SERVICE_STOP_PENDING,這樣可以使SCM確定你已經收到了控制代碼。當一個服務的暫?;蛲V共僮髡趫绦械臅r候,必須指定你認為這種操作所需要的時間:這是因為一個服務也許不能立即改變它的狀態,它可能必須等待一個網絡請求被完成或者數據被刷新到一個驅動器上。指定時間的方法就像我上一章說的那樣,用成員dwCheckPoint和dwWaitHint來指明它完成狀態改變所需要的時間。如果需要,可以用增加dwCheckPoint成員的值和設置dwWaitHint成員的值去指明你期待的服務到達下一步的時間的方式周期性的報告進展情況。

   

  當整個啟動的過程完成之后,要再一次調用SetServiceStatus。這時就要把SERVICE_STATUS結構的dwCurrentState成員設置成SERVICE_STOPPED,當報告狀態代碼的同時,一定要把成員dwCheckPoint和dwWaitHint設置為0,因為服務已經完成了它的狀態變化。暫?;蚶^續服務的時候方法也一樣。

   

  當CtrlHandler函數收到一個SERVICE_CONTROL_INTERROGATE控制代碼的時候,服務將簡單的將dwCurrentState成員設置成服務當前的狀態,同時,把成員dwCheckPoint和dwWaitHint設置為0,然后再調用SetServiceStatus就可以了。

   

  在操作系統關閉的時候,CtrlHandler函數收到一個SERVICE_CONTROL_SHUTDOWN控制代碼。服務根本無須回應這個代碼,因為系統即將關閉。它將執行保存數據所需要的最小行動集,這是為了確定機器能及時關閉。缺省時系統只給很少的時間去關閉所有的服務,MSDN里面說大概是20秒的時間,不過那可能是Windows     NT 4的設置,在我的Windows     2000 Server里這個時間是10秒,你可以手動的修改這個數值,它被記錄在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControl子鍵里面的WaitToKillServiceTimeout,單位是毫秒。

   

   

   

  當CtrlHandler函數收到任何用戶定義的代碼時,它應該執行期望的用戶自定義行動。除非用戶自定義的行動要強制服務去暫停、繼續或停止,否則不調SetServiceStatus函數。如果用戶定義的行動強迫服務的狀態發生變化,SetServiceStatus將被調用去設置dwCurrentState、dwCheckPoint和dwWaitHint,具體控制代碼和前面說的一樣。

   

  如果你的CtrlHandler函數需要很長的時間執行操作的話,千萬要注意:假如CtrlHandler函數在30秒內沒有返回的話,SCM將返回一個錯誤,這不是我們所期望的。所以如果出現上述情況,最好的辦法是再建立一個線程,讓它去繼續執行操作,以便使得CtrlHandler函數能夠迅速的返回。例如,當收到一個SERVICE_CONTROL_STOP請求的時候,就像上面說的一樣,服務可能正在等待一個網絡請求被完成或者數據被刷新到一個驅動器上,而這些操作所需要的時間是你不能估計的,那么就要建立一個新的線程等待操作完成后執行停止命令,CtrlHandler函數在返回之前仍然要報告SERVICE_STOP_PENDING狀態,當新的線程執行完操作之后,再由它將服務的狀態設置成SERVICE_STOPPED。如果當前操作的時間可以估計的到就不要這樣做,仍然使用前面交待的方法處理。

   

  CtrlHandler函數我就先講這些,下面說說服務怎么安裝。一個服務程序可以使用CreateService函數將服務的信息添加到SCM的數據庫。

   

SC_HANDLE     CreateService(    SC_HANDLE hSCManager, // handle to SCM database     LPCTSTR lpServiceName, // name of service to start    LPCTSTR lpDisplayName, // display name    DWORD dwDesiredAccess, // type of access to service    DWORD dwServiceType, // type of service    DWORD dwStartType, // when to start service    DWORD dwErrorControl, // severity of service failure    LPCTSTR lpBinaryPathName, // name of binary file    LPCTSTR lpLoadOrderGroup, // name of load ordering group    LPDWORD lpdwTagId, // tag identifier    LPCTSTR lpDependencies, // array of dependency names    LPCTSTR lpServiceStartName, // account name     LPCTSTR lpPassword // account password    );

   

  hSCManager是一個標示SCM數據庫的句柄,可以簡單的通過調用OpenSCManager得到。

   

SC_HANDLE     OpenSCManager(    LPCTSTR lpMachineName, // computer name    LPCTSTR lpDatabaseName, // SCM database name    DWORD dwDesiredAccess // access type    );

   

  lpMachineName是目標機器的名字,還記得我在第一章里說過可以在其它的機器上面安裝服務嗎?這就是實現的方法。對方機器名字必須以“/”開始。如果傳遞NULL或者一個空的字符串的話就默認是本機。

   

  lpDatabaseName是目標機器上面SCM數據庫的名字,但MSDN里面說這個參數要默認的設置成SERVICES_ACTIVE_DATABASE,如果傳遞NULL,就默認的打開SERVICES_ACTIVE_DATABASE。所以我還沒有真的搞明白這個參數的存在意義,總之使用的時候傳遞NULL就行了。

   

  dwDesiredAccess是SCM數據庫的訪問權限,具體值見下表:

                                                                                                                                                                                                           
       

         Object           access

       
       

                   Description

       
               SC_MANAGER_ALL_ACCESS        Includes         STANDARD_RIGHTS_REQUIRED, in addition to all of the access types listed         in this table.
               SC_MANAGER_CONNECT        Enables         connecting to the service control manager.
               SC_MANAGER_CREATE_SERVICE        Enables         calling of the CreateService function to create a service object         and add it to the database.
               SC_MANAGER_ENUMERATE_SERVICE        Enables         calling of the EnumServicesStatus function to list the services         that are in the database.
               SC_MANAGER_LOCK        Enables         calling of the LockServiceDatabase function to acquire a lock on         the database.
               SC_MANAGER_QUERY_LOCK_STATUS        Enables         calling of the QueryServiceLockStatus function to retrieve the         lock status information for the database.
   

  想要獲得訪問權限的話,似乎沒那么復雜。MSDN里面說所有進程都被允許獲得對所有SCM數據庫的SC_MANAGER_CONNECT,     SC_MANAGER_ENUMERATE_SERVICE, and SC_MANAGER_QUERY_LOCK_STATUS權限,這些權限使得你可以連接SCM數據庫,枚舉目標機器上安裝的服務和查詢目標數據庫是否已被鎖住。但如果要創建服務,首先你需要擁有目標機器的管理員權限,一般的傳遞SC_MANAGER_ALL_ACCESS就可以了。這個函數返回的句柄可以被CloseServiceHandle函數關閉。

   

  lpServiceName是服務的名字,lpDisplayName是服務在“服務”管理工具里顯示的名字。

   

  dwDesiredAccess也是訪問的權限,有一個比上面的還長的多的一個表,各位自己查MSDN吧。我們要安裝服務,仍然簡單的傳遞SC_MANAGER_ALL_ACCESS。

   

  dwServiceType是指你的服務是否和其它的進程相關聯,一般是SERVICE_WIN32_OWN_PROCESS,表示不和任何進程相關聯。如果你確認你的服務需要和某些進程相關聯,就設置成SERVICE_WIN32_SHARE_PROCESS。當你的服務要和桌面相關聯的時候,需要設置成SERVICE_INTERACTIVE_PROCESS。

   

  dwStartType是服務的啟動方式。服務有三種啟動方式,分別是“自動(SERVICE_AUTO_START)”“手動(SERVICE_DEMAND_START)”和“禁用(SERVICE_DISABLED)”。在MSDN里還有另外的兩種方式,不過是專為驅動程序設置的。

   

  dwErrorControl決定服務如果在系統啟動的時候啟動失敗的話要怎么辦。

                                                                                                                                                   
       

         值

       
       

         意義

       
               SERVICE_ERROR_IGNORE啟動程序記錄錯誤發生,但繼續啟動。
               SERVICE_ERROR_NORMAL啟動程序記錄錯誤發生,并彈出一個消息框,但仍繼續啟動
               SERVICE_ERROR_SEVERE啟動程序記錄錯誤發生,如果是以last-known-good         configuration啟動的話,啟動會繼續。否則會以last-known-good         configuration重新啟動計算機。
               SERVICE_ERROR_CRITICAL啟動程序記錄錯誤發生,如果可能的話。如果是以last-known-good         configuration啟動的話,啟動會失敗。否則會以last-known-good         configuration重新啟動計算機。好嚴重的錯誤啊。
   

  lpBinaryPathName是服務程序的路徑。MSDN里面特別提到如果服務路徑里面有空格的話一定要將路徑用引號引起來。例如"d:/my     share/myservice.exe"就一定要指定為""d:/my     share/myservice.exe""。

   

  lpLoadOrderGroup的意義在于,如果有一組服務要按照一定的順序啟動的話,這個參數用于指定一個組名用于標志這個啟動順序組,不過我還沒有用過這個參數。你的服務如果不屬于任何啟動順序組,只要傳遞NULL或者一個空的字符串就行了。

   

  lpdwTagId是應用了上面的參數之后要指定的值,專用于驅動程序,與本文內容無關。傳遞NULL。

   

  lpDependencies標示一個字符串數組,用于指明一串服務的名字或者一個啟動順序組。當與一個啟動順序組建立關聯的時候,這個參數的含義就是只有你指定的啟動順序組里有至少一個經過對整個組里所有的成員已經全部嘗試過啟動后,有至少一個成員成功啟動,你的服務才能啟動。不需要建立依存關系的話,仍是傳遞NULL或者一個空的字符串。但如果你要指定啟動順序組的話,必須為組名加上SC_GROUP_IDENTIFIER前綴,因為組名和服務名是共享一個命名空間的。

   

  lpServiceStartName是服務的啟動賬號,如果你設置你的服務的關聯類型是SERVICE_WIN32_OWN_PROCESS的話,你需要以DomainNameUserName的格式指定用戶名,如果這個賬戶在你本機的話,用.UserName就可以指定。如果傳遞NULL的話,會以本地的系統賬戶登陸。如果是Win     NT 4.0或更早的版本的話,如果你指定了SERVICE_WIN32_SHARE_PROCESS,就必須傳遞.System指定服務使用本地的系統賬戶。最后,如果你指定了SERVICE_INTERACTIVE_PROCESS,你必須使服務運行在本機系統賬戶。

   

  看名字就知道了,lpPassword是賬戶的密碼。如果指定系統賬戶的話,傳遞NULL。如果賬戶沒有密碼的話,傳遞空字符串。

   

  總之服務的基本原理就是這樣子了,到了這里這篇文章似乎可以告一段落了,但實際上還有很多內容必須要討論,所以我還不能草草收筆,敬請關注下一章。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

中文字幕欧美日韩| 欧美日韩国产综合视频在线观看 | 国产一区在线精品| 麻豆精品99| 日韩在线观看视频一区二区| 欧美日韩91| 亚洲va韩国va欧美va精品| 91吃瓜在线观看| 中文字幕 亚洲一区| 国产视频不卡| 亚洲一区精品在线| 国产一区不卡精品| 欧美日韩亚洲系列| 91精品国产91| 97国产视频| av免费观看国产| 久久视频免费看| 亚洲美女视频一区| 不卡中文一二三区| 久久手机免费观看| 国产黄色一级片| 99日韩精品| 伊人www22综合色| 中文欧美日韩| 精品久久91| 中文字幕国产日韩| 久久精品女人| 欧美熟妇乱码在线一区| 1区2区在线| 国产一卡二卡3卡4卡四卡在线| 一区二区91| 中文字幕亚洲高清| 中文字幕亚洲免费| 国产欧美第一页| 欧美xxxx中国| 日韩在线视频免费观看| 中文字幕日韩在线观看| 亚洲 欧美 日韩系列| 樱花草www在线观看| 中文字幕精品视频在线| 婷婷中文字幕一区| 国产日韩精品在线看| 日韩欧美一级精品久久| 精品国产999| 久久网站免费观看| 中文精品在线| av免费观看网站| 69堂精品视频在线播放| 欧美国产亚洲一区| 欧美日韩激情一区二区三区| 亚洲 欧美 精品| 美国av一区二区| 99精品一级欧美片免费播放| 国产资源在线观看入口av| 欧美日韩国产专区| 成人一区而且| 一区二区不卡视频| 亚洲三级网站| 国产 欧美在线| 欧美一级在线观看| 91精品国产91久久久久久不卡| 免费精品国产自产拍观看| 搞黄在线观看| 国产色在线视频| 亚洲一区日韩精品中文字幕| 欧美日韩中文字幕综合视频 | 精品极品三级久久久久| 亚洲欧洲日产国码av系列天堂 | 91精品电影| 精品无人国产偷自产在线| 欧美国产一级片| 亚洲电影中文字幕在线观看| 高清国产一区| 中文字幕久久精品| 亚洲a级在线播放观看| 日韩视频免费直播| 91麻豆免费视频网站| 欧美国产三级| 91精品电影| 日韩欧美中文字幕一区| 中文字幕人成乱码在线观看| 日本黄色一区二区| 婷婷精品进入| aa国产成人| 999精品网| 亚洲黄色在线观看| av一区在线| 日韩欧美亚洲国产一区| 日韩.欧美.亚洲| 中文字幕亚洲视频| www.日韩免费| 欧美日韩国产首页在线观看| 日韩三级视频在线看| 99热最新网址| 日韩精品视频免费| 亚洲国产福利视频| 国产丝袜欧美中文另类| 激情综合色综合久久| 中文字幕成人乱码在线电影| 国产一区在线不卡| 中文字幕一区免费| 国产欧美日韩91| 九九在线精品| 国产99对白在线播放| 日韩国产在线不卡视频| 国产三级中文字幕| 久久久99久久精品欧美| 欧美日韩亚洲综合在线| 国产成人一二三区| 欧美日韩中文在线| 亚洲综合在线不卡| 亚洲成年人在线播放| 日韩国产一区三区| 国产欧美高清在线| 欧美 日韩 国产 在线| 欧美日韩免费精品| 国产在线视频一区二区| 日韩亚洲欧美中文三级| 欧美变态tickling挠脚心| 一区二区日韩视频| 精品一二线国产| 国产欧美日韩高清| 蜜桃久久久久| 午夜伦欧美伦电影理论片| 欧美日韩综合在线免费观看| 中文字幕在线视频日韩| 中文字幕伊人| 亚洲欧洲三级| 久久精品久久精品亚洲人| 亚洲国产午夜精品| 久久夜色精品国产欧美乱极品| 亚洲第一视频| 中文字幕精品www乱入免费视频| 免费在线视频一级不卡| 91精品国产91久久久久青草| 欧美日韩免费高清| 日韩午夜一区| 91欧美日韩| 97国产视频| 欧美 日韩 国产 在线| 日韩欧美亚洲国产| 日韩精品福利一区二区三区| 日本精品在线| 日韩亚洲一区中文字幕| 91精品国产高清久久久久久| 国产黄色在线观看| 欧美日韩精品高清| 婷婷精品进入| 国产在线观看黄色| 国产日产一区二区三区| 亚洲福利视频专区| 黄色片网站在线| 日韩三级免费观看| 国产在线第一页| 国产高清大尺度一区二区不卡| 亚洲福利在线看| 日韩欧美一级二级三级久久久| 亚洲欧美韩国综合色| 91精品国产91久久| 亚洲国产www| 欧美国产亚洲一区| 亚洲乱码中文字幕综合| www.中文字幕在线| 精品久久久久久综合日本欧美| 日韩不卡一区二区| 国产视频不卡| 日本国产一区| 91精品久久久久久久久| 国产天堂素人系列在线视频| 欧美日韩中文字幕在线| 国产不卡的av| 顶级网黄在线播放| 999精品网| 中文字幕欧美亚洲| 一级日本免费的| 精品免费久久久| 91精品国产自产在线观看永久∴| 在线观看国产一级片| 国产h片在线观看| www.中文字幕在线| 精品国产欧美| 一区二区欧美国产| 一区二区视频在线| 亚洲福利一区| 久久99精品久久久久子伦| 亚洲va久久久噜噜噜久久| 日本视频久久久| 精品在线一区二区三区| 中文字幕欧美人妻精品一区蜜臀| 一二三区精品视频| 91精品视频播放| 亚洲高清精品视频| 999视频精品| 91精品国产综合久久香蕉的特点| 日韩视频1区| 999精品网| 日韩午夜中文字幕| 成人福利一区| av免费在线观看网址| 亚洲欧洲日韩精品在线| 日韩福利视频导航| 精品国产99久久久久久| 在线看欧美日韩| 国产专区中文字幕| 国产欧美日韩亚洲| 日韩在线不卡一区| 日韩三级视频中文字幕| 91精品国产入口| 99久久精品国产亚洲| 日韩一二三四区| 日韩三级视频在线播放| 中文在线不卡视频| 精品乱人伦一区二区三区| 香蕉视频亚洲一级| 国产一区在线不卡| aaa免费看大片| 国产高清不卡av| 亚洲一区精品电影| 欧美成人一区二区| 亚洲一区精品电影| 日韩精品在线播放| 91久久精品国产| 91久久中文| 91精品国产自产在线观看永久∴| 日韩高清不卡一区二区| 91色在线看| 日韩欧美亚洲国产一区| 日韩欧美不卡| 日韩欧美综合在线视频| 国产裸舞福利在线视频合集| 国产日韩在线视频| 中文国产字幕在线观看| 国产中文在线观看| 精品国产99久久久久久| wwwav91com| 日韩精品视频在线观看免费| 亚欧成人精品| 中文字幕在线观看视频www| 欧美日韩精品是欧美日韩精品| 一区二区在线看| 在线一区av| 中文官网资源新版中文第二页在线观看 | 香蕉视频亚洲一级| 国产午夜精品视频| av免费不卡国产观看| 日本黄色一区二区三区| 久久99久久久久久久噜噜| 亚洲一二三不卡| 亚洲中午字幕| 国产欧美日韩在线| 欧美婷婷精品激情| 97最新国自产拍视频在线完整在线看| 一区二区欧美国产| 成人a在线视频免费观看| 快she精品国产999| 精品国产乱码久久久久久牛牛| 交视频在线观看国产| 中文字幕在线观看国产| 欧美日韩综合视频网址| 日韩欧美在线视频| 亚洲黄色www| 日韩三级精品| 蜜桃精品视频| 精品国产欧美成人夜夜嗨| 不卡福利视频| 一区二区在线观| 国产不卡视频在线| 国产不卡的av| 热久久精品国产| 精品一二三四区| 精品成人久久av| 91日韩中文字幕| 亚洲制服丝袜一区| 91精品久久久久久蜜臀| 日韩av一区二区在线| 中文字幕精品亚洲| 欧美日中文字幕| 国产欧美日韩在线视频| 精品欧美久久久| 中文字幕日韩欧美在线视频| 日韩国产一区| 国产劲爆久久| 日韩精品视频在线观看网址| av免费在线播放| 国产偷国产偷亚洲清高网站 | 在线中文字幕视频| 欧美日韩精品区| 亚洲一区在线观看网站| 国产欧美日韩中文久久| 日韩精品在线中文字幕| 国产欧亚日韩视频| 亚洲综合中文字幕在线| 黄色一区二区在线观看| 中文精品在线观看| 国产一卡二卡3卡4卡四卡在线| 欧美 日韩 国产 在线| 中文字幕在线观看播放| 中文天堂资源在线| 久久婷婷国产| 国产欧美日韩视频在线| 日韩激情一区| 欧美日韩一级视频| 色综合影院在线| 欧美婷婷久久| 亚洲最新永久观看在线| 91精品国产91久久| www.av中文字幕| 在线精品观看| 91精品国产综合久久福利| 欧美日韩尤物久久| 日韩不卡av| 欧美日韩国产中文| 亚洲欧美韩国综合色| 一区二区三区精品99久久| 国产综合成人久久大片91 | 一区二区91| 欧美日韩在线精品成人综合网| 亚洲美女视频一区| 国产 欧美 日韩 在线| 日韩欧美99| 国产亚洲短视频| 免费日韩精品中文字幕视频在线| 欧美中文字幕| 日韩欧美在线综合| 久久久99久久精品欧美| 国产乱国产乱300精品| 国产欧美三级| 国内精品露脸在线视频播放| 91精品综合久久| 国产乱国产乱老熟300| 最近中文字幕第一页| 久久蜜桃精品| 国产一二三区精品视频| 国产网站欧美日韩免费精品在线观看 | 欧美变态tickling挠脚心| 国产日韩在线视频| 欧美日韩国产区| 高清不卡一区二区| 99精品免费观看| 欧美三级免费观看| 国产日韩综合| 日韩视频在线免费看| 日韩在线二区| 久久久精品日韩欧美| 免费国产h视频在线观看86| 麻豆精品99| 精品国产不卡一区二区| 顶级网黄在线播放| 国产欧美日韩91| 二区视频在线观看| 日韩精品在线播放| 日韩欧美国产视频| 色综合天天性综合| 91精品国产自产观看在线| 精品久久久网| 91麻豆视频网站| 亚洲黄色片在线观看| 精品日韩在线| 久久 天天综合| 欧美日韩国产页| 日韩在线观看a| 日韩在线观看精品| 亚洲乱码中文字幕| 欧美日韩成人一区| 国产永久免费高清在线观看| 中文字幕在线导航| 精品播放一区二区| 亚洲一区在线观看网站| 精品视频—区二区三区免费| 一级日韩一级欧美| 1区2区3区在线视频| av免费观看网站| 久久91精品视频| 中文字幕欧美日韩在线| 91精品国产综合久久香蕉最新版| 中文字幕日韩视频| 亚洲尤物av| 国产福利免费在线观看| 欧美日韩高清一区二区不卡| 伊人国产视频| 久久99久久久欧美国产| 欧美日韩国产一区中文午夜| 日韩.欧美.亚洲| 一本大道一区二区三区| 在线精品观看| 欧美日韩一二三四| 日韩中文欧美在线| 中文字幕日韩欧美在线| 91精品久久久久久久久| av免费在线不卡| 91精品国产综合久久久久久| 欧美激情一区二区在线| 黄色一区二区在线观看| 中文字幕欧美日韩| 中文字幕欧美亚洲| 91精品在线观| 欧美日韩亚洲系列| 欧美日韩性视频在线| 欧美久久一二三四区| 亚洲乱码中文字幕综合|