青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

xi52qian  
xi52qian
日歷
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456
統計
  • 隨筆 - 4
  • 文章 - 0
  • 評論 - 1
  • 引用 - 0

導航

常用鏈接

留言簿

隨筆檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

 

進程由兩部分組成:

  • 操作系統管理進程的內核對象。存放該進程 的統計信息的地方。
  • 地址空間,包含可執行模塊和DLL模塊的代碼和數據。動態分配的內存(線程堆棧和堆)。

進程是不活潑的,進程當中至少要有一個線程,每個線程要有自己的堆棧和自己的CPU寄存器。CPU通過算法給每個線程分配時間片的辦法來造成假象是在同時工作(多核通過自己的算法實現同時運行)。

4.1 編寫第一個Windiws應用程序

Windows兩種類型的程序:

  • CUI程序,比如CMD.EXE等等。Microsoft Visual C++連接開關為/SUBSYSTEM:CONDOLE(程序啟動時不能創建GUI程序)。
  • GUI程序,圖形用戶程序,比如Notepad,Word等等。Microsoft Visual C++連接開關為/SUBSYSTEM:WINDOWS(程序啟動時不能創建CUI程序)。

注意:倆者的概念其實是很模糊的,CUI可以創建GUI圖形界面,反之GUI程序可能用CUI程序。

Windows進入點函數(區分在于CUI和GUI程序,ANSI碼和UNICODE碼)

int WINAPI WinMain(
HINSTANCE hinstExe,
HINSTANCE,
PSTR pszCmdLine,
int nCmdShow);

int WINAPI wWinMain(
HINSTANCE hinstExe,
HINSTANCE,
PWSTR pszCmdLine,
int nCmdShow);

int __cdecl main(
int argc,
char *argv[],
char *envp[]);

int __cdecl wmain(
int argc,
wchar_t *argv[],
wchar_t *envp[]);

其實Windows程序啟動時最開始并不調用自己寫的入口函數,而是調用系統的幾個入口函數,以便可以調用malloc和free之類的函數,初始化全局和靜態C++對象等。

  • 檢索指向新進程的完整命令行的指針。
  • 檢索指向新進程的環境變量的指針。
  • 對C/C++運行期的全局變量進行初始化。如果包含StdLib.h文件,代碼就可以訪問這些變量。
  • 對C運行期的malloc和callo和其他底層輸入/輸出例程使用的內存棧進行初始化。
  • 為所有全局和靜態C++類對象調用構造函數。

  應用程序類型                            進入點                                                     嵌入可執行文件的啟動函數


ANSI碼GUI應用程序                   WinMain                                               WinMainCRTStattup

UNICODE碼GUI應用程序           wWinMain                                            wWinMainCRTStattup

ANSI碼CUI應用程序                   main                                                       mainCRTStattup

UNICODE碼CUI應用程序           wmain                                                    wmainCRTStattup


注意:應用程序會根據SUBSYSTEM開關來查找嵌入可執行啟動函數,如果進入點函數和啟動函數不匹配則顯示鏈接錯誤。可以刪除SUBSYSTEM(VS Project Settings)開關,這樣應用程序會自動需找匹配的函數。

進入點函數返回時調用系統的exit函數,將返回值傳遞給它。exit函數負責下面操作:

  • 調用由_onexit函數的調用而注冊的任何函數。
  • 為所有全局的和靜態的C++類對象調用析構函數
  • 調用操作系統的ExitProcess,并將返回值傳遞給他,關閉進程。

4.1.1 進程的實例句柄

WinMain/wWinMain函數的第一個參數表示進程加載的可執行文件的基地址/句柄。對于加載資源的調用都要使用此句柄,比如HICON LoadIcon(HINSTANCE, PCTSTR)。有的函數需要使用HMODULE,和HINSTANCE是一個意思(區分主要在于16位的操作系統中)。

HMODULE GetModuleHandle(PCTSTR pszModele);

