3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

inside MPQ

發布時間:2023/12/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 inside MPQ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

翻譯前聲明:
? ? ? ? ? 本翻譯對于原文進行了適量刪節和修改。
? ? ? ? ? 本翻譯只做為學習參考使用,不得用于任何商業目的。
? ? ? ? ? 由于本人能力有限,如有錯誤請回帖指出
? ? ? ? ? 要轉貼本翻譯請征得翻譯作者的同意。
原文地址:http://www.campaigncreations.org/starcraft/inside_mopaq/
翻譯文章地址:http://www.islga.org/bbs/read.php?tid=13735
原文作者:Justin Olbrantz
翻譯作者:喀爾硫司之瞳? ? ? ? QQ:526312052

第一章? ? 關于MPQ的歷史


MPQ,也稱MoPaQ,是Mike O'Brien發明的一種壓縮文件格式。
在1996作為,MPQ應用在Diablo(暗黑破壞神)游戲中。
然而它的版權屬于 Blizzard 的父公司 Havas Interactive,并且在Mike O'Brien離開暴雪后繼續使用。 正是MPQs由于在Diablo(暗黑破壞神)中的出色表現,使其繼續應用在Starcraft(星際爭霸), Warcraft 2(魔獸爭霸2), Diablo 2(暗黑破壞神2), Lords of Magic(魔法大帝)中。

第二章? ? 關于MPQ的介紹


? ? MPQ內部包含了許多文件,包括坐標算法、聲音、動畫、字符串、數字數據和故事情節信息。
明顯地,MPQ的潛力很大。要想利用MPQ,那么您就需要了解它。

? 在有MPQ格式之前,一直使用的是WAR格式,在Warcraft 2,甚至在Warcraft1中存放游戲數據。然而WAR格式是簡單的,不精制的,是由缺乏經驗的程序員所編寫的文件格式(相信我,我知道)。文件在檔案中僅使用參考序數和是否被壓縮做為唯一可選擇調用的方法。
盡管如此它仍然完成了它的任務。它提供了壓縮格式下的文件調用。但是,很快缺點開始出現。調用時使用參考序數,意味著一長傳文件接口的名單必須被保留和被咨詢,當程序員需要使用其中一個文件,那么則需要級長的時間,工作變得越來越繁瑣。
當時這些問題并沒有那么嚴重,所以有人堅持使用WAR格式,但是一切在使用Battle.net(網絡對戰)后,問題變得不能接受。

?
MPQ的特點?
? 如被提及以前,MPQ格式一直被用做修正WAR的設計缺陷。但是現在他們也想增加一些全新的特點到MPQ。在暴雪的游戲中,MPQ格式的特點總結為以下幾點:

Security. 安全

暴雪一定不希望在游戲中玩家可以修改數據。或許他們提早知道MPQ格式可以為Starcraft使用。 不管怎樣,安全是最重要的,由此他們顯然做了級大的努力去維護游戲的安全性。

Efficiency. 效率

MPQs要求執行時先簡單預先輸入的各種各樣的任務數據然后實時放出。對于預先輸入數據,時間并不重要。 但是實時放出就是另一件事了,其中的數據必須快速地被解壓使用。

Multilinguality.多語言的計算機處理

在最開始的時候,暴雪就計劃發布其游戲在全球游戲市場,因此他們盡可能的做到多語言。 在創新時,他們決定設計多語種能寫入MPQ格式。

Expandability.擴展

顯然的,在游戲中需要使用獨立的數據。太大的數據不僅是效率低并且減慢游戲速度,如果補丁修改了,也是很麻煩的。暴雪明白這個道理,因而MPQ格式的要求就是有能力完全,高效率的,從多個檔案數據中調用需要的數據。

?
什么是strom?
? 相比在程序模塊中復制函數,多數程序員喜歡把相同代碼放到shared libraries(共享程序庫)里。shared libraries是包含了任意程序功能的函數模塊。不僅能避免多余,并且能縮小程序大小。
正因為如此,暴雪使用一個稱為Storm的共享程序庫(PC機上為Storm.dll,MAC機為Storm.bin)。
所有現代的暴雪游戲中都使用strom存放重要功能,比如讀取MPQ,Battle.net和一些圖形化例程。
當暴雪要發布新版本的游戲,只需要增加功能到strom,無需改變原有功能。 這意味著舊版本的游戲只用升級新版本strom就可以了,這就是我們俗稱的安裝補丁。
就像所有共享程序庫,任何想使用它的程序都可以訪問到它的函數。這就是為什么strom只包含MPQ讀取功能。


什么是 MPQ API Library DLL

