亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? bootpart.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
 *          none specified.  
 *      dwNumSectors - Number of logical sectors of the partition.  USE_REMAINING_SPACE 
 *          to indicate to take up the rest of the space on the flash for that partition.
 *      dwPartType - Type of partition to create.
 *      fActive - TRUE indicates to create the active partition.  FALSE for
 *          inactive.
 *      dwPartIndex - Index of the partition entry on the MBR
 *
 *  EXIT
 *      Handle to the partition on success.  INVALID_HANDLE_VALUE on error.
 */

static HANDLE CreatePartition (DWORD dwStartSector, DWORD dwNumSectors, DWORD dwPartType, BOOL fActive, DWORD dwPartIndex)
{
    DWORD dwBootInd = 0;

    RETAILMSG(1, (TEXT("CreatePartition: Enter CreatePartition for 0x%x.\r\n"), dwPartType));
#if 0
    
    if (fActive)
        dwBootInd |= PART_IND_ACTIVE;
    if (dwPartType == PART_BOOTSECTION || dwPartType == PART_BINFS || dwPartType == PART_XIP)
        dwBootInd |= PART_IND_READ_ONLY;    

     // If start sector is invalid, it means find next free sector
    if (dwStartSector == NEXT_FREE_LOC) {        
        
        dwStartSector = FindFreeSector();
        if (dwStartSector == INVALID_ADDR) {
            RETAILMSG(1, (TEXT("CreatePartition: can't find free sector.\r\n")));
            return INVALID_HANDLE_VALUE;
        }

        // Start partitions on the next block if they are currently on the wrong block type.
        if (dwStartSector % g_FlashInfo.wSectorsPerBlock) {            
            DWORD dwBlock = dwStartSector / g_FlashInfo.wSectorsPerBlock;
            //if (IS_PART_READONLY(dwBootInd) != IS_BLOCK_READONLY(dwBlock)) {
                dwStartSector = (dwBlock+1) * g_FlashInfo.wSectorsPerBlock;
            //}
        }
    }
    if (IS_PART_READONLY(dwBootInd)) {

        // Allow read-only partitions to go to the end of disk, if requested.
        if (dwNumSectors == USE_REMAINING_SPACE) {

            DWORD dwLastLogSector = LastLogSector();
            if (dwLastLogSector == INVALID_ADDR)
                return INVALID_HANDLE_VALUE;

            dwNumSectors = dwLastLogSector - dwStartSector + 1;
        }
    }
    else {
        DWORD dwLastLogSector = LastLogSector();
        if (dwLastLogSector == INVALID_ADDR)
            return INVALID_HANDLE_VALUE;

        // Determine the number of blocks to reserve for the FAL compaction when creating an extended partition.
        DWORD dwReservedBlocks = g_FlashInfo.dwNumBlocks / PERCENTAGE_OF_MEDIA_TO_RESERVE;
        if((dwReservedBlocks = g_FlashInfo.dwNumBlocks / PERCENTAGE_OF_MEDIA_TO_RESERVE) < MINIMUM_FLASH_BLOCKS_TO_RESERVE) {
            dwReservedBlocks = MINIMUM_FLASH_BLOCKS_TO_RESERVE;
        }
        
        DWORD dwNumMaxSectors = dwLastLogSector - dwStartSector + 1 - dwReservedBlocks * g_FlashInfo.wSectorsPerBlock;

        // If dwNumSectors was provided, validate it isn't past the max.
        // If dwNumSectors is USE_REMAINING_SPACE, fill disk with max sectors.
        if ((dwNumSectors == USE_REMAINING_SPACE)  || (dwNumMaxSectors <  dwNumSectors)) {
            RETAILMSG(1, (TEXT("CreatePartition: Num sectors set to 0x%x to allow for compaction blocks.\r\n"), dwNumMaxSectors));
            dwNumSectors = dwNumMaxSectors ;    
        }
    //}

    
    if (!AreSectorsFree (dwStartSector, dwNumSectors)){
        RETAILMSG (1, (TEXT("CreatePartition: sectors [0x%x, 0x%x] requested are out of range or taken by another partition\r\n"), dwStartSector, dwNumSectors));
        return INVALID_HANDLE_VALUE;
    }
#endif

//	dwStartSector = (SPECIAL_AREA_START + 1)*SECTORS_PER_SUBLK;
	dwStartSector = (1)*SECTORS_PER_SUBLK;	// by hmseo-061209.. because bibdrv calculate the sector address by add with SPECIAL_AREA_START.
	
	RETAILMSG(1, (TEXT("CreatePartition: Start = 0x%x, Num = 0x%x.\r\n"), dwStartSector, dwNumSectors));

	AddPartitionTableEntry (dwPartIndex, dwStartSector, dwNumSectors, (BYTE)dwPartType, (BYTE)dwBootInd);

#if 0	// by hmseo - it is not fmd driver, therefore this WriteLogicalNumbers routine is not needed. 061124
    //if (IS_PART_READONLY(dwBootInd)) {
        if (!WriteLogicalNumbers (dwStartSector, dwNumSectors, TRUE)) {
            RETAILMSG(1, (TEXT("CreatePartition: can't mark sector info.\r\n")));
            return INVALID_HANDLE_VALUE;
        }
    //}
#endif

    if (!WriteMBR())
        return INVALID_HANDLE_VALUE;

    g_partStateTable[dwPartIndex].pPartEntry = (PPARTENTRY)(g_pbMBRSector + PARTTABLE_OFFSET + sizeof(PARTENTRY)*dwPartIndex);
    g_partStateTable[dwPartIndex].dwDataPointer = 0;

    return (HANDLE)&g_partStateTable[dwPartIndex];            
}


/*  BP_ReadData
 *
 *  Reads data from the partition starting at the data pointer.  Call fails
 *  if length of the buffer is too long (i.e. trying to read past the end
 *  of the partition)
 *
 *  ENTRY
 *      hPartition - handle to the partition
 *      pbBuffer - pointer to buffer of data to read
 *      dwLength - number of bytes to read
 *
 *  EXIT
 *      TRUE on success
 */
BOOL BP_ReadData(HANDLE hPartition, LPBYTE pbBuffer, DWORD dwLength)
{
    if (hPartition == INVALID_HANDLE_VALUE)
        return FALSE;
    
    DWORD dwNumSects;
    static LPBYTE pbSector = g_pbBlock;
    PPARTSTATE pPartState = (PPARTSTATE) hPartition;
    DWORD dwNextPtrValue = pPartState->dwDataPointer + dwLength;

    if (!pbBuffer || !pbSector || dwLength == 0)
        return(FALSE);

    // RETAILMSG(1,(TEXT("ReadData: Start = 0x%x, Length = 0x%x.\r\n"), pPartState->dwDataPointer, dwLength));

    // Check to make sure buffer size is within limits of partition
    if (((dwNextPtrValue - 1) / g_FlashInfo.wDataBytesPerSector) >= pPartState->pPartEntry->Part_TotalSectors) {
        RETAILMSG (1, (TEXT("ReadData: trying to read past end of partition.\r\n")));
        return FALSE;
    }

    // Get the starting physical sector
    DWORD dwSectorAddr = Log2Phys (pPartState->dwDataPointer / g_FlashInfo.wDataBytesPerSector + pPartState->pPartEntry->Part_StartSector);
    DWORD dwSector0 = dwSectorAddr;
    DWORD dwLen0 = dwLength;
    LPBYTE pbBuf0 = pbBuffer;

    // If current pointer is not on a sector boundary, copy bytes up to the first sector boundary
    DWORD dwOffsetSector = pPartState->dwDataPointer % g_FlashInfo.wDataBytesPerSector;
    if (dwOffsetSector)
    {
        if (!FMD_ReadSector(dwSectorAddr, pbSector, NULL, 1))
        {
            RETAILMSG (1, (TEXT("ReadData: failed to read sector (0x%x).\r\n"), dwSectorAddr));
            return(FALSE);
        }
        
        DWORD dwNumBytesRead = g_FlashInfo.wDataBytesPerSector - dwOffsetSector;
        if (dwNumBytesRead > dwLength)
            dwNumBytesRead = dwLength;
        
        memcpy(pbBuffer, pbSector + dwOffsetSector, dwNumBytesRead);   
        dwLength -= dwNumBytesRead;
        pbBuffer += dwNumBytesRead;
        dwSectorAddr++;
    }

    // Compute sector length.
    dwNumSects = (dwLength / g_FlashInfo.wDataBytesPerSector);

	if (dwNumSects)
		FMD_ReadSector(dwSectorAddr, pbBuffer, NULL, dwNumSects);

    DWORD dwNumExtraBytes = (dwLength % g_FlashInfo.wDataBytesPerSector);
    if (dwNumExtraBytes)
    {
    	dwSectorAddr += dwNumSects;
    	pbBuffer += dwNumSects*g_FlashInfo.wDataBytesPerSector;
        if (!FMD_ReadSector(dwSectorAddr, pbSector, NULL, 1))
        {
            RETAILMSG (1, (TEXT("ReadData: failed to read sector (0x%x).\r\n"), dwSectorAddr));
            return(FALSE);
        }
        memcpy(pbBuffer, pbSector, dwNumExtraBytes);
    }

#if 0    
    //dump if inside 10 sectors
    if (pPartState->dwDataPointer < 10*512) {
    	RETAILMSG(1, (L"BP_ReadData: StartSector=0x%x, SectorOffset=0x%x, Leghth=0x%x",
    		dwSector0, dwOffsetSector, dwLen0));

    	DWORD dwAddr = pPartState->dwDataPointer;
    	DWORD dwOffset16 = dwOffsetSector % 16;
    	DWORD i;

    	if (dwOffset16 != 0) {
    		dwAddr -= dwOffset16;
    		RETAILMSG(1, (L"\r\nSector=0x%x(0x%x)",
    			dwSector0 + (dwAddr / 512),
    			(dwSector0 + (dwAddr / 512))*512));
    		RETAILMSG(1, (L"\r\n%x%x%x%x: ", (dwAddr >> 12) & 0x0f, (dwAddr >> 8) & 0x0f,
    				(dwAddr >> 4) & 0x0f, dwAddr & 0x0f));
    		for (i = 0; i < dwOffset16; i++, dwAddr++)
    			RETAILMSG(1, (L"__ "));
    	}
    		    		
    	for (i = 0; i < dwLen0; i++, dwAddr++) {
    		if ((dwAddr % 16) == 0) {
    			if ((dwAddr % 512) == 0)
    				RETAILMSG(1, (L"\r\nSector=0x%x(0x%x)",
    					dwSector0 + (dwAddr / 512),
    					(dwSector0 + (dwAddr / 512))*512));
    			RETAILMSG(1, (L"\r\n%x%x%x%x: ", (dwAddr >> 12) & 0x0f, (dwAddr >> 8) & 0x0f,
    				(dwAddr >> 4) & 0x0f, dwAddr & 0x0f));
    		}
    		RETAILMSG(1, (L"%x%x ", (pbBuf0[i] >> 4) & 0x0f, pbBuf0[i] & 0x0f));
    	}
    	
    	RETAILMSG(1, (L"\r\n"));
    }
#endif

    pPartState->dwDataPointer = dwNextPtrValue;
    return(TRUE);
}

/*  BP_WriteData
 *
 *  Writes data to the partition starting at the data pointer.  Call fails
 *  if length of the buffer is too long (i.e. trying to write past the end
 *  of the partition)
 *
 *  ENTRY
 *      hPartition - handle to the partition
 *      pbBuffer - pointer to buffer of data to write
 *      dwLength - length in bytes of the buffer
 *
 *  EXIT
 *      TRUE on success
 */

BOOL BP_WriteData(HANDLE hPartition, LPBYTE pbBuffer, DWORD dwLength)
{
	if (hPartition == INVALID_HANDLE_VALUE)
		return FALSE;

	DWORD dwNumSects;
	static LPBYTE pbSector = g_pbBlock;
	PPARTSTATE pPartState = (PPARTSTATE) hPartition;
	DWORD dwNextPtrValue = pPartState->dwDataPointer + dwLength;

	if (!pbBuffer || !pbSector || dwLength == 0)
		return(FALSE);

	RETAILMSG (1, (TEXT("BP_WriteData: Start = 0x%x, Length = 0x%x.\r\n"), pPartState->dwDataPointer, dwLength));

	// Check to make sure buffer size is within limits of partition
	if (((dwNextPtrValue - 1) / g_FlashInfo.wDataBytesPerSector) >= pPartState->pPartEntry->Part_TotalSectors) {
		RETAILMSG (1, (TEXT("ReadData: trying to read past end of partition.(Part_TotalSectors = 0x%x)\r\n"), pPartState->pPartEntry->Part_TotalSectors));
		return FALSE;
	}

	// Get the starting physical sector
//	DWORD dwSectorAddr = Log2Phys (pPartState->dwDataPointer / g_FlashInfo.wDataBytesPerSector + pPartState->pPartEntry->Part_StartSector);
//    DWORD dwSectorAddr = 0;	// hmseo-061124
//	RETAILMSG (1, (TEXT("BP_WriteData: pPartState->pPartEntry->Part_StartSector = 0x%x.\r\n"), pPartState->pPartEntry->Part_StartSector));
//	DWORD dwSectorAddr = pPartState->dwDataPointer / BYTES_PER_SECTOR + pPartState->pPartEntry->Part_StartSector;	// hmseo-061124
	DWORD dwSectorAddr = (pPartState->dwDataPointer / BYTES_PER_SECTOR);	// hmseo-061124

	// If current pointer is not on a sector boundary, copy bytes up to the first sector boundary
	DWORD dwOffsetSector = pPartState->dwDataPointer % g_FlashInfo.wDataBytesPerSector;

	RETAILMSG (1, (TEXT("BP_WriteData: dwSectorAddr = 0x%x, dwOffsetSector = 0x%x.\r\n"), dwSectorAddr, dwOffsetSector));

	if (dwOffsetSector)
	{
		if (!FMD_ReadSector(dwSectorAddr, pbSector, NULL, SECTORS_PER_SUPAGE))
		{
			RETAILMSG (1, (TEXT("WriteData: failed to read sector (0x%x).\r\n"), dwSectorAddr));
			return(FALSE);
		}

		DWORD dwNumBytesWrite = g_FlashInfo.wDataBytesPerSector - dwOffsetSector;
		if (dwNumBytesWrite > dwLength)
			dwNumBytesWrite = dwLength;

		memcpy(pbSector + dwOffsetSector, pbBuffer, dwNumBytesWrite);   
		dwLength -= dwNumBytesWrite;
		pbBuffer += dwNumBytesWrite;

		if (!FMD_WriteSector(dwSectorAddr, pbSector, NULL, SECTORS_PER_SUPAGE))
		{
			RETAILMSG(1, (TEXT("WriteData: faild to write sector (0x%x).\r\n"), dwSectorAddr));
			return(FALSE);
		}

		dwSectorAddr+=SECTORS_PER_SUPAGE;
	}

	// Compute sector length.
//	dwNumSects = (dwLength / g_FlashInfo.wDataBytesPerSector);	// by hmseo
	dwNumSects = (dwLength / (BYTES_PER_SECTOR*SECTORS_PER_SUPAGE) * SECTORS_PER_SUPAGE);

	RETAILMSG (1, (TEXT("BP_WriteData: dwNumSects = 0x%x\r\n"), dwNumSects));

	if (dwNumSects)
	{
		INT32   nErr;
		UINT32  nVol = 0;
		UINT32	nPercent = 0;
		UINT32	nCnt;

//		for(dwSectorAddr = 0; dwSectorAddr < dwNumSects; dwSectorAddr+=4)
		for(nCnt = 0; nCnt < dwNumSects; nCnt+=SECTORS_PER_SUPAGE)
		{
			nErr = FMD_WriteSector(dwSectorAddr+nCnt, pbBuffer, NULL, SECTORS_PER_SUPAGE);
			if(nErr != TRUE)
			{
				RETAILMSG(1, (L"[ONW: ERR]  FMD_WriteSector Error at %d sector\r\n", dwSectorAddr));
				while(1);
			}		
			pbBuffer += (BYTES_PER_SECTOR*SECTORS_PER_SUPAGE);
		}
	}

//	DWORD dwNumExtraBytes = (dwLength % g_FlashInfo.wDataBytesPerSector);
	DWORD dwNumExtraBytes = (dwLength % (BYTES_PER_SECTOR*SECTORS_PER_SUPAGE));
	
	RETAILMSG (1, (TEXT("BP_WriteData: dwNumExtraBytes = 0x%x\r\n"), dwNumExtraBytes));

	if (dwNumExtraBytes)
	{
		RETAILMSG (1, (TEXT("BP_WriteData: dwSectorAddr = 0x%x\r\n"), dwSectorAddr));
		RETAILMSG (1, (TEXT("BP_WriteData: dwNumSects = 0x%x\r\n"), dwNumSects));
		
		dwSectorAddr += dwNumSects;
//		pbBuffer += dwNumSects*g_FlashInfo.wDataBytesPerSector;

		RETAILMSG (1, (TEXT("BP_WriteData: dwSectorAddr = 0x%x\r\n"), dwSectorAddr));
		RETAILMSG (1, (TEXT("BP_WriteData: pbBuffer = 0x%x\r\n"), pbBuffer));

		if (!FMD_ReadSector(dwSectorAddr, pbSector, NULL, SECTORS_PER_SUPAGE))
		{
			RETAILMSG (1, (TEXT("WriteData: failed to read sector (0x%x).\r\n"), dwSectorAddr));
			return(FALSE);
		}
		memcpy(pbSector, pbBuffer, dwNumExtraBytes);

		if (!FMD_WriteSector(dwSectorAddr, pbSector, NULL, SECTORS_PER_SUPAGE))
		{
			RETAILMSG(1, (TEXT("WriteData: failed to read sector (0x%x).\r\n"), dwSectorAddr));
			return(FALSE);
		}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲同性同志一二三专区| 欧美图区在线视频| 精品三级在线看| 国内一区二区视频| 久久久精品tv| 99视频精品免费视频| 亚洲综合在线免费观看| 欧美性大战久久久久久久蜜臀| 国产盗摄女厕一区二区三区| 国产精品国产精品国产专区不片| 91玉足脚交白嫩脚丫在线播放| 亚洲国产综合视频在线观看| 91精品婷婷国产综合久久竹菊| 另类综合日韩欧美亚洲| 久久精品日韩一区二区三区| 不卡的av在线播放| 欧美一卡2卡三卡4卡5免费| 香蕉久久夜色精品国产使用方法| 欧美丰满少妇xxxxx高潮对白| 久久不见久久见中文字幕免费| 久久亚洲一级片| 色呦呦一区二区三区| 日韩精品一级中文字幕精品视频免费观看| 精品国产一区二区三区四区四| 成人动漫精品一区二区| 婷婷成人激情在线网| 欧美精品一区二| 91黄视频在线| 国产精品一区不卡| 亚洲成人av一区二区三区| 久久免费午夜影院| 欧美视频一区二| 国产成人免费高清| 午夜视频在线观看一区二区 | 欧美人成免费网站| 韩国av一区二区三区| 亚洲精品第一国产综合野| 欧美成人精精品一区二区频| 色综合天天天天做夜夜夜夜做| 99视频在线精品| 麻豆精品蜜桃视频网站| 亚洲精品中文在线| 久久久噜噜噜久久中文字幕色伊伊| 欧美中文字幕亚洲一区二区va在线| 久久精品国产精品亚洲红杏| 亚洲精品美腿丝袜| 国产精品免费观看视频| 欧美一区二区不卡视频| 欧洲中文字幕精品| 成人av网站在线观看免费| 精品在线一区二区三区| 性感美女久久精品| 伊人性伊人情综合网| 日本一区二区三区在线不卡 | 日韩av网站在线观看| 自拍偷自拍亚洲精品播放| 久久久久久久久久久久久女国产乱| 欧美日韩一区二区电影| 色婷婷综合五月| av影院午夜一区| 成人福利视频在线看| 国产乱对白刺激视频不卡| 久久精品国产亚洲一区二区三区| 亚洲成av人片www| 亚洲图片一区二区| 亚洲乱码国产乱码精品精98午夜| 国产精品不卡在线观看| 中文字幕av资源一区| 国产视频一区在线播放| ww亚洲ww在线观看国产| 精品国产三级电影在线观看| 91精品福利在线一区二区三区| 欧美丰满一区二区免费视频 | 日本久久电影网| 91麻豆自制传媒国产之光| 日韩欧美成人激情| 日韩欧美色综合网站| 欧美不卡一区二区三区四区| 日韩三级视频中文字幕| 日韩精品影音先锋| 欧美xxxxx牲另类人与| 精品国产乱码久久久久久夜甘婷婷| 欧美一级夜夜爽| 精品国产一区二区亚洲人成毛片| 精品国免费一区二区三区| 久久久久久久网| 国产精品日韩精品欧美在线| 国产精品福利影院| 亚洲精品免费一二三区| 天堂一区二区在线免费观看| 免费人成黄页网站在线一区二区 | 欧美激情在线观看视频免费| 国产欧美日韩三级| 日韩毛片一二三区| 一区二区三区四区在线免费观看 | 免费在线观看视频一区| 精品一二三四在线| 成人av午夜电影| 欧美天天综合网| 日韩免费视频线观看| 国产欧美视频在线观看| 亚洲男女一区二区三区| 日韩和欧美一区二区| 国产在线不卡视频| 99久久国产免费看| 欧美巨大另类极品videosbest| 欧美一区二区三区免费大片| 国产亚洲欧美色| 亚洲一区二区三区爽爽爽爽爽| 秋霞av亚洲一区二区三| 成人精品鲁一区一区二区| 在线免费观看不卡av| 日韩欧美国产三级| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 一区二区三区电影在线播| 美女视频第一区二区三区免费观看网站 | 国产精品人成在线观看免费| 亚洲午夜私人影院| 国产精品1区2区| 欧美日韩国产综合久久| 久久嫩草精品久久久精品一| 一区二区三区精品久久久| 精品亚洲成a人| 色婷婷综合久久| 久久久综合视频| 亚洲sss视频在线视频| 成人精品一区二区三区中文字幕 | 日韩欧美成人激情| 一区二区三区四区精品在线视频| 精品一二三四区| 欧美日韩一二三| 亚洲欧洲一区二区在线播放| 久草精品在线观看| 欧美日韩小视频| 国产精品视频一二三| 老司机午夜精品| 欧美日韩在线三区| 亚洲视频免费观看| 国产成人精品一区二| 日韩免费视频线观看| 亚洲国产精品久久艾草纯爱 | 亚洲电影欧美电影有声小说| 成人激情午夜影院| 久久久久久久久久久99999| 日韩黄色小视频| 欧美日韩一二区| 亚洲精品一二三| 99在线精品一区二区三区| 久久久久亚洲蜜桃| 美国毛片一区二区三区| 欧美嫩在线观看| 亚洲一区二区在线播放相泽| 色婷婷综合久久久久中文| 国产精品久久久久久久久久免费看| 狠狠网亚洲精品| 日韩欧美中文字幕制服| 天天色图综合网| 欧美日本在线观看| 亚洲大片精品永久免费| 欧美私模裸体表演在线观看| 亚洲免费三区一区二区| 91污在线观看| 亚洲日本在线天堂| 一本到三区不卡视频| 综合av第一页| 精品美女一区二区| 久久国产乱子精品免费女| 欧美www视频| 韩国女主播一区| 久久精品亚洲一区二区三区浴池| 国产在线不卡一区| 国产女主播一区| 99国产精品一区| 亚洲精品ww久久久久久p站| 欧日韩精品视频| 天天综合日日夜夜精品| 日韩精品一区二区三区在线观看 | 日本免费新一区视频| 欧美一卡二卡三卡| 国产在线播放一区| 日本一区二区三区久久久久久久久不| 国产精品亚洲一区二区三区在线| 国产欧美精品一区二区色综合朱莉| 国产不卡在线一区| 亚洲男人的天堂网| 欧美伦理影视网| 国产在线精品一区二区夜色| 欧美国产综合色视频| 日本精品一区二区三区高清| 午夜一区二区三区在线观看| 欧美成人在线直播| 成人伦理片在线| 亚洲自拍都市欧美小说| 日韩一区二区精品葵司在线| 国产精品一区一区| 亚洲视频中文字幕| 在线不卡中文字幕播放| 国产夫妻精品视频| 一区二区三区四区激情| 日韩免费视频一区|