函數作用,返回加載調用進程中的可執行文件或者DLL的基地址/句柄,參數是可執行文件或者DLL的名稱。給pszModule賦值NULL,則返回的是進程中可執行文件的句柄。

注意:如果找不到則返回NULL。如果在DLL中傳遞NULL,返回的仍然是進程加載的可執行文件的句柄。

4.1.2 進程的前一個實例句柄

第二個參數都傳遞NULL,是為16位系統所保留的。

4.1.3 進程的命令行

注意:不要試圖修改命令行內部內存的值,要使用修改先拷貝出來。

PTSTR GetCommandLine(); // 返回命令行字符串
 
PTSTR CommandLineToArgv(PTSTR pszCmdLine, int *pNumArgs); // 拆分命令行字符串函數

Demo:

int nNumargs;
PTSTR *ppArgv = CommandLineToArgv(GetCommandLine(), &nNumargs);
if ('x' == *ppArgv[1]) {
// TODO:
}

// 手動釋放內存,一般不需要釋放,系統會進程關閉時候自動釋放
HeapFree(GetProcessHeap, 0, ppArgv);


4.1.4 進程的環境變量

環境塊是進程地址空間中分配的內存塊每個環境塊都包含一組字符串,格式如下:

VarName1=VarVarlue1\0

VarName2=VarVarlue2\0

VarName3=VarVarlue3\0

…..

VarNameX=VarVarlueX\0

\0

注意:

  • 排序必須按照字母順序。
  • ‘=’號不能是變量名的一部分。
  • 等號左右兩邊的空格將被算做名稱或者值。
  • 最后必須加個’\0’表示結束。
  • 子進程和父進程不共用環境塊,修改不會影響父/子進程。
DWORD GetEnvironmentVariable(PCTSTR pszName, PTSTR pszValue, DWORD cchValue);


pszName指變量名,pszValue指向變量值的緩存區,cchValue緩存區的大小。找不到變量名或者設置的長度不夠存放就返回0。

 

ExpandEnvironmentStrings(PCSTR pszSrc, PSTR pszDst, DWORD nSize);

用來用現實出可替換的環境變量的字符串。

BOOL SetEnvironmentVariable(PCTSTR pszName, PCTSTR pszValue);

設置環境變量的值,如果不存在則創建,如果存在則替換他的值。

4.1.5 進程的親緣性

子進程繼承父進程的親緣性。(具體什么意思沒明白)

4.1.6 進程的錯誤模式

進程可以設置如何處理一些錯誤。

UINT SetErrorMode(UINT fuErrorMode);


各個模式用OR連接


      標志                                                                                                               說明

SEM_FAILCRITICALERRORS                                                                    系統不顯示關鍵錯誤句柄消息框,并將錯誤返回給調用進程

SEM_NOGOFAULTERRORBOX                                                               系統不顯示一般保護故障消息框。本標志只應該由采用異常情況處理程序來處理一般保護(GP)故障的調式應用程式來設定

SEM_NOOPENFILEERRORBOX                                                               當系統找不到文件時,它不顯示消息框。

SEM_NOALIGNMENTFAULTEXCEPT                                                    系統自動排除內存沒有對其的故障,并使應用程序看不到這些故障。本標志對X86處理器不起作用。


子進程繼承父進程的錯誤模式,如果不想讓子進程繼承父進程的錯誤模式的話,可以再調用CreateProcess時設定CREATE_DEFAULT_ERROR_MODE標志。

4.1.7 進程的當前驅動器和目錄

默認情況下不提供全路徑的話,系統就會在當前驅動器和目錄中查找文件,比如CreateFile,因為驅動器和目錄是每個進程來維護的,所以某個線程改變了目錄和驅動器會改變整個進程的目錄和驅動器。

下面兩個函數讀取和設置:

DWORD GetCurrentDirectory(DWORD cchCurDir, PTSTR pszCurDir);

BOOL SetCurrentDirectory(PCTSTR pszCurDir);