雖然 Storm 沒有包含任何編寫MPQ的功能。
但是 StarEdit 包含,因為 SCM/SCX 文件也是 MoPaQ文件。
但是這些函數被加密了,所以只有知識淵博的黑客們才可以使用。
對于Blizzard 來說不幸的是,有一個這樣的黑客,他的名字是 Andrey Lelikov(aka Lelik)。
他發現了一種訪問這些寶貴的函數的途徑,并把這個復雜的過程封裝在
LMPQAPI.DLL(Lelik's MPQ API Library DLL)文件中。該文件自動破解
StarEdit,將這些函數展示在所有的程序員面前。

第三章? ? ? MPQ的基本原理

通過整個計算機發展史來看,絕大多數的進步都是在求解問題中發生的。
那么在這一章中,我們將采取看看一些涉及到MPQ的問題及其解決辦法。
?
HASH (散列或哈希)

? 問題:你有一個非常大的字符串數組,和一個字符串
? ? ? ? 怎么知道字符串是否在數組中?

你可能會開始在數組中與其他字符串比較每個字符串,但是,當進行應用后,你會發現,這種方法在實際使用時是特別慢的。在此之前,你又怎能在沒有與其他字符串比較的情況下,確定這個字符串是否存在?

解決方法:hash
hash是規模較小的數據類型(例如數字)能指向其他較大的數據類型(通常是字符串) 。在這種情況下,您可以在數組中先存儲hash。然后再計算其他字符串的hash,并比較它存儲的hash。通過字符串比較,如果hash在數組相匹配的新的hash,就可以核實存在。這就是所謂的索引查找,可以加快對于不同大小的數組和平均長度的字符串的搜索速度約100倍。

unsigned long HashString(char *lpszString)
{
?unsigned long ulHash = 0xf1e2d3c4;

while (*lpszString != 0)
{
??ulHash <<= 1;
ulHash += *lpszString++;
?}

return ulHash;
}


上面的代碼,體現了一個很簡單的散列算法。
功能是在每個字符添加前,把哈希值向左移動1bit,并總計字符串中的字符。
使用這種算法,字符串“arr\ units.dat ”將散列為0x5a858026,“unit\neutral\ acritter.grp ”將散列為0x694cd020 。
無可否認,這是一個很簡單的算法,但是不是非常實用。因為在較低的數字范圍內會產生一個相對可預見的輸出,以及出現大量的沖突。當多于一個字符串散列為相同值就會出現沖突。
MPQ格式使用一個非常復雜的散列算法(如下所示),產生完全不可預測的哈希值,這個算法十分有效,這就是所謂的單向散列。
就是把任意長度的輸入(又叫做預映射, pre-image),通過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小于輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。從預映射,能夠簡單迅速的得到散列值,而在計算上不可能構造一個預映射,使其散列結果等于某個特定的散列值。
即構造相應的任意長度明文=固定長度散列值-1(固定長度散列值)不可行。
故此使用特別算法,文件名“arr\ units.dat ”將散列為0xf4e6c69d ,和“unit\neutral\ acritter.grp ”將散列為0xa26067f3 。

unsigned long HashString(char *lpszFileName, unsigned long dwHashType)
{
?unsigned char *key = (unsigned char *)lpszFileName;
unsigned long seed1 = 0x7FED7FED, seed2 = 0xEEEEEEEE;
int ch;

while(*key != 0)
{
??ch = toupper(*key++);

seed1 = cryptTable[(dwHashType << 8) + ch] ^ (seed1 + seed2);
seed2 = ch + seed1 + seed2 + (seed2 << 5) + 3;
?}
return seed1;
}

HASH TABLES(散列表或哈希表)

問題:您嘗試在前面的示例中使用相同索引,您的程序一定會有中斷現象發生,而且不夠快。
? ? ? 您能做的只有讓程序不去查詢數組中的所有散列值。或者 您可以只做一次對比就可以得出在列表? ? ? ? 中是否存在字符串。
? ? ? 聽起來不錯,真的么?? ?
? ? ? 騙你的啦!!!

解決方案:a hash table

哈希表是數組中的一種特殊類型,也就是設定指定字符串的偏移量為那個字符串的散列值。
我的意思是,假如您設置一個字符串列表,使用一個單獨的固定大小的數組作為哈希表。
您想查看新的字符串是否在前面的哈希表里。
那么您需要先計算要查看字符串的散列值,然后以哈希表大小的散列值為模求余數。
因此,如果您使用上面列出的簡單散列算法,"arr\units.dat"將散列為0x5A858026,使其偏移量
0x26(0x5A858026 divided by 0x400 is 0x16A160, with a remainder of 0x26)。
假如這個地方有字符串,那么就會與被添加的字符串比較。
假如字符串在0x26不匹配,或直接不存在,那說明該添加的字符并不在在數組中。
下面的代碼說明了這:

int GetHashTablePos(char *lpszString, SOMESTRUCTURE *lpTable, int nTableSize)

{
?int nHash = HashString(lpszString), nHashPos = nHash % nTableSize;

if (lpTable[nHashPos].bExists && !strcmp(lpTable[nHashPos].pString, lpszString))
??return nHashPos;
?else
??return -1; //Error value
}

?

現在在這方面的解釋有一個明顯的缺陷。您認為發生沖突時(兩個不同的字符串哈希以同等價值的) ?顯然,他們不能在哈希表占用相同的接口。通常,解決的方法是在哈希表每個接口作為一個指針到一個鏈表,然后將鏈表里所有接口的散列值設置相同。
MPQ使用一個關于文件名稱的哈希表記錄內部文件,但是這個哈希表的格式與普通哈希表有所不同。
首先,MPQ根本不保存文件名,用三個散列值代替保存散列值的偏移量和為了核查文件名保存真實的文件名。
而是使用三個不同哈希值:一個做為哈希表的偏移量,兩個是做為核查。
兩個做為核查的哈希值被用來代替真實的文件名稱。當然,也有可能兩個不同文件名稱的散列值相同,
不過這種情況發生的可能性為平均1:18889465931478580854784 ,對于任何人來說這應該足夠安全了。


另一種方法:不同于常規的執行情況的mpq哈希表。
代替使用每個接口的鏈接表。當沖突發生時,把接口移動動下一個序列,并且重復動作,直到找到空閑空間。
下面的代碼是在MPQ設置讀取的基本方法:

int GetHashTablePos(char *lpszString, MPQHASHTABLE *lpTable, int nTableSize)
{
?const int HASH_OFFSET = 0, HASH_A = 1, HASH_B = 2;
int nHash = HashString(lpszString, HASH_OFFSET), nHashA = HashString(lpszString, HASH_A), nHashB = HashString(lpszString, HASH_B), nHashStart = nHash % nTableSize, nHashPos = nHashStart;

while (lpTable[nHashPos].bExists)
{
??if (lpTable[nHashPos].nHashA == nHashA && lpTable[nHashPos].nHashB == nHashB)
???return nHashPos;
??else
???nHashPos = (nHashPos + 1) % nTableSize;
??if (nHashPos == nHashStart)
???break;
?}

return -1; //Error value
}

每條代碼反復研究,理論的背后是不難的。
它基本上是如下這個過程:

1.計算3個散列值(一個沖突和兩個檢查)并將其存儲在變量。
2.移動沖突散列值的接口
3.接口未使用的嗎?如果是的話,停止搜尋,并傳回'文件沒有被發現' 。
4.兩個檢查是否匹配檢查我們正在尋找文件的散列值呢?如果是的話,停止搜尋,并傳回目前的接口。
5.如果在最后一個接口,移動到列表中的下一個接口,(wrapping around to the beginning ??)。
6.剛移動的借口是否和沖突時的散列值相同(是否檢查了整個哈希表? ) ?如果是的話,停止搜尋,并傳回'文件沒有被發現' 。
7.回到第3步。
如果您很仔細的話,您可能會從我的解釋和示例代碼注意到,是因為mpq的哈希表已保留所有文件接口在MPQ 。那么您認為每一個哈希表項如何得到填補?答案可能出乎您的意料卻顯而易見:您不能繼續添加文件。幾個人都問我為什么有一個上限(所謂的檔案限制),在一個MPQ中可以有多少檔案, ,是否有任何的方式解決這個限制。那么,您已經有了第一個問題的答案。至于第二項;沒有,您不能繞開該文件的限制。對這個問題,哈希表,甚至不能調整大小,除非您重新改造MPQ。在哈希表每個接口因為重新設置大小不同位置可能會改變。而且導致無法獲得新的地址,因為地址是文件名的散列值,并且我們還可能不知道檔案名稱。


Compression? 壓縮
問題:您有一個很大的程序(比如說, 50 megs ) ,您要分發在互聯網上。但50 megs是一個非常大的下載量,而且別人未必有興趣等待四個半小時去下載這個程序。

解決方法:壓縮。
壓縮是一門藝術。是在更小的內存中重新放置等量的數據。
有數以百計不同的壓縮算法,使用不同的方式。
MPQ實際使用的算法是the Data Compression Library, licensed from PKWare (one of the leaders in applied compression),在此解釋太過于復雜。相反,我會嘗試解釋一個更簡單的壓縮算法的例子。

? ? ? ? ? ? ? ? ? ? 本章節并不完全 ,因為作者沒寫完


Encryption? 加密

這個世界上總是有喜歡剽竊的人存在,所以我們需要有一個保護資料安全的系統。
千百年來人們一直試圖傳遞信息給他人。從手寫的信件進行,信使徒步穿越古希臘,納粹潛艇的無線電傳輸,在第二次世界大戰,使用信用卡交易,到網絡應用的今天,有能力去確保別人無法獲得您的信息是必要的。
所謂的加密是復雜的藝術的保護,然而我們不知道設計第一個算法的人,我們也不知道到底有多少的算法。一切從簡單的數據加擾,嬗變,甚至算法,其中有解密密鑰(有時也稱為密碼)是不同的加密密鑰(在一個方法所謂非對稱加密) ,已做了一次又一次。
做為一個全面的權威加密方法,本文章肯定從來沒有索賠,也不期望。
您只需要知道加密是你與MPQ直接相關的。
讓我們從一個簡單的加密算法開始,這是刊登在《Basic Lab Notes》 (為了可讀性本人改變了一些變數名稱,評論刪除) :

void EncryptBlock(void *lpvBlock, int nBlockLen, char *lpszPassword)
{
?int nPWLen = strlen(lpszPassword), nCount = 0;
char *lpsPassBuff = (char *)_alloca(nPWLen);

memcpy(lpsPassBuff, lpszPassword, nPWLen);

for (int nChar = 0; nCount < nBlockLen; nCount++)
{
??char cPW = lpsPassBuff[nCount];

lpvBlock[nChar] ^= cPW;

lpsPassBuff[nCount] = cPW + 13;

nCount = (nCount + 1) % nPWLen;
?}

return;
}

這是非常簡單的哈希代碼,不應被用來在一個實際的程序中使用。
即使代碼是隱藏的(沒有雙關語意),這也是簡單的 。
不言而喻,這是通過塊進行加密的,把每個字節與相應的字節的密碼轉換為二進制。然后修改字節的密碼,加入13 ( 選擇13是因為這是一個素數)。這樣做是為了使代碼的模式,更難以識別。
那么,用此算法,加密字符串“encryption” ( 65 6E 63 72 79 70 74 69 6F 6E),加密的密碼“ mpq ” (4D 50 51 ),這樣會得到一個無法讀取字符串(28 3E 32 28 24 2E 13 03 04 1A)。
現在,這個算法是對稱的。這意味著密碼是用來加密有相同密碼的塊。事實上,由于轉換為二進制是一個對稱的運作,完全相同的算法可以用來解密。請注意,大多數的對稱加密算法是不完全對稱,所以他們要求加密和解密的功能有所不同。

好吧,下面就就是關鍵的地方。
如果您想要編寫,就必須在哪里都知道加密算法。
教導給您這個方法是我的使命。

MPQ的加密算法混合其他加密技術。它創建了一個加密表(這也是用在散列函數) ,并使用一個文件的加密密鑰,以挑選出某些成員的加密表。然后對表中的成員進行轉換成二進制數據加密。現在,用一個相當奇怪的方法來做,所以或許有些代碼將顯示您it is overcomplicated :-p。以下代碼生成密碼表數組長度為0x500:

void prepareCryptTable()
{
?unsigned long seed = 0x00100001, index1 = 0, index2 = 0, i;

for(index1 = 0; index1 < 0x100; index1++)
{
??for(index2 = index1, i = 0; i < 5; i++, index2 += 0x100)
{
???unsigned long temp1, temp2;

seed = (seed * 125 + 3) % 0x2AAAAB;
temp1 = (seed & 0xFFFF) << 0x10;

seed = (seed * 125 + 3) % 0x2AAAAB;
temp2 = (seed & 0xFFFF);

cryptTable[index2] = (temp1 | temp2);
??}
?}
}


你是不是越來越覺得暴雪聘請了一名心懷不滿的微積分教授寫這些算法?還好對與我這不是問題,如果你不明白此代碼。如果您想要編寫,您需要這些功能,你不一定要了解他們。無論如何,在密碼表初始化后,我們可以解密MPQ數據,具有下列功能(不要期望我向您解釋,我不想知道如何運作自己! ) :

void DecryptBlock(void *block, long length, unsigned long key)
{
?unsigned long seed = 0xEEEEEEEE, unsigned long ch;
unsigned long *castBlock = (unsigned long *)block;

// Round to longs
length >>= 2;

while(length-- > 0)
{
??seed += stormBuffer[0x400 + (key & 0xFF)];
ch = *castBlock ^ (key + seed);

key = ((~key << 0x15) + 0x11111111) | (key >> 0x0B);
seed = ch + seed + (seed << 5) + 3;
*castBlock++ = ch;
?}
}

?

第四章? ? STROM

稱為STROM庫函數,或者簡稱為STROM。
它是對于本身的運行系統,擁有龐大的功能庫函數。甚至不需要Microsoft支持。
它本身包含了足夠強大的功能,甚至不需要調用本地API函數。
事實上,STROM包含了所有暴雪編寫的可以重復使用的功能。
但它也擁有一些操作系統特殊的要求 比如那些在GDI,DirectX,QuickDraw等等。
原因很簡單,就是為了減輕從一個系統到另一個系統的接口問題。
畢竟,這就是為什么花成千上萬的工作時間把數以千計的操作系統函數從Windows源調用Mac一樣,為什么在不花時間去做調用,而去改寫功能?

根據STROM的多個版本,大約累計了275個實際有用的功能。
正如您看到的,沒更新STROM時,仍然使用STROM庫函數。同樣,更新后依然是舊的STROM庫函數,
只是做了更新。這是為了保證游戲在不同版本的兼容性。
這些275個使用功能分為約20個功能集(通常在Windows環境下稱為subsystems,在MAC環境下稱為managers。
下面所示部分清單:
Memory Subsystem? -記憶體子系統-例行的共同記憶功能,包括分配新的內存,釋放分配內存,灌裝記憶體,以及更多。STROM沒有自己的內存管理,包括內置的錯誤檢查和其他強大的功能。該子系統功能與在PC上與'mem'前綴相等。

? String Subsystem? - 字符串子系統-功能是使用字符串,如復制,合并,搜索等這些職能是大多數部分,相等于'str'的功能。

? File Subsystem? ? - 文件子系統-功能是存取文件系統。有能力讀出(但不包括寫入)無論是在磁盤上的可靠文件,還是mpq檔案。撇開mpq讀取的功能,其他功能都是高級系統功能運行方式。

? Network Subsystem -網絡子系統-功能是接入遠端的電腦系統,通過使用IPX,調制解調器, TCP/IP和直接電纜。職能是與服務器或在游戲中玩家的通訊。使用高級系統特殊調用。

? Error Subsystem? -錯誤子系統- 功能是捕捉和處理錯誤。這些職能大部分沒有與任何操作系統的等值。

Registry Subsystem? -登錄子系統- 功能是持久性儲存數據到計算機中。使用注冊表在Windows系統,或MACS系統上。

Bitmap Subsystem? ? -位圖系統-功能是位圖文件裝載和顯示。使用系統特殊調用。

目前為止,大約只記錄了40種功能,因為我手邊沒有足夠時間來做,認真來做的話大約需要幾個月。
此外這里只只討論MPQ。



Using the Strom API? 使用STROM API函數

說明:其余的這一章是針對Windows平臺的!

正如我以前說過,STROM功能任何人都可使用它們。不過,暴雪并不希望如此。
我花了最近兩天時間,總結出來:STROM使用一個非常邪惡的方法來對付我們這種想使用它的人。
我花了至少10個小時的努力,試圖解除愚蠢的事,而我現在可以很驕傲的說我成功了,我會全力為您解釋冗長而復雜的細節。
經過我和Mike O'Brien所謂的the Storm Interface Library(接口庫)斗智斗勇。發現這是由一個頭文件和導入庫組成,所以我做了Storm booby-traps這個工具 。要記得DLLs 101 ,是包含被用來當程序編譯連接程序DLL的導入表的導入庫 。這意味著什么,就是所有您需要做的就是storm.lib (在STROM接口庫)與模塊連接在您的程序和#include storm.h頭文件。這真令我瘋狂,我不得不讓您可以輕松使用the Storm Interface Library。
現在,為了以后少點麻煩,讓我們現在就看看STROM的功能。

Opening an MPQ Archive- SFileOpenArchive?
打開MPQ存檔函數—SFileOpenArchive

?
BOOL WINAPI SFileOpenArchive(LPCSTR lpFileName, DWORD dwMPQID, DWORD dwUnknown, HANDLE *lphMPQ);
?ParameterWhat it is?
?lpFileName[in] A pointer to NULL terminated string that holds the path of the MPQ to open. SFileOpenArchive will crash if this is NULL.?
?dwMPQID[in] An ID value that is saved internally in Storm for the MPQ. What this parameter is used for is not clear at this time.?
?dwUnknownUnknown. Should always be NULL.?
?lphMPQ[out] Pointer to a HANDLE variable that, upon successful completion, will hold the HANDLE of the MPQ. SFileOpenArchive will fail if this is NULL.


在此之前,您可以先看一個MPQ文件,您必須先打開它。
為此每您必須使用SFileOpenArchive。它會打開一個存檔,并給你一個HANDLE,您可以稍后調用SFileOpenFileEx和SFileCloseArchive 。
第一個參數,lpFileName,只不過是mpq公開的名稱,絕不能為空。
第二個參數,dwMPQID 是將指派給mpq內部的ID。這并不改變mpq ,目前還不清楚為什么這樣做。
第三個參數,dwUnknown,這是唯一我們認為沒用的,但是不容忽視。
最后一個參數,lphMPQ,是一個HADLE的指針(您必須先聲明)。
如果SFileOpenArchive成功完成,this HANDLE will be that of the MPQ。
如果SFileOpenArchive成功,其返回值將為零。
但是,有幾種情況可能導致SFileOpenArchive失敗。
如果它失敗,將返回一個值是假的。在這種情況下,您可以調用GetLastError獲得更進一步的信息,為什么失敗。如果lpFileName是一個零長度字符串或phMPQ是Null ,GetLastError 將返回ERROR_INVALID_PARAMETER 。如果該文件lpFileName不存在, GetLastError 將返回 ERROR_FILE_NOT_FOUND。在一些非常罕見的情況下, GetLastError可能會返回其他一些潛錯誤值。


Closing an Archive - SFileCloseArchive
關閉存檔函數 - SFileCloseArchive

BOOL WINAPI SFileCloseArchive(HANDLE hMPQ);
?ParameterWhat it is?
?hMPQ[in] The HANDLE of the MPQ to close, which was acquired earlier with SFileOpenArchive. SFileCloseArchive will fail (or worse) if this is NULL or a HANDLE not obtained with SFileOpenArchive.


一旦您開啟一個mpq存檔,你必須記住它關閉時,您就大功告成了!SFileCloseArchive是SFileOpenArchive 的產物。
作為與SFileOpenArchive ,SFileCloseArchive返回一個非零值,那就是成功的
如果返回一個假值,那就失敗了。
然而,在這種情況下,GetLastError不會提供任何有用的信息。
-所以你只能假設原因是hMPQ參數是無效的。

Opening a File Inside an MPQ - SFileOpenFileEx
打開MPQ內的文件函數 - SFileOpenFileEx


?
BOOL WINAPI SFileOpenFileEx(HANDLE hMPQ, LPCSTR lpFileName, DWORD dwSearchScope, HANDLE *lphFile);
?ParameterWhat it is?
?hMPQ[in] The HANDLE of the MPQ previously opened with SFileOpenArchive that contains the file you want to open. SFileOpenFileEx will fail or crash if this is NULL or a HANDLE not obtained with SFileOpenArchive.?
?lpFileName[in] A pointer to a NULL terminated string that holds name of the file within the MPQ to be opened. SFileOpenFileEx will crash if this is NULL.?
?dwSearchScope[in] Specifies where to look for a file when opening a file on the hard drive. Must be NULL when working with MPQs.?
?lphFile[out] A pointer to a HANDLE variable that, upon successful completion, will hold the HANDLE of the requested file. SFileOpenFileEx will fail if this is NULL.


只是因為你用SFileOpenArchive并不意味著您就可以從它立即開始讀取。請記住,MPQ只不過是包含其他文件的多檔案文件。在您可以閱讀任何一個mpq ,您必須打開一個(或多個)的MPQ內部檔案。 SFileOpenFileEx就是讓您使用這一任務的函數;它將打開在一個mpq所請求的文件并對其返回一個HANDLE。
再次, sfileopenfile將返回一個非零值就成功,是假值的就失敗,您可以調用getlasterror獲得的原因。如果lpfilename是一個零長度字符串或lphfile是Null , getlasterror將返回error_invalid_parameter 。如果該文件不存在于mpq , getlasterror會報告error_file_not_found 。在一些罕見的情況下, getlasterror可能會報告error_file_invalid ,并就極為罕見的情況下,它可能會返回其他一些模糊的錯誤值。
重要注意事項:當您調用sfileclosearchive關閉mpq ,同樣會關閉所有MPQ內部打開的文件,您獲取到來自sfileopenfileex的HANDLEs成為無效。如果您調用sfilereadfile , sfilegetfilesize , sfilesetfilepointer ,或sfileclosefile,這些其中一個無效的HANDL,調用將失敗,并且STROM甚至可能崩潰。

Closing a File Inside an MPQ - SFileCloseFile
關閉MPQ內的文件函數 - SFileCloseFile

BOOL WINAPI SFileCloseFile(HANDLE hFile);
?ParameterWhat it is?
?hFile[in] The HANDLE of the file to close, which was acquired earlier with SFileOpenFileEx. SFileCloseFile will fail (or worse) if this is NULL or a HANDLE not obtained with SFileOpenFileEx.

就像SFileCloseArchive is to SFileOpenArchive, SFileCloseFile is the natural compliment of SFileOpenFileEx, 用來關閉一個已經打開的文件.
也想sfileclosearchive , sfileclosefile將返回一個非零值說明成功的,假值的就失敗, getlasterror將不提供幫助。所幸的是,多于sfileclosearchive , sfileclosefile只在hFlie是NULL或一個無效的HANDLE。

Reading from a File in an MPQ - SFileReadFile
讀取MPQ內文件函數 - SFileReadFile

BOOL WINAPI SFileReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);
?ParameterWhat it is?
?hFile[in] The HANDLE of the file to read from, which was acquired earlier with SFileOpenFileEx. SFileReadFile will crash if this is NULL or a HANDLE not obtained with SFileOpenFileEx.?
?lpBuffer[out] A pointer to a buffer in memory where SFileReadFile will place the data read from the file. This buffer must be at least as large as nNumberOfBytesToRead. SFileReadFile will fail if this is NULL.?
?nNumberOfBytesToRead[in] The number of bytes for SFileReadFile to read from the file. SFileReadFile may crash if this is larger than the size of lpBuffer.?
?lpNumberOfBytesRead[out] A pointer to a DWORD that will hold the number of bytes actually read from the file. The number of bytes read will never be more than nNumberOfBytesToRead, but may be less if the number of unread bytes in the file is less than nNumberOfBytesToRead. It is not recommended to let this be NULL.?
?lpOverlapped[in] A pointer to an OVERLAPPED structure. This is used for asynchronous reading of files on a disk, and must be NULL when reading files in MPQs.


當然,您要先打開再讀取文件。
一旦你獲得一個有效的文件HANDLE從sfileopenfileex ,這就是這個函數的功能。 sfilereadfile會讀取指定的字節數,然后推進文件指針。這意味著,如果您有一個文件,您調用sfilereadfile會讀取的一半的檔案,當您再次調用sfilereadfile,你會得到另一半的檔案。如果您需要再次讀取上半部分的文件,你會需要調用sfilesetfilepointer 。
sfilereadfile將提供一個非零的返回值就成功,或虛假的就失敗。不過,你必須記住,只是因為它返回一個非零值,并不等于它實際上讀取了什么,這只是說明沒有錯誤發生。
如果在該文件hfile有不足未讀字節(字節從文件指針到文件結束)比要求數量少, sfilereadfile會讀不到的數目要求字節;
如果檔案hfile的文件指針是在該文件的末尾, sfilereadfile會讀什么,設置lpnumberofbytesread為0 ,返回真。因此,檢查lpnumberofbytesread 是非常重要的。

Getting a File's Size - SFileGetFileSize
獲得文件大小函數- SFileGetFileSize

?
DWORD WINAPI SFileGetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh);
?ParameterWhat it is?
?hFile[in] The HANDLE of the file whose size is to be determined. SFileGetFileSize will crash if this is NULL or a HANDLE not obtained with SFileOpenFileEx.?
?lpdwFileSizeHigh[out] A pointer to a DWORD that, upon successful completion, will hold the high 32-bits (a DWORD) of the file's size. However, it is not possible for a file in an MPQ to be this large (over 4 gigabytes), so this is virtually unused, and may safely be NULL.


這是普遍認為是最壞的編程實踐,因為完全可以進行修改,在開始讀取時讓不明長度的文件不會造成崩潰。sfilegetfilesize在這里只是把戲,因為它在用sfileopenfileex打開文件后才可以擷取文件的大小 。
也有一些重大的故障點在sfilegetfilesize 。首先是含糊不清錯誤。當sfilegetfilesize成功,它將返回文件的大小(可0 ! ) 。但是,當發生錯誤時,它將返回0xFFFFFFFF的,而且同一件事,它會返回為4294967295字節( 4 GB的) 。所幸的是,這不是一個很大的問題,正如您可能從未真正看到一個文件這么大。第二個問題,更危險的是sfilegetfilesize缺乏錯誤檢查。 sfilegetfilesize不檢查是否hfile是有效或是否為零。這意味著,如果你給它一個hfile的無效的HANDLE ,程序崩潰,電腦也會崩潰。因此,底線是這樣的:無比謹慎使用此功能。


Moving the File Pointer - SFileSetFilePointer
移動文件指針函數- SFileSetFilePointer

DWORD WINAPI SFileSetFilePointer(HANDLE hFile, long nDistanceToMove, long *lpDistanceToMoveHigh, DWORD dwMoveMethod);
?ParameterWhat it is?
?hFile[in] The HANDLE of the file whose file pointer is to be moved. SFileSetFilePointer will crash if this is NULL or a HANDLE not obtained with SFileOpenFileEx.?
?nDistanceToMove[in] The low-order 32-bits of the number of bytes for SFileSetFilePointer to move the file pointer, with positive numbers moving the pointer forward and negative numbers moving the pointer backward. This value can also be 0.?
?lpDistanceToMoveHigh[in] A pointer to the high-order 32-bits of the distance for SFileSetFilePointer to move the file pointer. But, because MPQs do not support files this large, this is unused and must be NULL or SFileSetFilePointer will fail.?
?dwMoveMethod[in] Specifies the relative location the file pointer will be moved to. Must be one of these following values in Windows.h:
FILE_BEGINThe file pointer will be set to nDistanceToMove bytes from the beginning of the file. nDistanceToMove must be positive.
FILE_CURRENTThe file pointer will be set to nDistanceToMove bytes from the current location of the file pointer.
FILE_ENDThe file pointer will be set to nDistanceToMove bytes from the end of the file. nDistanceToMove must be negative.


要想從文件任意位置讀取,就要先在該文件提出移動指針,這個功能函數就是sfilesetfilepointer。
文件指針指向了下次讀取時的讀取位置。每次讀取和編寫將會移動文件指針到讀寫區域的最底部。

sfilesetfilepointer實際上并不移動文件指針,只是在文件中對應ndistancetomove。相反, sfilesetfilepointer移動文件指針到一個相對位置,無論是開頭或結尾的文件。
舉例來說,假設您有一個千字節的文件。當文件第一次打開,它的文件指針設置為0 ,則指的是第一個字節。然后,您讀100個字節從該文件。然后,您調用sfilesetfilepointer設置ndistancetomove 500 。如果您調用dwmovemethod 設置為file_begin,文件指針將被設定為500 。如果你曾dwmovemethod作為file_current ,文件指針將是600 ,因為文件指針被轉移到了當您從檔案讀取后100字節。但如果設置dwmovemethod以file_end , sfilesetfilepointer會失敗,因為它將嘗試設置檔案指針一千四百九十九(文件中的最后字節, 999 ,加500 )不存在。如果您多用幾次,會發現這是個非常簡單的函數。

假如失敗, sfilesetfilepointer返回0xFFFFFFFF ,作為sfilegetfilesize也有同樣的陷阱 。但是,當圓滿完成, sfilesetfilepointer會返回檔案hfile新的絕對位置的文件指針 。這意味著您可以簡單地獲取當前的立場文件指針調用sfilesetfilepointer設置ndistancetomove 0 , dwmovemethod設置為file_current 。事實上,這是為什么說不存在sfilegetfileposition功能。

就像sfilegetfilesize , sfilesetfilepointer會肆無忌憚地使用任何你給它hfile的HANDLE,不會進行任何錯誤檢查。這意味著,確保獲得一個有效的文件處理,您必須謹慎,否則,您的電腦又會崩潰。


Choosing a Language - SFileSetLocale
選擇語言- SFileSetLocale

LCID WINAPI SFileSetLocale(LCID lcNewLocale);
?ParameterWhat it is?
?lcNewLocale[in] The language code (LCID) that SFileSetLocale will make the new default. The following codes are ones that I've found in Starcraft MPQs:
0Language Neutral/English
0x407German
0x409English
0x40aSpanish
0x40cFrench
0x410Italian
0x416Portuguese

SFileSetLocale 是功能簡單,背后復雜的代表.它使用了暴雪的multilinguality系統。感謝它,一個單一的函數調用,保證所有文件讀出一個mpq的語言。它的唯一參數是the entire Storm MPQ subsystem。它絕不會失敗,并且它傳回的語言代碼你給它,不過其返回值毫無價值。

multilinguality系統原理是這樣的:每個MPQ檔案有一個語言代碼,并只要他們有不同的語言代碼就可以有多個文件具有相同名稱的。當調用sfileopenfileex時, sfileopenfileex尋找一個文件具有相同的語言代碼儲存,然后調用sfilesetlocale (如果sfilesetlocale從來沒有被調用,語言的代碼為0 ) 。如果一個文件匹配的語言代碼無法找到, sfileopenfileex將打開中立語言(有一個語言代碼0 )版本的文件。

Putting it All Together - DumbExtractor
全部合到一起的工具 - DumbExtractor

?

第五章
THE STARCRAFT CAMPAIGN EDITOR AND THE MPQ API LIBRARY
星際爭霸編輯器和MPQ API LIBRARY

Starcraft Campaign Editor 是什么呢?其實就是一個能讓您自己作出星際爭霸地圖的程序。
并把地圖以SCM格式保存,或者保存為SCX文件。
可是這些個SCM/SCXs文件 和Warcraft 2是一樣的原始文件?
假如您用hex editor 看過這些文件,那么您會得到一個否定的答案。
實際上SCM/SCXs就是MPQ文件!!
那么你也許認為很簡單,那你就錯了,StarEdit使用了一套難以捉摸的MPQ編寫套路。
不過在您仔細閱讀下面的內容,您將會得到答案。


Using StarEdit - The MPQ API Library
使用編輯器- The MPQ API Library

注意:這章是針對WINDOWS平臺的,適用于THE MPQ API LIBRARY 2.0或更高!


在這里我們并不能很快的編譯,因為編輯器有的功能我們并不能直接使用。
不像STROM之類的shared libraries ,StarEdit擁有復雜的操作系統保護機智,而不只是對于文件的保護。就算您是一位很好的程序員,您一樣無法直接修改它。對于這種高難度的熟練的對運行系統的改寫,還沒有人能完成過。 就在這個時候Andrey Lelikov (簡稱Lelik)橫空出世。

Lelik是一位熟悉系統內部工作機制的俄羅斯程序員。他設計了一個能夠使用 StarEdit MPQ 的方法。
他把自己寫的詳細功能放進了MPQ API Library 。

就像STROM,MPQ API Library(又名LMPQAPI),它包含了共享庫(可惜的是,像STROM接口庫,現在在MAC機上還沒有)。LMPQAPI不僅包括了StarEdit的MPQ編寫功能,而且提供接口讀寫STROM。
如果您想同時使用STROM和StarEdit,您不需要同時使用LMPQAPI和STROM接口庫。
一個LMPQAPI足已。

好吧。我提醒您一件事,您想在使用LMPQAPI的時候區分是用STROM還是StarEdit么?
STROM功能有就像使用STROM接口庫時一樣有一個前綴'SFile',在使用StarEdit時,前綴是'Mpq'。
這是很重要的,因為這說明了STROM和StarEdit的功能不兼容。
這意味著您無法用SFileOpenArchive獲得的MPQ HANDLE去在StarEdit('Mpq'前綴的函數)里調用,反之亦然。 如果您還是調用的話,調用會失敗,程序會崩潰。記住這點。

?Sé Habla Espa?ol?
讓人講西班牙語?

因為75%以上的星際爭霸或暗黑的玩家是以英語為母語,所以大多數MPQ開發測試都基于這些游戲的英文版。對于使用英文版游戲的玩家,MPQ會運行良好。但事實上,98%的標準MPQ文件使用的是language-neutral (比如圖象文件等等)。甚至有人用全非英語的MPQ玩游戲也沒有問題。
不過,很明顯這里是有問題的,只是還要等些時間才有人能發現吧。


做為上面兩章的解釋,MPQ格式具有強大的多國語言功能。
但是,您完全沒必要做多語言的SCM/SCXs。
這就是說,您完全不必要讓StarEdit支持多語言功能,就連暴雪的程序員都懶的做。
但是我們都有興趣研究MPQ,除非沒必要,其中的許多語言功能還是有用的。

在技術方面說,所有的StarEdit功能都只運行有語言代碼為0或language-neutral代碼的文件。
也就是說,MpqAddFileToArchive和MpqAddWAVToArchive只增加language- neutral files, MpqDeleteFile只刪除language-neutral files, MpqRenameFile 只會重命名language-neutral files.

這種設計決定了,執行結果并不明顯。在前一章也提到過,假如在打開有相同名稱不同語言的文件時,STROM使用了SFileSetLocale做為語言過濾器,用來決定到底打開哪個文件。
假設在StarEdit使用一個MPQ文件代替patch_rt.mpq ,而且在那個MPQ文件里有英語/language-neutral解析度文件rez\gluAll.tbl (這文件內有多個語言版本),但是不能有葡萄牙語版本(選定任意語言)。
當您運行這個游戲的葡萄牙語版時,程序會查詢在您MPQ文件中的該語言版。結果就是失敗,而且默認又為英語版本的,對不對?
好吧,不是這樣的。STROM允許您同時打開幾個MPQ文件,并且STROM會搜索已經加載的MPQ,然后自動加載最新的MPQ到文件里。但是在這個過程中,STROM在系統為language-neutral以前,會檢查已經打開的所有特殊語言的MPQ。
這意味著,前面STROM從broodat.mpq 載入葡萄牙語版本,而不是您自己的language-neutral 版本。
很不幸,現在還沒有解決的辦法,希望新版本的LMPQAPI能被解決吧。



Initializing the MPQ API Library - MpqInitialize
初始化MPQ API Library函數- MpqInitialize

BOOL WINAPI MpqInitialize();

不像STROM,LMPQAPI在控制StarEdit時有巨大的復雜的任務要做。
因此,無法在啟動LMPQAPI時做完一切。你必須告訴LMPQAPI什么時候運行。所幸,這很簡單。
你要做的就是在您啟動程序前調用MpqInitialize,LMPQAPI會自動做完剩下的。
請確定在調用LMPQAPI其他函數前,您調用了MpqInitialize。此外,即使您對STROM接口庫什么都不做,也必須在任何STROM函數調用前被調用。
一次調用會同時初始化STROM和STAREIDT。

1.Starcraft/Brood War 1.07 必須已經安裝,Storm.dll和StarEdit.exe必須在程序目錄中
2.StarEdit不能和LMPQAPI一起運行.

為了調用MpqInitialize初始化上面的兩個要求必須滿足。盡管還有其他原因,上面兩個卻是最常見的。
不管什么原因,MpqInitialize調用失敗后,都會返回FLASH,您可以檢索GetLastError設置一個錯誤值。
如果LMPQAPI無法在游戲目錄或在您程序的目錄里無法找到StarEdit.exe ,那么GetLastError會返回MPQ_ERROR_NO_STAREDIT;
如果StarEdit.exe的版本不匹配,GetLastError會返回MPQ_ERROR_BAD_STAREDIT;
如果StarEdit已經運行GetLastError會返回MPQ_ERROR_STAREDIT_RUNNING;
如果是因為其他原因GetLastError通常會返回MPQ_ERROR_INIT_FAILED。

但是,無論為什么GetLastError調用失敗,返回了什么,您要做的就是盡快的關閉程序。
不要調用任何LMPQAPI功能(STROM或者StarEdit的功能),當然也不要在調用MpqInitialize了。


Opening an MPQ for Editing - MpqOpenArchiveForUpdate
打開MPQ- MpqOpenArchiveForUpdate

HANDLE WINAPI MpqOpenArchiveForUpdate(LPCSTR lpFileName, DWORD dwCreationDisposition, DWORD dwHashTableSize);
?ParameterWhat it is?
?lpFileName[in] A pointer to NULL-terminated string that holds the path of the MPQ to open. MpqOpenArchiveForUpdate will fail if this is NULL.?
?dwCreationDisposition[in] Specifies what MpqOpenArchiveForUpdate should do with the archive if it does/doesn't exist. Must be one of the following values defined in lmpqapi.h:
MOAU_CREATE_NEWMpqOpenArchiveForUpdate will create a brand new archive. If lpFileName already exists, MpqOpenArchiveForUpdate will fail.
MOAU_CREATE_ALWAYSMpqOpenArchiveForUpdate will create a new archive if lpFileName doesn't exist. If lpFileName does exist, it will be deleted and overwritten.
MOAU_OPEN_EXISTINGMpqOpenArchiveForUpdate will open the archive lpFileName. MpqOpenArchiveForUpdate will fail if lpFileName does not exist.
MOAU_OPEN_ALWAYSIf lpFileName exists, MpqOpenArchiveForUpdate will open it. If it doesn't, MpqOpenArchiveForUpdate will create a new archive.
MOAU_MAINTAIN_LISTFILEThis flag specifies that as MpqOpenArchiveForUpdate uses the archive lpFileName, it should update the internal listfile, if one exists. This is a flag, and must be ORed (with the | operator) with one of the other options for dwCreationDisposition
?
?dwHashTableSize[in] Whenever MpqOpenArchiveForUpdate creates a new archive (see the dwCreationDisposition for details on when this occurs), dwHashTableSize specifies how large the hash table for the new archive will be, with a minimum size of 16, and a maximum size of 262,144 (if dwHashTableSize is not within these values, MpqOpenArchiveForUpdate will change it). This parameter does not affect archives that already exist.


與STROM一樣,您在使用前必須先打開它.
MpqOpenArchiveForUpdate 打開(或創建)一個存檔,這是為了您使用其他StarEdit功能的,并返回存檔的HANDLE.

但是不像SFileOpenArchive,MpqOpenArchiveForUpdate需要您在時間上做出選擇.
第一選擇是dwcreationdisposition參數。它告訴mpqopenarchiveforupdate是否應該創建一個新的存檔還是打開一個現有的,或兩者之間。其他的決定性參數是dwhashtablesize 。 dwhashtablesize告訴mpqopenarchiveforupdate創建什么大小存檔的哈希表(這也是該文件限制),在
mpqopenarchiveforupdate事件中必須創建要一個新的存檔。
做為一個存檔的哈希表大小差不多是1000,除非你知道存檔一定會超過1000個文件。
但同時請記住,每個哈希表項和存檔文件將新增16個字節,(見第2章的哈希表,或第5章關于mpq哈希表的更多信息) 。


在上面的進程中MpqOpenArchiveForUpdate可能調用失敗.
MpqOpenArchiveForUpdate將返回INVALID_HANDLE_VALUE或者NULL.
我們根據調用GetLastError通常可以獲取有用的信息,但不是絕對.
如果lpfilename參數為空, getlasterror將返回error_invalid_parameter 。
如果dwcreationdisposition返回moau_open_existing或者lpfilename不存在, getlasterror將返回error_file_not_found 。反過來說,如果dwcreationdisposition返回moau_create_new和檔案lpfilename已經存在, getlasterror將返回error_already_exists 。
最后,如果mpq存檔存在,但是是無效或損壞的, getlasterror將返回mpq_error_mpq_invalid 。
在一些罕見的情況下, getlasterror將返回其他一些錯誤代碼。

Closing a Modified Archive - MpqCloseUpdatedArchive
關閉修改過的存檔- MpqCloseUpdatedArchive

?
BOOL WINAPI MpqCloseUpdatedArchive(HANDLE hMPQ, DWORD dwUnknown);
?ParameterWhat it is?
?hMPQ[in] The HANDLE of the MPQ to close, which was acquired earlier with MpqOpenArchiveForUpdate. MpqCloseUpdatedArchive will fail (or worse) if this is NULL or a HANDLE not obtained with MpqOpenArchiveForUpdate.?
?dwUnknownUnknown. Should always be NULL.


這里和在STROM中一樣,您在哪用SFileOpenArchive打開MPQ,那么就在修改它的地方用SFileCloseArchive 關閉.
那么MPQ存檔打開時用MpqOpenArchiveForUpdate,關閉時用MpqCloseUpdatedArchive.
然而在這時候有一點區別.STROM不會修改實際MPQ,所以關閉MPQ HANDLE時沒有什么特別需要做的.
但是StarEdit 確實修改了MPQ.而且MPQ的散列值和文件表是在沒有調用MpqCloseUpdatedArchive關閉MPQ HANDLE前不能寫在MPQ分區的.
這意味著要快速關閉StarEdit MPQ HANDLEs,要不然您有可能再次程序崩潰,而無法保存修改的MPQ.


Adding a File - MpqAddFileToArchive
添加文件函數- MpqAddFileToArchive

?
BOOL WINAPI MpqAddFileToArchive(HANDLE hMPQ, LPCSTR lpSourceFileName, LPCSTR lpDestFileName, DWORD dwFlags);
?ParameterWhat it is?
?hMPQ[in] The HANDLE of the MPQ to add the file to, which was acquired earlier with MpqOpenArchiveForUpdate. MpqAddFileToArchive will fail if this is NULL or a HANDLE not obtained with MpqOpenArchiveForUpdate.?
?lpSourceFileName[in] A pointer to a NULL-terminated string containing the path of the file on disk to add. MpqAddFileToArchive will crash if this is NULL.?
?lpDestFileName[in] A pointer to a NULL-terminated string containing the name that the file will be given in the MPQ. MpqAddFileToArchive will crash if this is NULL.?
?dwFlags[in] Flags specifying properties that MpqAddFileToArchive will apply to the file inside the MPQ. Must be a combination of the following flags specified in lmpqapi.h:
MAFA_ENCRYPTThe file will be encrypted.
MAFA_COMPRESSThe file will be compressed.
MAFA_REPLACE_EXISTINGIf the file lpDestFileName already exists in the MPQ, it will be replaced with the new file to be added