4.1.8 進程的當前目錄

驅動器環境塊的格式:

=C:=C:\Utility\Bin

程序查找驅動器環境塊,如果沒有則按驅動器名查找。

子進程不能繼承父進程的驅動器塊,如果想繼承必須寫到環境變量中去。(好像是這樣,如果有不對請高人指點)。

DWORD GetFullPathName(PCTSTR pszFile, DWORD cchPath, PTSTR pszPath, PTSTR *ppszFilePart);

獲取驅動器的當前目錄,比如:

TCHAR szCurDir[MAX_PATH];
DWORD GetFullPathName(TEXT("C:"), MAX_PATH, szCurDir, NULL);


4.1.9 系統版本

DWORD GetVersion();此函數存在高地位的混論BUG,所以盡量不要使用。

BOOL GetVersion(POSVERSIONINFOEX pVersionInfomation);
typedef struct _OSVERSIONINFOEXA {
    DWORD dwOSVersionInfoSize;    // 在調用GetVersionEx函數之前,必必須置為sizeof(OSVERSIONINFOEX)
    DWORD dwMajorVersion;         // 主系統的主要版本號
     DWORD dwMinorVersion;         // 主系統的次要版本號
     DWORD dwBuildNumber;          // 當前系統的構建號
     DWORD dwPlatformId;           // 識別當前系統的平臺。可以使VER_PLATFORM_WIN32(WIN32),VER_PLATFORM_WIN32_WINDOWS(WINDOWS 95/WINDOWS 98),VER_PLATFORM_WIN32_NT(WINDOWS NT/WINDOWS 2000)或VER_PLATFORM_WIN32_CEHH(WINDOWS CE)
    CHAR   szCSDVersion[ 128 ];     // Maintenance string for PSS usage 本域包含了附加文本,用于提供關于已經安裝的操作系統的詳細信息
     WORD   wServicePackMajor;       // 最新安裝的服務程序包的主要版本號
     WORD   wServicePackMinor;       // 最新安裝的服務程序包的次要版本號
     WORD   wSuiteMask;              // 用于標識系統上存在那個程序組(VER_SUITE_SMALLBUSINESS,VER_SUITE_ENTERPRISE,VER_SUITE_BACKOFFICE,VER_SUITE_COMMUNICATIONS,VER_SUITE_TERMINAL,VER_SUITE_SMALLBUSINESS_RESTRICTED,VER_SUITE_EMBEDDEDNT和VER_SUITE_DATACENTER)
     BYTE  wProductType;             // 用于標識安裝了下面的哪個操作系統:VER_NT_WORKSTATION,VER_NT_SERVER或VER_NT_DOMAIN_CONTROLLER
    BYTE  wReserved;                // 留作將來使用
} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;

這個是擴展版本。
 
4.2 CreateProcess函數
終于看到正題了~大笑
BOOL CreateProcess(
    LPCSTR lpApplicationName,
    LPSTR lpCommandLine,
    LPSECURITY_ATTRIBUTES lpProcessAttributes,
    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    BOOL bInheritHandles,
    DWORD dwCreationFlags,
    LPVOID lpEnvironment,
    LPCSTR lpCurrentDirectory,
    LPSTARTUPINFOA lpStartupInfo,
    LPPROCESS_INFORMATION lpProcessInformation
    );

  1. 進程啟動時,首先創建一個進程內核對象,該內核對象不是進程,是一個管理進程存儲進程信息的小型數據結構。(計數為1)
  2. 創建一個虛擬地址空間,加載可執行文件和DLL。
  3. 為進程創建個主線程的內核對象,和進程內核對象一樣,是用來管理和存儲線程信息的小型數據結構。(計數為1)
  4. 調用C/C++運行期啟動代碼,主線程開始運行,最終調用啟動函數,成功返回TRUE(未能正確加載DLL也返回TRUE,所以父進程無法查看)。

4.2.1 pszApplicationName和pszCommandLine

pszCommandLine參數:用來創建進程的命令行參數。查看第一個標記,如果沒有”.exe”會自動添加”.exe”上去。(如果pszApplicationName參數NULL)

  1. 包含調用進程的”.exe”文件的目錄。
  2. 調用進程的當前目錄。
  3. windows系統目錄
  4. windows目錄
  5. PATH環境變量中列出的目錄。

如果pszApplicationName參數不為NULL,系統將在當前目錄中查找.exe文件(不會自動添加“.exe”),如果找不到將失敗,此時pszCommandLine作為參數傳遞給可執行程序的進程。

4.2.2 psaProcess,psaThread和binHeritHandles

psaProcess,psaThread是進程和進程主線程內核對象的安全屬性。默認值為NULL。

binHeritHandles設置為TRUE表示父進程在創建子進程可以繼承安全屬性標志里設置為TRUE的任何可繼承的內核對象。如果設置為FALSE子進程將不繼承任何內核對象。

4.2.3 fdwCreate

用于標識標志,定義規則如何創建新進程。我一般寫默認值NULL。具體的太多了,請查看MSDN吧,不想寫了。

4.2.4 pvEnvironment

設置子進程使用的環境內存塊,一般默認值為NULL,表示子進程繼承父進程的環境塊。

PVOID GetEnvironmentString(); // 獲取當前內存塊的地址
BOOL FreeEnvironmentStrings(PTSTR pszEnvironmentBlock); // 不用的時候調用此函數釋放內存塊


4.2.5 pszCurDir

設定工作目錄和驅動器號,如果為NULL則和應用程序的目錄相同,如果設置比如以’\0’結尾的包含驅動器名的路徑。

4.2.6 psiStartInfo

typedef struct _STARTUPINFO {
    DWORD   cb;             //(兩者兼有,控制臺和窗口程序) 
    LPSTR   lpReserved;     // (兩者兼有)保留,必須初始化為NULL
    LPSTR   lpDesktop;      // (兩者兼有)用于標識啟動應用程序所在的桌面的名字。如果該桌面存在,新進程便與指定的桌面相關聯。如果桌面不存在,便創建一個帶有默認屬性的桌面,并使用為新進程指定的名字。如果lpDesktop是NULL(這是最常見的情況),那么該進程將與當前桌面相關聯。
    LPSTR   lpTitle;        // (控制臺)用于設定控制臺窗口名稱。如果lpTitle是NULL,則可執行文件的名字將用作窗口名
    DWORD   dwX;            // x,y坐標,只有當子進程用CW_USEDEFAULT作為CreateWindows的x參數來創建它的第一個重疊窗口時,才使用這兩個坐標。若是創建控制臺窗口的應用程序,這些成員用于指明控制臺窗口的左上角。
    DWORD   dwY;          
    DWORD   dwXSize;        //(兩者兼有)設定窗口寬度和長度,只有子進程用WM_USEDEFAULT作為CreateWIndows的nWidth參數來創建它的第一個重疊窗口時才是用這個值。控制臺就是控制臺的寬和長
    DWORD   dwYSize;
    DWORD   dwXCountChars;  //(控制臺)用于設定子應用程序控制臺的長度和寬度(字符表示)
    DWORD   dwYCountChars;
    DWORD   dwFillAttribute;// (控制臺)用于設定子應用程序的控制臺背影顏色和文本。
    DWORD   dwFlags;        // (兩者兼有)參見下一段
    WORD    wShowWindow;    // (窗口)用于設定子應用程序初次調用ShowWindow將SW_SHOWDEFAULT作為nCmdShow參數傳遞時,該應用程序的第一個重疊窗口應該如何出現。本成員可以是通常用于ShowWindow函數的任何一個SW_*標識符
    WORD    cbReserved2;    // 保留,必須初始化為0
    LPBYTE  lpReserved2;    // 保留,必須初始化為NULL
    HANDLE  hStdInput;      // (控制臺)用于設定控制臺輸入和輸出用的緩存的句柄。默認設置hStdInput是鍵盤緩存,hStdOutput和hStdError窗口的緩存。
    HANDLE  hStdOutput;     // 
    HANDLE  hStdError;
} STARTUPINFO, *LPSTARTUPINFO;