往往大約 95%的時候會在使用 StarEdit MPQ功能時候添加文件. 對于這個任務, 您會用到的函數有MpqAddFileToArchive和它的姊妹功能MpqAddWAVToArchive (稍后討論).
MpqAddFileToArchive在MPQ hMPQ分區添加文件lpSourceFileName 使用名稱lpDestFileName, 并在這個過程中壓縮 或/和 加密它.

由于一些設計上的疏漏,在您并沒有完全明白前,MpqAddFileToArchive會是個大麻煩.
1.MpqAddFileToArchive并不檢查lpSourceFileName和lpDestFileName是否為空.
就是說假如任一參數為空,您會再次看到程序崩潰.
2.覆蓋MPQ中已有文件時MpqAddFileToArchive的運行機制.
當您調用MpqAddFileToArchive去添加的文件已經存在MPQ中(在這種情況下,你就不得不指定dwflags為mafa_replace_existing ),MpqAddFileToArchive會在不確定文件lpSourceFileName是否存在前就不分青紅皂白地刪除存在的文件lpDestFileName.
解決的辦法很簡單:確保lpsourcefilename和lpdestfilename是有效的(非空) ,以及確保lpsourcefilename存在之前,調用mpqaddfiletoarchive 。

現在您應該可以饒過所有的障礙,用mpqaddfiletoarchive成功添加文件了吧.
這時mpqaddfiletoarchive將允許返回TURE.
如果有錯誤,它將返回FALSE 。在這種情況下,少量的信息可調用getlasterror 。
如果該文件lpsourcefilename不存在, getlasterror將返回error_file_not_found (盡管它的有點晚) 如果哈希表是FULL(見第2章) , getlasterror將返回mpq_error_hash_table_full 。
如果該文件lpdestfilename已經存在 和在dwflags中未指定mafa_replace_existing , getlasterror將返回mpq_error_already_exists 。
但是,在很多情況下getlasterror將返回其他一些錯誤代碼或沒有代碼。



Adding a File with WAV Compression - MpqAddWAVToArchive
添加WAV壓縮文件函數- MpqAddWAVToArchive

?
BOOL WINAPI MpqAddWAVToArchive(HANDLE hMPQ, LPCSTR lpSourceFileName, LPCSTR lpDestFileName, DWORD dwFlags, DWORD dwQuality);
?ParameterWhat it is?
?hMPQ[in] The HANDLE of the MPQ to add the file to, which was acquired earlier with MpqOpenArchiveForUpdate. MpqAddWAVToArchive will fail if this is NULL or a HANDLE not obtained with MpqOpenArchiveForUpdate.?
?lpSourceFileName[in] A pointer to a NULL-terminated string containing the path of the file on disk to add. MpqAddWAVToArchive will crash if this is NULL.?
?lpDestFileName[in] A pointer to a NULL-terminated string containing the name that the file will be given in the MPQ. MpqAddWAVToArchive will crash if this is NULL.?
?dwFlags[in] Flags specifying properties that MpqAddWAVToArchive will apply to the file inside the MPQ. Must be a combination of the following flags specified in lmpqapi.h:
MAFA_ENCRYPTThe file will be encrypted.
MAFA_REPLACE_EXISTINGIf the file lpDestFileName already exists in the MPQ, it will be replaced with the new file to be added
?
?dwQuality[in] Specifies the quality the WAV file will be compressed to. Must be one of the following values defined in lmpqapi.h:
MAWA_QUALITY_HIGHBest sound quality, least compression. WAV lpDestFileName in MPQ will occupy the most space after compression (but still less space than if you had added the file with MpqAddFileToArchive instead)
MAWA_QUALITY_MEDIUMMedium sound quality, medium compression. Balance between quality and compression.
MAWA_QUALITY_LOWHighest compression, worst sound quality. WAV lpDestFileName in MPQ will occupy the least space after compression.


毫無疑問,最流行的新功能的lmpqapi 2.0版(就是我做的) ,便有功能 mpqaddwavtoarchive 。
雖然mpqaddfiletoarchive能壓縮約80 %的文件(非wav文件) ,它對WAV文件的壓縮只有平均約5 % 。這是由于wav數據性質和它的不可壓縮性。
在這里,對于wav壓縮的壓縮是必要的,而 mpqaddwavtoarchive就實現了這個功能。
盡管工作原理不同,MpqAddWAVToArchive的界面與 MpqAddFileToArchive卻是幾乎相同的。
唯一的區別就是多了一個新函數dwQuality。
參數設置后WAV將會被壓縮。
不過不像mpqaddfiletoarchive的標準壓縮, mpqaddwavtoarchive的wav壓縮,實際上降低了wav的質量 。質量降低多少依賴于dwquality 。
如果您有一個音樂WAV而又想保證質量,那您就使用mawa_quality_high ,因為它最好的保留wav的質量;而同一個聲音wav , mawa_quality_low通常是不行的,因為聲調比較容易壓縮失真; mawa_quality_medium往往是最有效的。


Deleting a File - MpqDeleteFile
刪除文件函數 - MpqDeleteFile


?
BOOL WINAPI MpqDeleteFile(HANDLE hMPQ, LPCSTR lpFileName);
?ParameterWhat it is?
?hMPQ[in] The HANDLE of the MPQ to close, which was acquired earlier with MpqOpenArchiveForUpdate. MpqDelete will fail (or worse) if this is NULL or a HANDLE not obtained with MpqOpenArchiveForUpdate.?
?lpFileName[in] A pointer to a NULL-terminated name of the file in the MPQ to delete. MpqDeleteFile will crash if this is NULL.


少數情況下,您可能需要刪除MPQ中的某個文件,那么您就需要用到MpqDeleteFile。
MpqDeleteFile能從已經打開的存檔hMPQ中刪除文件lpFileName。
不過這不是看上去那么簡單的。
mpqdeletefile為lpfilename刪除哈希和文件表項 ,使其無法進入。
但是除非文件在MPQ的physical end ,否則MpqDeleteFile無法清除內存。
這就是說,通常情況下MPQ文件是不會減小大小的。
不過空間可以添加新文件循環再利用。稍后為您介紹MpqAddFileToArchive 和MpqAddWAVToArchive.

就像STROM和STAREDIT幾乎所有的功能一樣,調用MpqDeleteFile成功就返回TURE,失敗就返回FALSE。
失敗的話,您可以調用GetLastError去獲得一些關于失敗原因的信息(假如有的話)。
在這種情況下GetLastError是驚人的有效。
因為幾乎只有一種會造成MpqDeleteFile失敗的原因(除了hMPQ無效):
該文件lpFileName不存在于MPQ,GetLastError將返回MPQ_ERROR_FILE_NOT_FOUND。


Renaming a File - MpqRenameFile
重命名文件函數- MpqRenameFile


BOOL WINAPI MpqRenameFile(HANDLE hMPQ, LPCSTR lpOldFileName, LPCSTR lpNewFileName);
?ParameterWhat it is?
?hMPQ[in] The HANDLE of the MPQ that holds the file to be renamed, and was acquired earlier with MpqOpenArchiveForUpdate. MpqRenameFile will fail if this is NULL or a HANDLE not obtained with MpqOpenArchiveForUpdate.?
?lpOldFileName[in] A pointer to a NULL-terminated string containing the name of the file in the MPQ to be renamed. MpqRenameFile will fail if this is NULL.?
?lpNewFileName[in] A pointer to a NULL-terminated string containing the name that the file lpOldFileName will be changed to. MpqRenameFile will fail if this is NULL


在我慢慢研究MPQ后發現StarEdit缺少一對非常有用的功能。
而且那個時候我對與STROM和StarEdit的運做有了相當的了解,所以我決定寫個自己的功能。
MpqRenameFile 非常的簡單;它重新把hMPQ中的文件名 由lpOldFileName變為lpNewFileName.

mpqrenamefile返回給您的依舊是簡單的信息。
mpqrenamefile返回true就成功,FLASH失敗,并讓您調用getlasterror獲得失敗的原因 。
如果hMPQ HANDLE 是NULL或無效,lpoldfilename或lpnewfilename是Null , getlasterror將返回error_invalid_parameter 。
如果該文件lpoldfilename不存在于MPQ hMPQ中, getlasterror將返回mpq_error_file_not_found 。
如果該文件lpnewfilename已經存在mpq中 , getlasterror將返回mpq_error_already_exists 。



Compacting an MPQ - MpqCompactArchive
壓縮MPQ函數- MpqCompactArchive

?
BOOL WINAPI MpqCompactArchive(HANDLE hMPQ, BOOL bFailOnBadFile);
?ParameterWhat it is?
?hMPQ[in] The HANDLE of the MPQ to compact, which was acquired earlier with MpqOpenArchiveForUpdate. MpqCompactArchive will fail if this is NULL or a HANDLE not obtained with MpqOpenArchiveForUpdate.?
?bFailOnBadFile[in] Explained below. Should usually be FALSE



記得我剛才說過調用mpqdeletefile實際上并不刪除文件;它只是使它們無法使用。那么, mpqaddfiletoarchive和mpqaddwavtoarchive也是一樣。
當您添加一個已經存在的文件或添加比舊文件大的新文件,新的文件將附加,和原來被占用的空間不會被釋放。正因為如此,每當您建立一個大的復雜的包含許多覆蓋/刪除的檔案的mpq,將會有很大的體積,并且沒有辦法從零重建MPQ。

解決這個問題的方法是調用mpqcompactarchive :這是我設計的第三個,也是最后一個,最困難的mpq功能。 mpqcompactarchive的功能是把數據壓縮到一個緩沖文件,然后再傳回。這就是說在壓縮的時候,在磁盤上的緩沖文件必須有足夠的可用空間(這取決于MPQ的大小)。

雖然mpqcompactarchive可以讓幾乎所有的文件變得緊湊,但是還是有不能成功的類型:有mafa_encrypt和mafa_modcryptkey屬性,但缺乏mafa_compress和mafa_compress2屬性的文件(如需詳細資訊,請參閱第5章) 。當mpqcompactarchve調用這種文件,getlasterror會返回錯誤代碼mpq_error_compact_error ,然后刪除違規檔案,并繼續壓縮過程。

mpqcompactarchive返回TURE就成功,FLASH就失敗。您可以調用getlasterror獲得錯誤信息 。
如果hmpq是Null或無效的staredit HANDLE, getlasterror將返回error_invalid_parameter 。
如果沒有足夠的可用記憶體為mpqcompactarchive撥出2.5 MB的讀取緩沖區, getlasterror將返回error_outofmemory 。
如果沒有足夠的可用磁盤空間mpqcompactarchive分配緩沖文件, GetLastError返回error_disk_full 。在某些特殊的情況下, getlasterror可能會返回其他一些奇怪的錯誤代碼。


Getting Information About a File - SFileGetFileInfo
獲取文件有關信息函數 - SFileGetFileInfo


DWORD WINAPI SFileGetFileInfo(HANDLE hMPQorFile, DWORD dwInfoType);
?ParameterWhat it is?
?hMPQorFile[in] The HANDLE of the either the MPQ or file inside an MPQ to obtain info about, which was acquired earlier with either SFileOpenArchive or SFileOpenFileEx. SFileGetFileInfo will fail (or worse) if this is NULL or a HANDLE not obtained with SFileOpenArchive or SFileOpenFileEx.?
?dwInfoType[in] The type of info to obtain about the file or MPQ. Must be one of the following values defined in lmpqapi.h:
SFILE_INFO_HASH_TABLE_SIZESFileGetFileInfo will return the hash table size of hMPQorFile (see chapters 2 and 5 for more info). hMPQorFile must be a HANDLE of an MPQ.
SFILE_INFO_NUM_FILESSFileGetFileInfo will return the number of files inside hMPQorFile. hMPQorFile must be a HANDLE of an MPQ.
SFILE_INFO_SIZESFileGetFileInfo will return the size of the MPQ hMPQorFile or the uncompressed size of the file hMPQorFile. This is functionally equivalent to the SFileGetFileSize function. hMPQorFile can be either a HANDLE of an MPQ or a HANDLE of a file inside.
SFILE_INFO_COMPRESSED_SIZESFileGetFileInfo will return the compressed size (or uncompressed size if the file isn't compressed) of the file hMPQorFile in an MPQ. hMPQorFile must be a HANDLE of a file inside an MPQ.
SFILE_INFO_FLAGSSFileGetFileInfo will return the flags (see chapter 5 for the meaning of specific flags) of the file hMPQorFile in an MPQ. hMPQorFile must be a HANDLE of a file inside an MPQ.
SFILE_INFO_POSITIONSFileGetFileInfo will return the absolute position of the file pointer for the file hMPQorFile in an MPQ. hMPQorFile must be a HANDLE of a file inside an MPQ.



SFileGetFileInfo 是 LMPQAPI中最古怪的功能函數.
不僅是唯一可以通過LMPQAPI而不能通過STROM接口庫的STROM功能。
它唯一的函數就是能夠接受MPQ或者文件HANDLE,但在大多數情況下它根本不存在于STROM里。
為了補救這個,我自己寫了了這個SFileGetFileInfo。

sfilegetfileinfo是專門設計來提供有用的mpq和其內檔案的信息;包括mpq中壓縮文件的大小,文件指針的位置。它使用簡單,但相當有效。它使用已經打開了的mpq或文件的HANDLE,以獲取有關hmpqorfile的信息 ,以及在dwinfotype中需要的信息類型代碼。

如果sfilegetfileinfo成功,返回值就是有關文件或MPQ的資料 。
但是,如果失敗的話,它會返回0xFFFFFFFF,并設置一個錯誤代碼,您可以調用getlasterror查看 。
如果因為hmpqorfile HANDLE是無效的, getlasterror將返回error_invalid_parameter 。
如果因為dwinfotype是一個無效的信息代碼,getlasterror將返回error_unknown_property 。 sfilegetfileinfo只在一種情況下會調用失敗(除了嚴重的內部lmpqapi錯誤)。
因為一個mpq HANDLE和dwinfotype指定的信息只能得到一個文件HANDLE,或反之亦然,在這種情況下, getlasterror將返回error_unknown_property。

總結

以上是生活随笔為你收集整理的inside MPQ的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

亚洲欧美国产精品专区久久 | 国产精品鲁鲁鲁 | 国产成人精品一区二区在线小狼 | 97久久国产亚洲精品超碰热 | 欧美性黑人极品hd | 亚洲一区二区三区无码久久 | 国产精品久久久午夜夜伦鲁鲁 | 国产艳妇av在线观看果冻传媒 | 久久精品无码一区二区三区 | 性欧美疯狂xxxxbbbb | 亚洲狠狠色丁香婷婷综合 | 亚洲 激情 小说 另类 欧美 | 亚洲色偷偷男人的天堂 | 亚洲综合久久一区二区 | 丰满岳乱妇在线观看中字无码 | 双乳奶水饱满少妇呻吟 | 无码一区二区三区在线 | 给我免费的视频在线观看 | 中文字幕色婷婷在线视频 | 天天拍夜夜添久久精品大 | 乱人伦中文视频在线观看 | 久久99精品国产麻豆 | 国产免费观看黄av片 | 久精品国产欧美亚洲色aⅴ大片 | 国产精品无码mv在线观看 | 欧洲极品少妇 | 日韩精品无码免费一区二区三区 | 亚洲乱码中文字幕在线 | 国产成人精品久久亚洲高清不卡 | 亚洲精品国偷拍自产在线观看蜜桃 | 在线欧美精品一区二区三区 | 国产精品视频免费播放 | 国产小呦泬泬99精品 | 无码国产乱人伦偷精品视频 | 国产黄在线观看免费观看不卡 | 精品人妻av区 | 内射巨臀欧美在线视频 | 亚洲精品一区二区三区在线观看 | 老太婆性杂交欧美肥老太 | 内射老妇bbwx0c0ck | 国产高清不卡无码视频 | 国产成人无码av片在线观看不卡 | 久精品国产欧美亚洲色aⅴ大片 | 免费人成在线视频无码 | 大乳丰满人妻中文字幕日本 | a在线亚洲男人的天堂 | 成人综合网亚洲伊人 | 国产亚洲美女精品久久久2020 | 久久99国产综合精品 | 亚洲 日韩 欧美 成人 在线观看 | 久久久久久亚洲精品a片成人 | 97资源共享在线视频 | 日本成熟视频免费视频 | 18无码粉嫩小泬无套在线观看 | av香港经典三级级 在线 | 超碰97人人射妻 | 女人被男人躁得好爽免费视频 | 狠狠综合久久久久综合网 | 中文字幕乱码亚洲无线三区 | 久久99精品国产麻豆 | 精品一二三区久久aaa片 | 色婷婷av一区二区三区之红樱桃 | 荡女精品导航 | www成人国产高清内射 | 日本丰满护士爆乳xxxx | 成人一区二区免费视频 | 国产综合色产在线精品 | 久久99久久99精品中文字幕 | 97精品国产97久久久久久免费 | 国内揄拍国内精品人妻 | 人妻夜夜爽天天爽三区 | 国产午夜福利亚洲第一 | 亚洲 另类 在线 欧美 制服 | 东京热一精品无码av | 亚洲色欲久久久综合网东京热 | 日本精品久久久久中文字幕 | 又大又硬又黄的免费视频 | 夜夜躁日日躁狠狠久久av | 蜜臀av无码人妻精品 | 色五月五月丁香亚洲综合网 | 欧美亚洲日韩国产人成在线播放 | 欧美激情一区二区三区成人 | 天堂无码人妻精品一区二区三区 | 毛片内射-百度 | 亚洲天堂2017无码中文 | 国产精品亚洲一区二区三区喷水 | 99re在线播放 | 国产熟妇高潮叫床视频播放 | 高潮毛片无遮挡高清免费视频 | 亚洲中文字幕无码一久久区 | 成人精品视频一区二区三区尤物 | 国产午夜无码视频在线观看 | 色综合久久88色综合天天 | 国产无遮挡又黄又爽免费视频 | 宝宝好涨水快流出来免费视频 | 国产精品久久久久7777 | 色婷婷综合激情综在线播放 | 国产激情无码一区二区app | 在线精品国产一区二区三区 | 在线欧美精品一区二区三区 | 欧美猛少妇色xxxxx | 日日干夜夜干 | 国产精品毛片一区二区 | 国产黄在线观看免费观看不卡 | 国产极品美女高潮无套在线观看 | 无码av免费一区二区三区试看 | 亚洲国产精品久久久久久 | 精品成在人线av无码免费看 | 亚洲天堂2017无码中文 | 精品午夜福利在线观看 | 国产精品办公室沙发 | 亚洲中文字幕成人无码 | 中文字幕日韩精品一区二区三区 | 中文字幕乱码人妻无码久久 | 国产va免费精品观看 | 亚洲色www成人永久网址 | 色综合久久88色综合天天 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 久久www免费人成人片 | 97久久精品无码一区二区 | 国产性生大片免费观看性 | 久久久久亚洲精品中文字幕 | 乱中年女人伦av三区 | 久久国语露脸国产精品电影 | 国精品人妻无码一区二区三区蜜柚 | 亚洲精品久久久久avwww潮水 | 无遮挡国产高潮视频免费观看 | 熟女体下毛毛黑森林 | 狠狠色色综合网站 | 曰韩无码二三区中文字幕 | 在线天堂新版最新版在线8 | 国内精品一区二区三区不卡 | 日韩精品a片一区二区三区妖精 | 欧美黑人乱大交 | 精品久久久久香蕉网 | 国产亚洲精品久久久久久久久动漫 | 少妇太爽了在线观看 | 色偷偷人人澡人人爽人人模 | 免费人成在线观看网站 | 欧美肥老太牲交大战 | 久久国产精品精品国产色婷婷 | 亚洲国产精品久久久久久 | 国产熟妇高潮叫床视频播放 | 帮老师解开蕾丝奶罩吸乳网站 | 久久无码人妻影院 | 奇米影视888欧美在线观看 | 丰腴饱满的极品熟妇 | 亚洲综合无码一区二区三区 | 久久精品国产日本波多野结衣 | 国产热a欧美热a在线视频 | 亚洲精品鲁一鲁一区二区三区 | 日产精品高潮呻吟av久久 | 成熟女人特级毛片www免费 | 在线а√天堂中文官网 | 国产精品鲁鲁鲁 | 国产三级精品三级男人的天堂 | 国产香蕉97碰碰久久人人 | 国内揄拍国内精品人妻 | 国产亚洲精品久久久久久国模美 | 国产精品福利视频导航 | 亚洲精品中文字幕久久久久 | 荫蒂被男人添的好舒服爽免费视频 | 国产无遮挡又黄又爽免费视频 | 色婷婷av一区二区三区之红樱桃 | 久久亚洲中文字幕精品一区 | 无人区乱码一区二区三区 | 国产小呦泬泬99精品 | 国产精品久久精品三级 | 人妻少妇精品视频专区 | 日韩av无码中文无码电影 | 丁香啪啪综合成人亚洲 | 少妇被黑人到高潮喷出白浆 | 小sao货水好多真紧h无码视频 | 国产无遮挡又黄又爽免费视频 | v一区无码内射国产 | 日韩精品一区二区av在线 | 国产精品99爱免费视频 | 成人试看120秒体验区 | 免费视频欧美无人区码 | 国产精品久久国产三级国 | 亚洲色欲久久久综合网东京热 | 乌克兰少妇性做爰 | 人人妻人人澡人人爽欧美一区九九 | 偷窥日本少妇撒尿chinese | 人妻夜夜爽天天爽三区 | 蜜桃av抽搐高潮一区二区 | 亚洲精品国偷拍自产在线麻豆 | 亚洲色在线无码国产精品不卡 | 日本又色又爽又黄的a片18禁 | 久久亚洲中文字幕无码 | 国产肉丝袜在线观看 | 久久亚洲精品成人无码 | 日本一区二区三区免费播放 | 99在线 | 亚洲 | 成 人 免费观看网站 | 亚欧洲精品在线视频免费观看 | 中文字幕无码av波多野吉衣 | 狠狠噜狠狠狠狠丁香五月 | 国产精品久久久一区二区三区 | 亚洲乱码日产精品bd | 伦伦影院午夜理论片 | 国产女主播喷水视频在线观看 | 性欧美videos高清精品 | 成人无码视频在线观看网站 | 少妇邻居内射在线 | 国产精品对白交换视频 | 无码人妻丰满熟妇区五十路百度 | 国产精品久免费的黄网站 | 九九在线中文字幕无码 | 国产97色在线 | 免 | 久久视频在线观看精品 | 成人性做爰aaa片免费看不忠 | 亚洲人成网站在线播放942 | 久久熟妇人妻午夜寂寞影院 | 亚洲综合精品香蕉久久网 | 成人一区二区免费视频 | 国产乱人无码伦av在线a | 超碰97人人射妻 | 亚洲综合伊人久久大杳蕉 | 76少妇精品导航 | 又色又爽又黄的美女裸体网站 | 国产在线精品一区二区高清不卡 | 亚洲色在线无码国产精品不卡 | 久久无码专区国产精品s | 又粗又大又硬毛片免费看 | 亚洲国产精品毛片av不卡在线 | 内射巨臀欧美在线视频 | 欧美色就是色 | 成人精品视频一区二区 | 亚洲精品中文字幕久久久久 | 青青草原综合久久大伊人精品 | 亚洲色无码一区二区三区 | 黑人粗大猛烈进出高潮视频 | 久久久久亚洲精品男人的天堂 | 西西人体www44rt大胆高清 | 国产精品久久久久久亚洲影视内衣 | 香港三级日本三级妇三级 | 久久www免费人成人片 | 欧美熟妇另类久久久久久不卡 | 在线亚洲高清揄拍自拍一品区 | 日本一区二区三区免费播放 | 国产午夜无码精品免费看 | 亚洲成色www久久网站 | 亚洲啪av永久无码精品放毛片 | 成人综合网亚洲伊人 | 国产精品久久久久久亚洲影视内衣 | 亚洲精品国产a久久久久久 | 丝袜足控一区二区三区 | 免费无码的av片在线观看 | 国产精品二区一区二区aⅴ污介绍 | 全黄性性激高免费视频 | 成人一区二区免费视频 | 又粗又大又硬又长又爽 | 无码人妻少妇伦在线电影 | 夜夜躁日日躁狠狠久久av | 国内精品久久毛片一区二区 | 国产卡一卡二卡三 | 正在播放东北夫妻内射 | 成年女人永久免费看片 | 国产超级va在线观看视频 | 日本熟妇乱子伦xxxx | 中文字幕乱码人妻二区三区 | 一个人免费观看的www视频 | 欧美三级不卡在线观看 | 色妞www精品免费视频 | 国产疯狂伦交大片 | 天下第一社区视频www日本 | 色一情一乱一伦一视频免费看 | 亚洲人成网站色7799 | 国产亚洲精品久久久久久久久动漫 | 色欲久久久天天天综合网精品 | 国产69精品久久久久app下载 | 俺去俺来也在线www色官网 | 久久久精品欧美一区二区免费 | 色爱情人网站 | 国产成人精品久久亚洲高清不卡 | 无码毛片视频一区二区本码 | 5858s亚洲色大成网站www | 无码吃奶揉捏奶头高潮视频 | 无码人中文字幕 | 亚洲熟女一区二区三区 | 国产特级毛片aaaaaaa高清 | 久久久久久av无码免费看大片 | 高潮喷水的毛片 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 荫蒂添的好舒服视频囗交 | 无码精品人妻一区二区三区av | 两性色午夜视频免费播放 | 国产精品高潮呻吟av久久4虎 | 男女性色大片免费网站 | 欧洲精品码一区二区三区免费看 | 扒开双腿吃奶呻吟做受视频 | 欧美放荡的少妇 | 激情亚洲一区国产精品 | 亚洲国产欧美日韩精品一区二区三区 | 乱人伦人妻中文字幕无码 | 永久黄网站色视频免费直播 | 亚洲日韩精品欧美一区二区 | 国产精品久久久久影院嫩草 | 成人性做爰aaa片免费看不忠 | 九九热爱视频精品 | 精品久久久久香蕉网 | 内射老妇bbwx0c0ck | 亚洲国产精品无码一区二区三区 | 在线 国产 欧美 亚洲 天堂 | 亚洲欧美日韩国产精品一区二区 | 永久免费精品精品永久-夜色 | 久久久精品456亚洲影院 | 一区二区传媒有限公司 | 日本一区二区三区免费高清 | 久久午夜无码鲁丝片秋霞 | 永久黄网站色视频免费直播 | 国产精品无码成人午夜电影 | 台湾无码一区二区 | 国产精品人人妻人人爽 | 偷窥日本少妇撒尿chinese | 日日摸日日碰夜夜爽av | 国产成人无码a区在线观看视频app | 领导边摸边吃奶边做爽在线观看 | 精品少妇爆乳无码av无码专区 | 激情五月综合色婷婷一区二区 | 国产明星裸体无码xxxx视频 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 久久久久免费看成人影片 | 人妻aⅴ无码一区二区三区 | 无码任你躁久久久久久久 | 国产亚洲美女精品久久久2020 | 丰满人妻一区二区三区免费视频 | 啦啦啦www在线观看免费视频 | 亚洲欧洲中文日韩av乱码 | 日产精品高潮呻吟av久久 | 少妇厨房愉情理9仑片视频 | 欧洲精品码一区二区三区免费看 | 亚洲国产成人av在线观看 | 日本又色又爽又黄的a片18禁 | 国产美女精品一区二区三区 | 亚洲国产精品毛片av不卡在线 | 亚洲成a人片在线观看无码3d | 日本高清一区免费中文视频 | 日本精品久久久久中文字幕 | aⅴ亚洲 日韩 色 图网站 播放 | 亚洲精品综合一区二区三区在线 | 欧美一区二区三区视频在线观看 | 日本成熟视频免费视频 | 樱花草在线播放免费中文 | 国产精品久久久一区二区三区 | 大色综合色综合网站 | 国产在线精品一区二区高清不卡 | 国产激情无码一区二区 | 国产情侣作爱视频免费观看 | 中文字幕无码乱人伦 | 国产精品人人爽人人做我的可爱 | 亚洲无人区午夜福利码高清完整版 | 欧美日韩久久久精品a片 | 国产在线无码精品电影网 | 国产精品国产三级国产专播 | 日韩精品乱码av一区二区 | 亚洲国产精品无码一区二区三区 | 亚洲日本va中文字幕 | 一个人免费观看的www视频 | 白嫩日本少妇做爰 | 国产午夜亚洲精品不卡下载 | 亚洲欧美综合区丁香五月小说 | 亚洲综合在线一区二区三区 | 国产亚洲人成a在线v网站 | 国内少妇偷人精品视频免费 | 亚洲 欧美 激情 小说 另类 | 荫蒂被男人添的好舒服爽免费视频 | 97夜夜澡人人爽人人喊中国片 | 亚洲 高清 成人 动漫 | 丰满人妻被黑人猛烈进入 | 97资源共享在线视频 | 极品嫩模高潮叫床 | 88国产精品欧美一区二区三区 | 免费无码午夜福利片69 | 亚洲中文无码av永久不收费 | 久久久久国色av免费观看性色 | 国产精品第一国产精品 | 波多野结衣av在线观看 | 日本va欧美va欧美va精品 | 亚洲一区二区三区在线观看网站 | 巨爆乳无码视频在线观看 | 好爽又高潮了毛片免费下载 | 欧美熟妇另类久久久久久不卡 | 欧美日韩一区二区三区自拍 | 国产精品爱久久久久久久 | 精品国产青草久久久久福利 | 99久久精品日本一区二区免费 | 亚洲色偷偷偷综合网 | 国产偷国产偷精品高清尤物 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲精品国产精品乱码视色 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 亚洲性无码av中文字幕 | 久久久国产精品无码免费专区 | 色综合久久中文娱乐网 | 一区二区三区高清视频一 | 丁香花在线影院观看在线播放 | 国产综合色产在线精品 | 中文久久乱码一区二区 | 亚洲一区二区三区国产精华液 | 久久综合九色综合97网 | 激情五月综合色婷婷一区二区 | 色 综合 欧美 亚洲 国产 | 男女下面进入的视频免费午夜 | 亚洲 a v无 码免 费 成 人 a v | 在线天堂新版最新版在线8 | 内射爽无广熟女亚洲 | 国产精品人妻一区二区三区四 | 日韩欧美中文字幕在线三区 | 精品亚洲成av人在线观看 | 六十路熟妇乱子伦 | 国产精品丝袜黑色高跟鞋 | 丁香花在线影院观看在线播放 | 国产无遮挡又黄又爽免费视频 | 一区二区三区乱码在线 | 欧洲 | 久久久久久亚洲精品a片成人 | 久久精品中文字幕大胸 | 女人和拘做爰正片视频 | 精品久久久久久人妻无码中文字幕 | 中文字幕人妻丝袜二区 | 免费网站看v片在线18禁无码 | 午夜免费福利小电影 | 亚洲精品成a人在线观看 | 国产免费无码一区二区视频 | 国内精品九九久久久精品 | 大胆欧美熟妇xx | 性啪啪chinese东北女人 | 爽爽影院免费观看 | 成人av无码一区二区三区 | 综合人妻久久一区二区精品 | 高清不卡一区二区三区 | 国产办公室秘书无码精品99 | 亚洲日本一区二区三区在线 | 久久综合香蕉国产蜜臀av | 鲁一鲁av2019在线 | 久久久久99精品国产片 | 国产精品美女久久久久av爽李琼 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 蜜桃av抽搐高潮一区二区 | 中文字幕亚洲情99在线 | 又黄又爽又色的视频 | 丰满岳乱妇在线观看中字无码 | 亚洲精品成a人在线观看 | 激情爆乳一区二区三区 | 女人被爽到呻吟gif动态图视看 | 超碰97人人做人人爱少妇 | 国产特级毛片aaaaaa高潮流水 | 日韩精品一区二区av在线 | 2019午夜福利不卡片在线 | 欧洲美熟女乱又伦 | 99久久精品午夜一区二区 | 欧美三级不卡在线观看 | 在线成人www免费观看视频 | 天天躁日日躁狠狠躁免费麻豆 | 鲁大师影院在线观看 | 欧美日韩人成综合在线播放 | 久久精品人人做人人综合 | 娇妻被黑人粗大高潮白浆 | 性色欲网站人妻丰满中文久久不卡 | 一本大道久久东京热无码av | 好男人社区资源 | 搡女人真爽免费视频大全 | 国产成人无码av一区二区 | 亚洲第一网站男人都懂 | 黑人巨大精品欧美一区二区 | 久久伊人色av天堂九九小黄鸭 | 中文字幕无码乱人伦 | 亚洲第一无码av无码专区 | 窝窝午夜理论片影院 | 国产亚洲日韩欧美另类第八页 | 人妻有码中文字幕在线 | 精品一二三区久久aaa片 | 一本久久伊人热热精品中文字幕 | 18禁黄网站男男禁片免费观看 | 国产午夜手机精彩视频 | 无码av免费一区二区三区试看 | 久久精品国产一区二区三区 | 乱人伦人妻中文字幕无码久久网 | 中文字幕无码视频专区 | 欧美精品国产综合久久 | 无码国产乱人伦偷精品视频 | 亚洲午夜福利在线观看 | 亚洲天堂2017无码 | 97精品国产97久久久久久免费 | 55夜色66夜色国产精品视频 | 熟妇人妻激情偷爽文 | 久久人妻内射无码一区三区 | 日韩少妇内射免费播放 | 欧美人与善在线com | 国产综合色产在线精品 | 欧美人妻一区二区三区 | 精品久久综合1区2区3区激情 | 亚洲伊人久久精品影院 | 无码精品人妻一区二区三区av | 久久熟妇人妻午夜寂寞影院 | 人妻有码中文字幕在线 | 99久久99久久免费精品蜜桃 | 日本va欧美va欧美va精品 | 十八禁真人啪啪免费网站 | 久久亚洲中文字幕无码 | 精品水蜜桃久久久久久久 | 免费无码一区二区三区蜜桃大 | 丰满肥臀大屁股熟妇激情视频 | 亚洲春色在线视频 | 亚洲大尺度无码无码专区 | 国产成人午夜福利在线播放 | 毛片内射-百度 | 国精产品一区二区三区 | 久激情内射婷内射蜜桃人妖 | 精品无码av一区二区三区 | 少妇高潮喷潮久久久影院 | 午夜精品久久久久久久久 | 国产 精品 自在自线 | 亚洲高清偷拍一区二区三区 | 日本肉体xxxx裸交 | 亚洲の无码国产の无码影院 | 特级做a爰片毛片免费69 | 日日摸日日碰夜夜爽av | 亚洲精品综合五月久久小说 | 亚洲一区二区三区含羞草 | 中文字幕无线码免费人妻 | 国产区女主播在线观看 | a在线观看免费网站大全 | www一区二区www免费 | 日韩亚洲欧美精品综合 | 亚洲中文字幕在线无码一区二区 | 十八禁真人啪啪免费网站 | 99久久久无码国产精品免费 | 国产电影无码午夜在线播放 | 人妻人人添人妻人人爱 | 午夜无码区在线观看 | 中文字幕乱码人妻无码久久 | 成人无码视频在线观看网站 | 麻豆成人精品国产免费 | 日韩亚洲欧美中文高清在线 | 午夜精品一区二区三区的区别 | 一个人看的视频www在线 | 亚洲国产精品无码久久久久高潮 | 少妇愉情理伦片bd | 3d动漫精品啪啪一区二区中 | 久久综合激激的五月天 | 亚洲中文字幕无码中字 | 亚洲自偷自偷在线制服 | 夜先锋av资源网站 | 999久久久国产精品消防器材 | 撕开奶罩揉吮奶头视频 | 欧美第一黄网免费网站 | 久久久www成人免费毛片 | 在线亚洲高清揄拍自拍一品区 | 巨爆乳无码视频在线观看 | 一本大道伊人av久久综合 | 黑人巨大精品欧美黑寡妇 | 婷婷综合久久中文字幕蜜桃三电影 | 老司机亚洲精品影院无码 | 人人爽人人澡人人高潮 | 日韩精品无码一本二本三本色 | 免费观看黄网站 | 日本熟妇人妻xxxxx人hd | 草草网站影院白丝内射 | 色一情一乱一伦 | 国产成人精品无码播放 | 人妻无码αv中文字幕久久琪琪布 | 无码人妻丰满熟妇区五十路百度 | 欧美人与动性行为视频 | 俺去俺来也在线www色官网 | 大屁股大乳丰满人妻 | 成熟女人特级毛片www免费 | 亚洲国产精品美女久久久久 | 在线看片无码永久免费视频 | 国产无遮挡又黄又爽又色 | a在线亚洲男人的天堂 | 久久久久99精品成人片 | 日韩av无码一区二区三区不卡 | 国产精品亚洲专区无码不卡 | 国产精品国产自线拍免费软件 | 国产精品永久免费视频 | 奇米影视7777久久精品人人爽 | 99国产精品白浆在线观看免费 | 久久综合狠狠综合久久综合88 | 国产精品久免费的黄网站 | 欧美老熟妇乱xxxxx | 国产免费无码一区二区视频 | 国产精品-区区久久久狼 | 两性色午夜视频免费播放 | 无人区乱码一区二区三区 | 精品国产麻豆免费人成网站 | 亚洲精品综合一区二区三区在线 | 好男人社区资源 | 午夜免费福利小电影 | 亚洲成在人网站无码天堂 | 色综合久久久无码网中文 | 国产在热线精品视频 | 日韩精品无码一区二区中文字幕 | 精品国产精品久久一区免费式 | 亚洲а∨天堂久久精品2021 | 精品国精品国产自在久国产87 | 免费无码肉片在线观看 | 国产精品理论片在线观看 | 狂野欧美性猛交免费视频 | 色爱情人网站 | 精品国产精品久久一区免费式 | 蜜桃视频插满18在线观看 | 亚洲无人区一区二区三区 | 欧美人与善在线com | 精品无码一区二区三区的天堂 | 玩弄人妻少妇500系列视频 | 国产超级va在线观看视频 | 日韩亚洲欧美中文高清在线 | 色综合久久中文娱乐网 | 麻豆国产人妻欲求不满 | 精品国产一区二区三区四区 | 最近免费中文字幕中文高清百度 | 国产精品人妻一区二区三区四 | 久久精品国产日本波多野结衣 | 久久久亚洲欧洲日产国码αv | 少妇无码一区二区二三区 | 丝袜足控一区二区三区 | 久久精品国产精品国产精品污 | av无码久久久久不卡免费网站 | 夜夜躁日日躁狠狠久久av | 久久天天躁狠狠躁夜夜免费观看 | 国产亚洲精品久久久闺蜜 | 日韩精品成人一区二区三区 | 樱花草在线播放免费中文 | 成人性做爰aaa片免费看不忠 | 高清不卡一区二区三区 | 久久久久久九九精品久 | 亚洲国产精品久久久久久 | 午夜熟女插插xx免费视频 | 55夜色66夜色国产精品视频 | 午夜精品一区二区三区在线观看 | 中文字幕乱码人妻二区三区 | 国产成人人人97超碰超爽8 | 免费国产黄网站在线观看 | 波多野结衣一区二区三区av免费 | 日日噜噜噜噜夜夜爽亚洲精品 | 人妻少妇被猛烈进入中文字幕 | 国产精品久久久久久无码 | 国产午夜亚洲精品不卡下载 | 女人和拘做爰正片视频 | 人妻少妇被猛烈进入中文字幕 | 日本在线高清不卡免费播放 | 在线精品国产一区二区三区 | 熟妇人妻无乱码中文字幕 | 精品国产aⅴ无码一区二区 | 正在播放老肥熟妇露脸 | 日韩精品无码一区二区中文字幕 | 亚洲综合无码一区二区三区 | 少妇人妻av毛片在线看 | 激情亚洲一区国产精品 | 国产极品美女高潮无套在线观看 | 国产人妻人伦精品1国产丝袜 | 国产精品人人妻人人爽 | 国产精品自产拍在线观看 | 久久天天躁狠狠躁夜夜免费观看 | 久久国内精品自在自线 | 国产av久久久久精东av | www国产亚洲精品久久网站 | 国产成人无码av片在线观看不卡 | 亚洲精品国偷拍自产在线观看蜜桃 | 性啪啪chinese东北女人 | 亚洲色偷偷男人的天堂 | 欧美一区二区三区 | 精品少妇爆乳无码av无码专区 | 亚洲熟妇色xxxxx亚洲 | 欧美精品免费观看二区 | 亚洲人成影院在线无码按摩店 | 精品人妻av区 | 玩弄人妻少妇500系列视频 | 亚洲国产精品成人久久蜜臀 | 国色天香社区在线视频 | 欧美兽交xxxx×视频 | 国产激情艳情在线看视频 | 美女毛片一区二区三区四区 | 亚洲爆乳精品无码一区二区三区 | 少妇一晚三次一区二区三区 | 国产成人无码av一区二区 | 国精产品一品二品国精品69xx | 精品久久久无码中文字幕 | 久久精品视频在线看15 | 久久精品成人欧美大片 | 精品乱子伦一区二区三区 | 成人无码视频在线观看网站 | 日韩精品无码一区二区中文字幕 | 国产农村乱对白刺激视频 | 国产无遮挡吃胸膜奶免费看 | 亚洲国产精品一区二区美利坚 | 国产人妖乱国产精品人妖 | 在线观看国产一区二区三区 | 少妇无码一区二区二三区 | 国产内射老熟女aaaa | 久久国产精品偷任你爽任你 | 日本护士xxxxhd少妇 | 色欲综合久久中文字幕网 | 性欧美牲交xxxxx视频 | 国产在线精品一区二区三区直播 | 亚洲gv猛男gv无码男同 | 欧美肥老太牲交大战 | 97精品人妻一区二区三区香蕉 | 国内老熟妇对白xxxxhd | 国产激情精品一区二区三区 | 日本熟妇人妻xxxxx人hd | 九九在线中文字幕无码 | 免费国产成人高清在线观看网站 | 在线观看免费人成视频 | 四十如虎的丰满熟妇啪啪 | 欧美人与禽zoz0性伦交 | 欧美老妇交乱视频在线观看 | 未满小14洗澡无码视频网站 | 一本精品99久久精品77 | 久久 国产 尿 小便 嘘嘘 | 美女毛片一区二区三区四区 | 300部国产真实乱 | 成人影院yy111111在线观看 | a国产一区二区免费入口 | 中文字幕日韩精品一区二区三区 | 老熟女重囗味hdxx69 | 熟妇激情内射com | 成人免费视频视频在线观看 免费 | 国产精品第一区揄拍无码 | 草草网站影院白丝内射 | 国产97人人超碰caoprom | 午夜丰满少妇性开放视频 | 日韩人妻无码中文字幕视频 | 国产亚洲人成a在线v网站 | 日韩欧美中文字幕在线三区 | 丝袜足控一区二区三区 | 免费观看黄网站 | 成人三级无码视频在线观看 | 精品夜夜澡人妻无码av蜜桃 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 精品厕所偷拍各类美女tp嘘嘘 | 小sao货水好多真紧h无码视频 | 国产明星裸体无码xxxx视频 | 在线a亚洲视频播放在线观看 | 大地资源中文第3页 | 日韩av无码中文无码电影 | 亚洲毛片av日韩av无码 | 日本熟妇浓毛 | 精品无码一区二区三区爱欲 | 日日摸夜夜摸狠狠摸婷婷 | 久久久久久av无码免费看大片 | 精品日本一区二区三区在线观看 | 熟妇人妻激情偷爽文 | 亚洲中文字幕va福利 | 中文字幕无码免费久久9一区9 | 国产激情艳情在线看视频 | 欧美老妇交乱视频在线观看 | 7777奇米四色成人眼影 | 国产成人无码av在线影院 | 四虎国产精品一区二区 | 欧美日本免费一区二区三区 | 中文字幕乱码亚洲无线三区 | 久久五月精品中文字幕 | 男人的天堂2018无码 | 性史性农村dvd毛片 | 亚洲s色大片在线观看 | 亚洲国产精品久久人人爱 | 丰满少妇女裸体bbw | 欧美人与牲动交xxxx | 久久综合九色综合欧美狠狠 | 久久久久久亚洲精品a片成人 | 久久综合九色综合97网 | 亚洲理论电影在线观看 | 老司机亚洲精品影院 | 风流少妇按摩来高潮 | 疯狂三人交性欧美 | 国内少妇偷人精品视频免费 | 亚洲乱码中文字幕在线 | 欧美zoozzooz性欧美 | 久久久久成人精品免费播放动漫 | 亚洲爆乳精品无码一区二区三区 | 国产av无码专区亚洲a∨毛片 | 国产精品亚洲一区二区三区喷水 | 男女性色大片免费网站 | 国产精品无套呻吟在线 | 欧洲熟妇精品视频 | 荫蒂被男人添的好舒服爽免费视频 | 少妇性l交大片欧洲热妇乱xxx | 日本高清一区免费中文视频 | 东京热无码av男人的天堂 | 久久精品国产亚洲精品 | 性欧美videos高清精品 | 久久久无码中文字幕久... | 亚洲中文字幕久久无码 | 人妻少妇精品无码专区二区 | 国产亚洲tv在线观看 | 国产精品久久久久久无码 | 中文字幕 人妻熟女 | 婷婷五月综合缴情在线视频 | 欧美怡红院免费全部视频 | 无码av岛国片在线播放 | 国产情侣作爱视频免费观看 | 久久亚洲中文字幕无码 | 亚洲国产一区二区三区在线观看 | 中文字幕亚洲情99在线 | 亚洲色www成人永久网址 | 正在播放东北夫妻内射 | 亚洲一区二区三区香蕉 | 中文字幕无码视频专区 | 97精品人妻一区二区三区香蕉 | 天天躁日日躁狠狠躁免费麻豆 | 99麻豆久久久国产精品免费 | 午夜性刺激在线视频免费 | 国产精品18久久久久久麻辣 | 久青草影院在线观看国产 | 色欲综合久久中文字幕网 | 欧美肥老太牲交大战 | 动漫av网站免费观看 | 亚洲精品国产a久久久久久 | 成 人 网 站国产免费观看 | 高潮毛片无遮挡高清免费视频 | 中国女人内谢69xxxxxa片 | 欧洲极品少妇 | 一本色道久久综合狠狠躁 | 亚洲aⅴ无码成人网站国产app | 又紧又大又爽精品一区二区 | 亚洲七七久久桃花影院 | 无码一区二区三区在线观看 | 荫蒂被男人添的好舒服爽免费视频 | 国产又爽又黄又刺激的视频 | 无遮挡啪啪摇乳动态图 | 国产精品无码永久免费888 | 成人免费视频一区二区 | 亚洲成a人片在线观看日本 | 99久久精品日本一区二区免费 | 性欧美熟妇videofreesex | 97夜夜澡人人双人人人喊 | 亚洲 a v无 码免 费 成 人 a v | 国产精品丝袜黑色高跟鞋 | 精品 日韩 国产 欧美 视频 | 好屌草这里只有精品 | 性欧美大战久久久久久久 | 国产精品久久久久无码av色戒 | 中文无码精品a∨在线观看不卡 | www国产精品内射老师 | 18黄暴禁片在线观看 | 国内精品久久毛片一区二区 | 成在人线av无码免费 | 妺妺窝人体色www婷婷 | 国产极品美女高潮无套在线观看 | 无码纯肉视频在线观看 | 性开放的女人aaa片 | 色狠狠av一区二区三区 | 亚洲七七久久桃花影院 | 宝宝好涨水快流出来免费视频 | 无码一区二区三区在线观看 | 高中生自慰www网站 | 88国产精品欧美一区二区三区 | 亚洲人交乣女bbw | 欧美freesex黑人又粗又大 | 欧美自拍另类欧美综合图片区 | 国产精品资源一区二区 | 国产97在线 | 亚洲 | 亚洲综合在线一区二区三区 | 中文字幕无码免费久久9一区9 | 精品偷拍一区二区三区在线看 | 国产国语老龄妇女a片 | 国产av人人夜夜澡人人爽麻豆 | 日本大乳高潮视频在线观看 | 人妻与老人中文字幕 | 少妇一晚三次一区二区三区 | 白嫩日本少妇做爰 | 国产黑色丝袜在线播放 | 亚洲国产日韩a在线播放 | 图片区 小说区 区 亚洲五月 | 性色av无码免费一区二区三区 | 玩弄中年熟妇正在播放 | 国产高潮视频在线观看 | 国产亚洲美女精品久久久2020 | 国产办公室秘书无码精品99 | 内射后入在线观看一区 | 成人无码精品一区二区三区 | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲国产精品一区二区第一页 | 精品国产青草久久久久福利 | av无码久久久久不卡免费网站 | 日韩精品无码一本二本三本色 | 午夜丰满少妇性开放视频 | 呦交小u女精品视频 | 丰满人妻被黑人猛烈进入 | 久久精品中文字幕一区 | 国产av无码专区亚洲a∨毛片 | 性色欲情网站iwww九文堂 | 婷婷色婷婷开心五月四房播播 | 亚洲の无码国产の无码影院 | 99久久久无码国产aaa精品 | 亚洲aⅴ无码成人网站国产app | 丝袜美腿亚洲一区二区 | 国产超级va在线观看视频 | 亚洲中文字幕成人无码 | 一本色道久久综合狠狠躁 | 成人免费视频在线观看 | 老司机亚洲精品影院无码 | 麻豆果冻传媒2021精品传媒一区下载 | 一本久道高清无码视频 | 久久亚洲中文字幕精品一区 | 久久久久免费精品国产 | 对白脏话肉麻粗话av | 无码精品人妻一区二区三区av | 99国产欧美久久久精品 | 又色又爽又黄的美女裸体网站 | 国産精品久久久久久久 | 激情国产av做激情国产爱 | 日本精品人妻无码免费大全 | 成人无码影片精品久久久 | 波多野结衣乳巨码无在线观看 | 久久精品99久久香蕉国产色戒 | 久久人妻内射无码一区三区 | 欧美 日韩 人妻 高清 中文 | 中文精品无码中文字幕无码专区 | 最新国产乱人伦偷精品免费网站 | 丁香啪啪综合成人亚洲 | 精品国产一区av天美传媒 | 女人被男人爽到呻吟的视频 | 国产乱码精品一品二品 | 草草网站影院白丝内射 | 在线播放免费人成毛片乱码 | 午夜精品久久久内射近拍高清 | 国产一区二区三区影院 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 野外少妇愉情中文字幕 | 性色av无码免费一区二区三区 | 青青草原综合久久大伊人精品 | 日日鲁鲁鲁夜夜爽爽狠狠 | 亚洲精品www久久久 | 76少妇精品导航 | 日韩人妻无码一区二区三区久久99 | 国精品人妻无码一区二区三区蜜柚 | 免费视频欧美无人区码 | 国产av人人夜夜澡人人爽麻豆 | 欧美老妇交乱视频在线观看 | 日日噜噜噜噜夜夜爽亚洲精品 | 欧美 丝袜 自拍 制服 另类 | 狠狠噜狠狠狠狠丁香五月 | 久久综合久久自在自线精品自 | 日本又色又爽又黄的a片18禁 | 欧美黑人巨大xxxxx | 色一情一乱一伦 | 国产麻豆精品精东影业av网站 | 伊人久久婷婷五月综合97色 | 熟妇激情内射com | 午夜精品一区二区三区在线观看 | 成年女人永久免费看片 | 无码国产激情在线观看 | 性色欲网站人妻丰满中文久久不卡 | 夜夜躁日日躁狠狠久久av | 在线精品亚洲一区二区 | 国产亚洲精品久久久闺蜜 | 六月丁香婷婷色狠狠久久 | 久久亚洲中文字幕精品一区 | 奇米影视7777久久精品人人爽 | 荫蒂被男人添的好舒服爽免费视频 | 国产在线一区二区三区四区五区 | 人人妻人人澡人人爽欧美一区九九 | 国产精品视频免费播放 | 丝袜足控一区二区三区 | 亚洲自偷自拍另类第1页 | 日本又色又爽又黄的a片18禁 | 超碰97人人做人人爱少妇 | 少妇厨房愉情理9仑片视频 | aⅴ亚洲 日韩 色 图网站 播放 | 国产高清av在线播放 | 国产精品办公室沙发 | av香港经典三级级 在线 | 国产九九九九九九九a片 | 欧美性猛交xxxx富婆 | 欧美人妻一区二区三区 | 激情内射亚州一区二区三区爱妻 | 亚洲中文字幕成人无码 | 亚洲精品美女久久久久久久 | 久久亚洲国产成人精品性色 | 国产精品久免费的黄网站 | 熟妇人妻中文av无码 | 中文无码精品a∨在线观看不卡 | 97精品国产97久久久久久免费 | 日韩av无码一区二区三区不卡 | 国产亚洲精品久久久久久 | 东北女人啪啪对白 | 欧洲美熟女乱又伦 | 狠狠色噜噜狠狠狠狠7777米奇 | 欧美丰满熟妇xxxx性ppx人交 | 精品乱子伦一区二区三区 | 免费人成网站视频在线观看 | 色综合久久久久综合一本到桃花网 | 亚洲色无码一区二区三区 | 日本熟妇大屁股人妻 | 成人试看120秒体验区 | 人妻无码久久精品人妻 | 搡女人真爽免费视频大全 | 久久综合狠狠综合久久综合88 | 国产精品人人妻人人爽 | 牲欲强的熟妇农村老妇女 | 蜜桃臀无码内射一区二区三区 | 人妻熟女一区 | 波多野结衣av在线观看 | 久久人妻内射无码一区三区 | 欧美熟妇另类久久久久久不卡 | 日本高清一区免费中文视频 | 亚洲人成无码网www | 久久精品国产99精品亚洲 | 日韩av无码一区二区三区 | 日本乱人伦片中文三区 | 性欧美疯狂xxxxbbbb | 无套内谢的新婚少妇国语播放 | 国产亲子乱弄免费视频 | 妺妺窝人体色www婷婷 | 亚洲色欲久久久综合网东京热 | yw尤物av无码国产在线观看 | 波多野结衣av一区二区全免费观看 | 久久国产36精品色熟妇 | 人人妻人人澡人人爽欧美精品 | 亚洲综合久久一区二区 | 久久aⅴ免费观看 | 无码人妻少妇伦在线电影 | 国产av无码专区亚洲awww | 1000部啪啪未满十八勿入下载 | 娇妻被黑人粗大高潮白浆 | 女人高潮内射99精品 | 性色av无码免费一区二区三区 | 国产午夜精品一区二区三区嫩草 | 荡女精品导航 | 在线观看免费人成视频 | 无码av最新清无码专区吞精 | 无套内谢的新婚少妇国语播放 | 成熟人妻av无码专区 | 99精品国产综合久久久久五月天 | 成人亚洲精品久久久久 | 亚洲精品成人av在线 | 夜先锋av资源网站 | 国产亚洲欧美日韩亚洲中文色 | 少妇被黑人到高潮喷出白浆 | 精品国产一区二区三区四区在线看 | 国产亚洲精品久久久久久大师 | 精品偷拍一区二区三区在线看 | а√天堂www在线天堂小说 | 午夜熟女插插xx免费视频 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 亚洲爆乳精品无码一区二区三区 | 婷婷色婷婷开心五月四房播播 | 人妻尝试又大又粗久久 | 成在人线av无码免观看麻豆 | 亚洲娇小与黑人巨大交 | 精品久久综合1区2区3区激情 | 国产精品爱久久久久久久 | 成人无码影片精品久久久 | 国产成人无码av片在线观看不卡 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产香蕉尹人视频在线 | 日本丰满护士爆乳xxxx | 久久99精品国产.久久久久 | 国产猛烈高潮尖叫视频免费 | 成人精品视频一区二区三区尤物 | 国产精品沙发午睡系列 | 又湿又紧又大又爽a视频国产 | 国产在线精品一区二区三区直播 | 亚洲熟妇色xxxxx欧美老妇 | 一二三四社区在线中文视频 | 一区二区三区高清视频一 | 国产精品高潮呻吟av久久4虎 | 成熟女人特级毛片www免费 | 领导边摸边吃奶边做爽在线观看 | 成人精品视频一区二区三区尤物 | 中文字幕 亚洲精品 第1页 | 亚洲无人区一区二区三区 | 玩弄少妇高潮ⅹxxxyw | a国产一区二区免费入口 | 精品国产一区二区三区四区 | 欧美性猛交内射兽交老熟妇 | 色欲久久久天天天综合网精品 | 亚洲人亚洲人成电影网站色 | 国产乱码精品一品二品 | 无码人妻出轨黑人中文字幕 | 男女爱爱好爽视频免费看 | 国产精品久久久久久久影院 | 久久99久久99精品中文字幕 | 国产精品欧美成人 | 亚洲熟妇色xxxxx亚洲 | 青草青草久热国产精品 | 无码乱肉视频免费大全合集 | 欧美猛少妇色xxxxx | 免费观看激色视频网站 | 色综合久久久无码网中文 | 婷婷六月久久综合丁香 | 国产97人人超碰caoprom | 99麻豆久久久国产精品免费 | 精品熟女少妇av免费观看 | 久久久久久久女国产乱让韩 | 国产精品无码mv在线观看 | 国产免费无码一区二区视频 | 精品国产av色一区二区深夜久久 | 精品厕所偷拍各类美女tp嘘嘘 | 国产国语老龄妇女a片 | 亚洲国产午夜精品理论片 | 98国产精品综合一区二区三区 | 在线成人www免费观看视频 | 成人动漫在线观看 | 鲁一鲁av2019在线 | 熟女少妇人妻中文字幕 | 风流少妇按摩来高潮 | 网友自拍区视频精品 | 久久综合狠狠综合久久综合88 | 亚洲日韩一区二区三区 | 丰满护士巨好爽好大乳 | 国产人妻精品一区二区三区不卡 | 波多野结衣av一区二区全免费观看 | 亚洲人亚洲人成电影网站色 | 日本一卡二卡不卡视频查询 | 人妻少妇精品无码专区动漫 | 日日摸天天摸爽爽狠狠97 | 日本欧美一区二区三区乱码 | 精品国产一区二区三区四区在线看 | 麻豆精产国品 | 午夜精品久久久久久久久 | 人人澡人摸人人添 | 1000部啪啪未满十八勿入下载 | 国产精品无套呻吟在线 | 久精品国产欧美亚洲色aⅴ大片 | 成人精品一区二区三区中文字幕 | 国产精品怡红院永久免费 | 日本一区二区更新不卡 | 亚洲成av人在线观看网址 | 国产亚洲精品久久久ai换 | 亚洲а∨天堂久久精品2021 | 久久人人爽人人爽人人片av高清 | 乱人伦人妻中文字幕无码久久网 | 国产亚洲视频中文字幕97精品 | 国产精品国产自线拍免费软件 | 牲交欧美兽交欧美 | 国产莉萝无码av在线播放 | 东京无码熟妇人妻av在线网址 | 一本久道久久综合狠狠爱 | 天下第一社区视频www日本 | 黑人巨大精品欧美一区二区 | 国产av剧情md精品麻豆 | 国产综合久久久久鬼色 | 97久久国产亚洲精品超碰热 | 大胆欧美熟妇xx | 欧洲熟妇精品视频 | 少妇人妻av毛片在线看 | 少妇的肉体aa片免费 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 曰本女人与公拘交酡免费视频 | 精品一区二区三区波多野结衣 | 最新版天堂资源中文官网 | 亚洲日韩中文字幕在线播放 | 亚洲精品成人av在线 | 亚洲高清偷拍一区二区三区 | 午夜性刺激在线视频免费 | 麻豆md0077饥渴少妇 | 无码纯肉视频在线观看 | 国产精品久久久午夜夜伦鲁鲁 | 成人亚洲精品久久久久软件 | 亚洲精品久久久久中文第一幕 | 久久精品国产大片免费观看 | 国产亚洲日韩欧美另类第八页 | 特黄特色大片免费播放器图片 | 女人和拘做爰正片视频 | 天天躁日日躁狠狠躁免费麻豆 | 色爱情人网站 | 国产乱子伦视频在线播放 | 奇米影视7777久久精品 | 伊人久久大香线蕉午夜 | 亚洲精品欧美二区三区中文字幕 | 97夜夜澡人人爽人人喊中国片 | 图片小说视频一区二区 | 精品久久久久久亚洲精品 | 精品人妻人人做人人爽 | 亚洲欧美国产精品久久 | 日本xxxx色视频在线观看免费 | 乱中年女人伦av三区 | 国产成人久久精品流白浆 | 国产手机在线αⅴ片无码观看 | 7777奇米四色成人眼影 | 欧美日韩一区二区综合 | 天堂无码人妻精品一区二区三区 | 久久午夜夜伦鲁鲁片无码免费 | 婷婷六月久久综合丁香 | 亚洲日韩乱码中文无码蜜桃臀网站 | 欧美激情内射喷水高潮 | 99久久无码一区人妻 | 荫蒂被男人添的好舒服爽免费视频 | 131美女爱做视频 | 久久午夜无码鲁丝片秋霞 | 亚洲熟熟妇xxxx | 性色欲网站人妻丰满中文久久不卡 | 天堂久久天堂av色综合 | 精品 日韩 国产 欧美 视频 | 18禁黄网站男男禁片免费观看 | 国产av一区二区精品久久凹凸 | 久久99精品国产.久久久久 | 欧美亚洲国产一区二区三区 | 国产欧美亚洲精品a | av无码电影一区二区三区 | 国产莉萝无码av在线播放 | 少妇性荡欲午夜性开放视频剧场 | 久久久久99精品成人片 | 国产区女主播在线观看 | 精品国产一区二区三区av 性色 | 在线视频网站www色 | 亚洲一区二区三区在线观看网站 | 中文字幕av伊人av无码av | 99精品视频在线观看免费 | 欧美肥老太牲交大战 | 亚洲精品国偷拍自产在线观看蜜桃 | 99久久精品日本一区二区免费 | 欧美人与禽zoz0性伦交 | 精品一区二区不卡无码av | 女人被男人躁得好爽免费视频 | 色婷婷久久一区二区三区麻豆 | 日欧一片内射va在线影院 | 欧美野外疯狂做受xxxx高潮 | 午夜男女很黄的视频 | 国产真实伦对白全集 | 激情内射亚州一区二区三区爱妻 | 日韩少妇内射免费播放 | 狠狠色噜噜狠狠狠狠7777米奇 | 成人三级无码视频在线观看 | www成人国产高清内射 | 午夜丰满少妇性开放视频 | 少妇人妻偷人精品无码视频 | 精品无人区无码乱码毛片国产 | 亚洲 日韩 欧美 成人 在线观看 | 国产猛烈高潮尖叫视频免费 | 日韩欧美群交p片內射中文 | 亚洲综合久久一区二区 | 国产成人无码区免费内射一片色欲 | 久在线观看福利视频 | 国产真实乱对白精彩久久 | 给我免费的视频在线观看 | 国产97人人超碰caoprom | 人妻天天爽夜夜爽一区二区 | 亚洲の无码国产の无码影院 | 国产成人无码a区在线观看视频app | 国产香蕉尹人综合在线观看 | 日韩欧美成人免费观看 | 俄罗斯老熟妇色xxxx | 亚洲啪av永久无码精品放毛片 | 日本一区二区更新不卡 | 在线欧美精品一区二区三区 | 国产无遮挡吃胸膜奶免费看 | 亚洲一区二区三区偷拍女厕 | 国产午夜福利亚洲第一 | 日韩av激情在线观看 | 欧美激情一区二区三区成人 | 精品无码成人片一区二区98 | 精品偷拍一区二区三区在线看 | 牲欲强的熟妇农村老妇女 | 丰满肥臀大屁股熟妇激情视频 | 亚洲精品综合一区二区三区在线 | 欧美性色19p | 国产莉萝无码av在线播放 | 久久综合网欧美色妞网 | 成人无码影片精品久久久 | 成人精品视频一区二区三区尤物 | 国产特级毛片aaaaaa高潮流水 | 日本乱人伦片中文三区 | 乱人伦人妻中文字幕无码久久网 | 波多野结衣高清一区二区三区 | 中文字幕无码免费久久99 | 少妇人妻大乳在线视频 | 乱人伦中文视频在线观看 | 欧美乱妇无乱码大黄a片 | 国产成人精品一区二区在线小狼 | 老头边吃奶边弄进去呻吟 | 国模大胆一区二区三区 | 日韩av无码一区二区三区 | 精品国产国产综合精品 | 久久久久亚洲精品中文字幕 | a在线观看免费网站大全 | 帮老师解开蕾丝奶罩吸乳网站 | 日本免费一区二区三区最新 | 日日天日日夜日日摸 | 久久久精品成人免费观看 | 国产婷婷色一区二区三区在线 | 人人妻人人藻人人爽欧美一区 | 亚洲精品综合五月久久小说 | 久久久无码中文字幕久... | 野外少妇愉情中文字幕 | 成人综合网亚洲伊人 | 1000部夫妻午夜免费 | 女人被男人爽到呻吟的视频 | 2019午夜福利不卡片在线 | 无码毛片视频一区二区本码 | 中文毛片无遮挡高清免费 | 国产精品香蕉在线观看 | av无码久久久久不卡免费网站 | 人妻少妇精品无码专区动漫 | 亚洲精品国偷拍自产在线观看蜜桃 | 成人无码视频免费播放 | 激情五月综合色婷婷一区二区 | 日本丰满护士爆乳xxxx | 激情亚洲一区国产精品 | 中文字幕日产无线码一区 | 极品尤物被啪到呻吟喷水 | 四虎国产精品免费久久 | 亚洲国产欧美国产综合一区 | 亚洲成a人片在线观看无码3d | 亚洲精品无码国产 | 丰满人妻被黑人猛烈进入 | 强开小婷嫩苞又嫩又紧视频 | 亚洲成av人片在线观看无码不卡 | 亚洲成a人片在线观看无码 | 中国大陆精品视频xxxx | 九一九色国产 | 国产精品久久久久9999小说 | 久久久久人妻一区精品色欧美 | 精品偷自拍另类在线观看 | 人人妻人人澡人人爽人人精品浪潮 | 99精品视频在线观看免费 | 少妇人妻av毛片在线看 | 成人免费无码大片a毛片 | 天天爽夜夜爽夜夜爽 | 欧美性猛交内射兽交老熟妇 | 国产av久久久久精东av | 人妻尝试又大又粗久久 | 久久久中文久久久无码 | 国产成人无码av在线影院 | 欧美三级不卡在线观看 | 麻豆md0077饥渴少妇 | 国产精品亚洲五月天高清 | 国产色在线 | 国产 | 人人妻在人人 | 扒开双腿疯狂进出爽爽爽视频 | 亚洲 日韩 欧美 成人 在线观看 | 特大黑人娇小亚洲女 | 国产内射爽爽大片视频社区在线 | 精品久久久久久亚洲精品 | 国产无遮挡又黄又爽免费视频 | 精品无码一区二区三区爱欲 | 亚洲一区二区观看播放 | 爽爽影院免费观看 | 少妇邻居内射在线 | 亚洲人成影院在线观看 | 亚洲精品一区二区三区四区五区 | 欧美日韩在线亚洲综合国产人 | 亚洲成a人片在线观看无码3d | 国产区女主播在线观看 | 亚洲中文字幕在线无码一区二区 | 又大又硬又爽免费视频 | 精品人妻av区 | 免费人成网站视频在线观看 | 亚洲精品一区二区三区在线观看 | 东京无码熟妇人妻av在线网址 | 国产疯狂伦交大片 | 无码人妻久久一区二区三区不卡 | 久久亚洲日韩精品一区二区三区 | 久久国产自偷自偷免费一区调 | 爆乳一区二区三区无码 | 久热国产vs视频在线观看 | 狂野欧美性猛xxxx乱大交 | 国产乱人伦av在线无码 | 亚洲成a人一区二区三区 | 在线 国产 欧美 亚洲 天堂 | 亚洲熟女一区二区三区 | 久久精品国产99精品亚洲 | 日韩亚洲欧美精品综合 | 波多野结衣av一区二区全免费观看 | 又色又爽又黄的美女裸体网站 | 成在人线av无码免观看麻豆 | 精品水蜜桃久久久久久久 | 无码国产乱人伦偷精品视频 | a国产一区二区免费入口 | 国产精品18久久久久久麻辣 | 一本大道伊人av久久综合 | 亚洲啪av永久无码精品放毛片 | 久久久久久久人妻无码中文字幕爆 | 天堂久久天堂av色综合 | 2020久久香蕉国产线看观看 | 欧美熟妇另类久久久久久不卡 | 精品一区二区三区波多野结衣 | 色情久久久av熟女人妻网站 | 亚洲色欲久久久综合网东京热 | 女人色极品影院 | 在线观看国产一区二区三区 | 亚洲一区二区三区含羞草 | 日韩视频 中文字幕 视频一区 | 欧洲极品少妇 | 欧美老妇交乱视频在线观看 | 成年美女黄网站色大免费视频 | 国产精品久久久久9999小说 | 国产人妻人伦精品 | 欧美熟妇另类久久久久久不卡 | 狠狠色丁香久久婷婷综合五月 | 欧美精品在线观看 | 波多野结衣 黑人 | 成人欧美一区二区三区 | 无码人妻久久一区二区三区不卡 | 丰满肥臀大屁股熟妇激情视频 | 在线成人www免费观看视频 | 无码人妻丰满熟妇区五十路百度 | 六月丁香婷婷色狠狠久久 | 激情内射亚州一区二区三区爱妻 | 国产亚洲精品久久久ai换 | 奇米影视888欧美在线观看 | 国产成人无码一二三区视频 | 欧美刺激性大交 | 欧美成人午夜精品久久久 | 狠狠色丁香久久婷婷综合五月 | 国产婷婷色一区二区三区在线 | 亚欧洲精品在线视频免费观看 | 熟妇人妻无码xxx视频 | 亚洲欧洲无卡二区视頻 | 欧美国产日韩久久mv | 亚洲国产成人av在线观看 | √天堂中文官网8在线 | www一区二区www免费 | 欧美性猛交内射兽交老熟妇 | 综合激情五月综合激情五月激情1 | 国产精品久久久久久亚洲毛片 | 欧美zoozzooz性欧美 | 蜜臀aⅴ国产精品久久久国产老师 | 久久人人爽人人人人片 | 日本一区二区三区免费高清 | 色婷婷欧美在线播放内射 | 熟女少妇在线视频播放 | 国产精品怡红院永久免费 | 伊在人天堂亚洲香蕉精品区 | 日本精品少妇一区二区三区 | 国产无遮挡吃胸膜奶免费看 | 荫蒂添的好舒服视频囗交 | 影音先锋中文字幕无码 | 成人精品视频一区二区 | 玩弄人妻少妇500系列视频 | 无码av免费一区二区三区试看 | 亚洲精品无码人妻无码 | 无码人妻av免费一区二区三区 | 人妻无码αv中文字幕久久琪琪布 | 精品久久久无码人妻字幂 | 纯爱无遮挡h肉动漫在线播放 | 亚洲中文无码av永久不收费 | 综合人妻久久一区二区精品 | 99精品国产综合久久久久五月天 | 狂野欧美性猛交免费视频 | 久久久精品人妻久久影视 | 无套内谢老熟女 | 国产午夜亚洲精品不卡下载 | 国产在线精品一区二区三区直播 | 国产一区二区三区影院 | 99精品国产综合久久久久五月天 | 国产午夜亚洲精品不卡下载 | 377p欧洲日本亚洲大胆 | 丰满肥臀大屁股熟妇激情视频 | 午夜丰满少妇性开放视频 | 国产内射老熟女aaaa | 国产人妻人伦精品1国产丝袜 | 性开放的女人aaa片 | 亚洲成a人片在线观看日本 | 一本大道久久东京热无码av | 欧美性生交xxxxx久久久 | 性生交片免费无码看人 | 日本一本二本三区免费 | 色情久久久av熟女人妻网站 | 娇妻被黑人粗大高潮白浆 | 熟妇激情内射com | 久久久久av无码免费网 | 亚洲小说春色综合另类 | 国产精品.xx视频.xxtv | 日日干夜夜干 | 日本丰满护士爆乳xxxx | 性开放的女人aaa片 | 国产高清不卡无码视频 | 老头边吃奶边弄进去呻吟 | 欧美老妇与禽交 | 久久亚洲中文字幕无码 | 香港三级日本三级妇三级 | 最新版天堂资源中文官网 | 乱码av麻豆丝袜熟女系列 | 正在播放老肥熟妇露脸 | 国产人成高清在线视频99最全资源 | 久久久婷婷五月亚洲97号色 | 久久久国产一区二区三区 | 麻豆国产丝袜白领秘书在线观看 | 人人澡人人透人人爽 | 亚洲乱码中文字幕在线 | 精品日本一区二区三区在线观看 | 狠狠色噜噜狠狠狠7777奇米 | 国产午夜精品一区二区三区嫩草 | 日韩少妇内射免费播放 | 装睡被陌生人摸出水好爽 | 扒开双腿疯狂进出爽爽爽视频 | 国产成人精品三级麻豆 | 久久99久久99精品中文字幕 | 久久精品国产99精品亚洲 | 丝袜足控一区二区三区 | 亚洲日本va午夜在线电影 | 女人和拘做爰正片视频 | 又大又黄又粗又爽的免费视频 | 国产香蕉尹人综合在线观看 | 天下第一社区视频www日本 | 国内少妇偷人精品视频免费 | 欧美亚洲国产一区二区三区 | 亚洲综合伊人久久大杳蕉 | 久久精品成人欧美大片 | 青青青爽视频在线观看 | 亚洲a无码综合a国产av中文 | 亚洲 日韩 欧美 成人 在线观看 | 欧美熟妇另类久久久久久不卡 | 少妇一晚三次一区二区三区 | 免费视频欧美无人区码 | 特大黑人娇小亚洲女 | 免费人成在线视频无码 | 蜜臀av在线播放 久久综合激激的五月天 | 亚洲七七久久桃花影院 | 精品一区二区三区波多野结衣 | 成人无码精品1区2区3区免费看 | 高潮毛片无遮挡高清免费 | 成人无码视频在线观看网站 | 久久久亚洲欧洲日产国码αv | 国产av一区二区精品久久凹凸 | 无码一区二区三区在线观看 | 丰满肥臀大屁股熟妇激情视频 | 又大又硬又黄的免费视频 | 国产乱人偷精品人妻a片 | 无遮挡啪啪摇乳动态图 | 国产av一区二区精品久久凹凸 | 亚洲男人av天堂午夜在 | √8天堂资源地址中文在线 | 国精产品一品二品国精品69xx | 野外少妇愉情中文字幕 | 成人精品一区二区三区中文字幕 | 狠狠色噜噜狠狠狠狠7777米奇 | 天天躁日日躁狠狠躁免费麻豆 | 国产精品亚洲一区二区三区喷水 | 国产av无码专区亚洲awww | 男女下面进入的视频免费午夜 | 国产综合久久久久鬼色 | 欧美成人家庭影院 | 领导边摸边吃奶边做爽在线观看 | 欧美xxxxx精品 | 妺妺窝人体色www在线小说 | 国产人妻人伦精品 | 亚洲爆乳大丰满无码专区 | 波多野结衣一区二区三区av免费 | 日日麻批免费40分钟无码 | 领导边摸边吃奶边做爽在线观看 | 久久综合狠狠综合久久综合88 | 亚洲国产一区二区三区在线观看 | 欧美自拍另类欧美综合图片区 | 欧美阿v高清资源不卡在线播放 | 成人av无码一区二区三区 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 亚洲成av人片在线观看无码不卡 | 水蜜桃av无码 | 亚洲日韩av片在线观看 | 国产精品自产拍在线观看 | 欧美性黑人极品hd | 无码免费一区二区三区 | 高清国产亚洲精品自在久久 | 国产内射爽爽大片视频社区在线 | 无码吃奶揉捏奶头高潮视频 | 无码福利日韩神码福利片 | 2020最新国产自产精品 | 撕开奶罩揉吮奶头视频 | 色五月五月丁香亚洲综合网 | 成人免费无码大片a毛片 | 7777奇米四色成人眼影 | 日本免费一区二区三区最新 | 国产香蕉尹人综合在线观看 | 国产成人午夜福利在线播放 | 精品亚洲韩国一区二区三区 | 免费国产成人高清在线观看网站 | 天天综合网天天综合色 | 欧美人与动性行为视频 | 中文字幕+乱码+中文字幕一区 | 高潮毛片无遮挡高清免费视频 | 无码人妻丰满熟妇区五十路百度 | 欧美乱妇无乱码大黄a片 | 玩弄人妻少妇500系列视频 | 精品aⅴ一区二区三区 | 国产一区二区三区精品视频 | 日本护士毛茸茸高潮 | 女人和拘做爰正片视频 | 香港三级日本三级妇三级 | 西西人体www44rt大胆高清 | 亚洲色大成网站www | 色婷婷香蕉在线一区二区 | 国产高清不卡无码视频 | 中文字幕乱码中文乱码51精品 | 色综合久久中文娱乐网 | 久久午夜夜伦鲁鲁片无码免费 | 免费国产成人高清在线观看网站 | 丰满人妻翻云覆雨呻吟视频 | 熟女少妇在线视频播放 | 人妻插b视频一区二区三区 | 国产明星裸体无码xxxx视频 | 国产亚洲精品久久久ai换 | 国产成人无码av在线影院 | 无码av最新清无码专区吞精 | 亚洲欧美日韩成人高清在线一区 | 欧美老妇与禽交 | 西西人体www44rt大胆高清 | 久久综合色之久久综合 | 成熟妇人a片免费看网站 | 又紧又大又爽精品一区二区 | 日产精品高潮呻吟av久久 | 婷婷六月久久综合丁香 | 国产av一区二区三区最新精品 | 巨爆乳无码视频在线观看 | 国产精品18久久久久久麻辣 | 日日夜夜撸啊撸 | aⅴ亚洲 日韩 色 图网站 播放 | 成人av无码一区二区三区 | 国产熟妇另类久久久久 | 免费播放一区二区三区 | 最近中文2019字幕第二页 | www国产亚洲精品久久久日本 | 一本久久a久久精品vr综合 | 丰满人妻精品国产99aⅴ | 久久久久免费精品国产 | 国产欧美熟妇另类久久久 | 无码毛片视频一区二区本码 | 无码福利日韩神码福利片 | 狠狠色欧美亚洲狠狠色www | 性生交片免费无码看人 | 欧美精品无码一区二区三区 | 丰满肥臀大屁股熟妇激情视频 | 日韩欧美中文字幕公布 | 国产乱码精品一品二品 | 国产极品视觉盛宴 | 色婷婷综合激情综在线播放 | 国产精品毛多多水多 | 色综合天天综合狠狠爱 | 丝袜足控一区二区三区 | 久久久久99精品成人片 | 丝袜足控一区二区三区 | 在线天堂新版最新版在线8 | 狠狠综合久久久久综合网 | 奇米影视7777久久精品人人爽 | 亚洲国产精品久久久天堂 | 久久精品成人欧美大片 | 欧美日本精品一区二区三区 | 丰满少妇熟乱xxxxx视频 | 精品国产麻豆免费人成网站 | 免费视频欧美无人区码 | 中文字幕无码免费久久9一区9 | 亚洲国产成人a精品不卡在线 | 久久精品视频在线看15 | 人妻无码αv中文字幕久久琪琪布 | 男人的天堂2018无码 | 精品偷自拍另类在线观看 | 国产xxx69麻豆国语对白 | 内射老妇bbwx0c0ck | 亚洲の无码国产の无码影院 | 在线a亚洲视频播放在线观看 | 国产成人精品视频ⅴa片软件竹菊 | 国产精品自产拍在线观看 | 国产午夜亚洲精品不卡下载 | 国内精品人妻无码久久久影院 | 亚洲日韩乱码中文无码蜜桃臀网站 | 丰满少妇高潮惨叫视频 | 亚洲爆乳无码专区 | 日本熟妇浓毛 | 最新国产麻豆aⅴ精品无码 | 亚洲а∨天堂久久精品2021 | 人妻互换免费中文字幕 | 久久熟妇人妻午夜寂寞影院 | 国产亚洲日韩欧美另类第八页 | 一个人看的视频www在线 | 亚洲精品国产a久久久久久 | 亚洲午夜久久久影院 | 亚洲精品一区二区三区婷婷月 | 国产97人人超碰caoprom | 中文字幕av无码一区二区三区电影 | 自拍偷自拍亚洲精品被多人伦好爽 | 精品偷自拍另类在线观看 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 精品久久久久久人妻无码中文字幕 | 国产成人无码午夜视频在线观看 | 久久无码专区国产精品s | 亚洲狠狠婷婷综合久久 | 乱人伦中文视频在线观看 | 久久久久亚洲精品男人的天堂 | 国产精品美女久久久久av爽李琼 | 99国产精品白浆在线观看免费 |