設置某些值,大部分需要默認值,必須初始化為0都。

STARTUPINFO si = {sizeof(si)};

dwFlags標志,用于修改如何來創建子進程。


標志


STARTF_USESIZE                                                                              使用dwXSize和dwYSize成員

STARTF_USESHOWWINDOW                                                         使用wShowWIndow成員

STARTF_USEPOSITION                                                                    使用dwX和dwY成員

STARTF_USECOUNTCHARS                                                            使用dwXCountChars和dwYCountChars成員

STARTF_USEFILLATTRIBUTE                                                           使用dwFillAttribute成員

STARTF_USESTDHANDLES                                                             使用hStdInput,hStdOutput和hStdError成員

STARTF_RUN_FULLSCREEN                                                            強制再x86計算機上運行的控制臺應用程序以全屏幕方式啟動運行

STARTF_FORCEONFEEDBACK                                                        光標設置為沙漏,過了2秒如果進程沒啟動GUI,CreateProcess程序將光標設置為箭頭,5秒內顯示一個窗口,成功調用GetMessage則反復箭頭,如果沒有成功,等待5秒 變為箭頭

STARTF_FORCEOFFFEEDBACK                                                                                      


4.2.7 ppiProcInfo

typedef struct _PROCESS_INFORMATION {
    HANDLE hProcess;
    HANDLE hThread;
    DWORD dwProcessId;
    DWORD dwThreadId;
} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;

返回的分別是,子進程進程句柄,子進程中主線程的線程句柄,子進程ID,子進程中主線程的ID。

注意:

  1. hProcess和hThread被賦值后,內核對象的計數器分別被+1。
  2. 系統為每個進程和線程分配的ID值都是不同的,但是當某進程退出后,新進程很可能會使用退出進程的ID。

 

4.3 終止進程的運行

4.3.1 主線程的進入點函數返回

最好強力推薦使用這種方式。

  1. 調用C++析構函數。
  2. 釋放堆棧內存。
  3. 將進程退出代碼(進程內核對象中維護)設置為進入點函數返回值。
  4. 系統將進程內核對象的返回值減去1。

4.3.2 ExitProcess函數

避免使用這個方法。

VOID ExitProcess(UINT fuExitCode);

終止進程運行,并將退出碼設置為fuExitCode。

注意:

  1. 調用ExitProcess后,所有的代碼都將不會執行,關閉進程。
  2. 調用ExitProcess后,不會釋放C++析構函數資源,有系統清理進程時候直接釋放內存。
  3. 進程的主線程直接return退出后,啟動函數中也會調用ExitProcess函數,進程終止,其他線程也會關閉。
  4. 進程的主線程調用_endThreadex或者EndThread函數關閉主線程后,進程沒有被關閉,子線程繼續運行。

 

4.3.3 TerminiateProcess函數

能不用就別用。

BOOL TerminiateProcess(HANDLE hProcess, UINT fuExitCode;)

關閉指定為hProcess句柄的進程,推出代碼為fuExitCode。

注意:

  1. 關閉進程將丟失所有需要保存到硬盤的數據,因為進程關閉時候最后會自己釋放內存資源,關閉內核對象的句柄值,所以不會造成內存泄露。
  2. 此函數是個異步函數,它返回的時候無法知道,需要關閉的進程是否已經被強制關閉了。

4.3.4 進程終止運行時出現的情況

  1. 進程中剩余的所有線程全部終止運行。
  2. 釋放該進程引用的GDI和用戶對象,內核對象被關閉(別的進程有引用則計數器減1,如果沒有引用則關閉內核對象)。
  3. 推出代碼將從STILL_ACTIVE(后面章節線程將介紹該結構)改為傳遞給ExitProcess和TerminiateProcess代碼。
  4. 內核對象狀態變為收到通知狀態(線程中介紹),其他線程掛起,知道進程終止。
  5. 進程內核對象計數減去1,或者關閉。

注意:

進程內核對象的壽命可能遠遠大于進程本身,父進程保留子進程內核對象可以查看它的推出代碼調用下面函數:

BOOL GetExitCodeProcess(HANDLE hProcess, PDWORD pdwExitCode);


可以調用這個函數來判斷子進程是否關閉,如果子進程沒有關閉,它的STILL_ACTIVE標識符定義為0x103。但是這么作效率不是很高。

 

4.4 子進程

沒什么好說的,前面的都說了,用CloseHandle關閉子進程和子進程中主線程的句柄值來切斷父進程和子進程的所有聯系。

 

4.5 每局系統中運行的進程

利用ToolHelp函數族來開發管理操作系統上的進程。打算自己也寫個試試。

 

本文章的內容是本人學習Windows核心編程第四章后的總結,有錯誤請大家糾正,轉載注明出處:

http://www.cnblogs.com/xi52qian/

posted on 2011-03-04 16:45 xi52qian 閱讀(284) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


 
Copyright © xi52qian Powered by: 博客園 模板提供:滬江博客
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            男人的天堂亚洲| 欧美成年网站| 亚洲美女毛片| 亚洲国产成人精品女人久久久 | 日韩视频免费观看| 欧美mv日韩mv亚洲| 国产精品久久久一区二区| 国产精品久久看| 国语自产精品视频在线看抢先版结局| 国产日韩精品在线| 在线播放中文一区| 亚洲精品综合精品自拍| 亚洲婷婷综合色高清在线| 亚洲影院色无极综合| 久久久久久尹人网香蕉| 亚洲国产毛片完整版| 亚洲一区二区在线视频| 欧美在线播放视频| 欧美www视频| 国产毛片一区二区| 在线观看不卡| 欧美韩日视频| 国产美女精品免费电影| 日韩视频在线免费| 欧美诱惑福利视频| 亚洲福利视频一区| 午夜精品久久久久影视| 欧美日韩国产精品一区二区亚洲| 国产精品久久久999| 欧美freesex交免费视频| 国产精品视频大全| 91久久午夜| 麻豆av一区二区三区久久| 亚洲一区二区免费看| 欧美极品欧美精品欧美视频| 国产精品自拍一区| 亚洲在线观看免费| 亚洲国产日韩欧美一区二区三区| 性欧美xxxx大乳国产app| 欧美成人午夜77777| 久久精品夜色噜噜亚洲a∨| 国产精品视频第一区| 亚洲综合精品自拍| 亚洲国产精品成人一区二区| 欧美一区永久视频免费观看| 亚洲一区二区在线看| 国产精品久久久久久久午夜片| 一区二区高清| 一本久久a久久精品亚洲| 免费日韩av片| 中日韩美女免费视频网址在线观看| 久久伊人一区二区| 久久综合久久综合九色| 91久久精品日日躁夜夜躁国产| 亚洲高清一区二| 欧美日韩麻豆| 亚洲欧洲一区二区三区| 鲁鲁狠狠狠7777一区二区| 欧美在线免费观看视频| 1769国内精品视频在线播放| 亚洲日本欧美日韩高观看| 欧美日韩国产色视频| 欧美一区二区在线免费播放| 亚洲欧美高清| 亚洲免费在线观看| 在线观看视频免费一区二区三区| 亚洲电影在线| 国产精品一区二区在线| 欧美 日韩 国产在线| 欧美黑人在线播放| 欧美日韩国产综合视频在线观看中文 | 久久精品综合网| 久久视频国产精品免费视频在线| 亚洲美女性视频| 99人久久精品视频最新地址| 国内精品美女在线观看| 亚洲人成亚洲人成在线观看| 国内精品视频在线观看| 在线视频日韩| 亚洲免费电影在线观看| 久久美女性网| 久久成人在线| 国产精品视频导航| 9色国产精品| 亚洲一区视频在线| 麻豆成人在线| 麻豆视频一区二区| 亚洲精品一区二区网址| 欧美日本久久| 最新精品在线| 亚洲精品国产拍免费91在线| 欧美va亚洲va日韩∨a综合色| 老司机aⅴ在线精品导航| 国产手机视频一区二区| 午夜欧美视频| 蜜臀久久99精品久久久久久9| 欧美专区福利在线| 久久久激情视频| 亚洲成人在线| 欧美黄污视频| 亚洲精品视频免费观看| 亚洲一区二区三区中文字幕| 欧美特黄一级| 久久国产精品99国产精| 国产伦精品一区二区三区高清| 欧美在线视频一区| 亚洲电影免费观看高清完整版在线| 亚洲二区精品| 欧美人牲a欧美精品| 亚洲一区日本| 欧美高清视频在线观看| 亚洲少妇自拍| 精品福利免费观看| 欧美成人综合| 99riav国产精品| 美女被久久久| 亚洲午夜羞羞片| 国产精品无码永久免费888| 玖玖国产精品视频| 亚洲尤物视频网| 亚洲国产精品福利| 欧美在线视频在线播放完整版免费观看| 在线播放国产一区中文字幕剧情欧美| 欧美精品97| 久久国产精品久久久久久| 亚洲区免费影片| 久久美女性网| 久久精品九九| 亚洲欧美日韩精品久久久久| 亚洲国产日韩美| 亚洲精品中文字幕在线观看| 久久国产日韩| 欧美一区二区三区免费视频| 日韩视频亚洲视频| 亚洲电影成人| 亚洲成人资源网| 国产午夜精品全部视频在线播放| 欧美日韩国产区一| 欧美激情aaaa| 欧美国产日韩一区二区| 久久国产一区二区三区| 久久久xxx| 老牛嫩草一区二区三区日本| 午夜在线a亚洲v天堂网2018| 久久国产婷婷国产香蕉| 久久久久一区二区| 久久精品中文| 欧美不卡视频| 亚洲国语精品自产拍在线观看| 亚洲高清不卡av| 亚洲精品久久久久中文字幕欢迎你 | 国产精品日韩欧美一区| 欧美理论电影在线观看| 欧美经典一区二区| 欧美日韩一卡二卡| 国产精品资源| 又紧又大又爽精品一区二区| 亚洲激情精品| 亚洲视频观看| 午夜在线精品| 久久婷婷国产麻豆91天堂| 免费观看成人网| aa级大片欧美三级| 亚洲天堂av高清| 美女爽到呻吟久久久久| 欧美午夜免费电影| 狠狠色丁香久久综合频道| 亚洲精品乱码久久久久久日本蜜臀| 亚洲永久免费精品| 欧美成人精品一区二区| 一二三区精品| 免费日韩一区二区| 国产色爱av资源综合区| 欧美一区二粉嫩精品国产一线天| 久久人人看视频| 国产精品国产三级国产aⅴ无密码| 韩国在线一区| 欧美成人资源网| 国产亚洲一本大道中文在线| 亚洲一区综合| 亚洲福利在线观看| 欧美一区二粉嫩精品国产一线天| 欧美日韩在线第一页| 伊人男人综合视频网| 午夜精品在线看| 亚洲靠逼com| 欧美日韩国产色视频| 在线成人激情视频| 欧美一区二区三区四区夜夜大片| 亚洲精品欧美日韩| 欧美精品一区二区三区蜜桃| 亚洲人成欧美中文字幕| 亚洲第一久久影院| 免费高清在线一区| 亚洲国产成人高清精品| 蜜臀久久99精品久久久画质超高清| 欧美在线观看视频一区二区三区| 国产精品专区第二| 欧美一区二区三区视频免费| 亚洲一区美女视频在线观看免费|