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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? filebackupe.h

?? 實時文件備份
?? H
?? 第 1 頁 / 共 5 頁
字號:
		}

		inline void PostMessage(UINT nMsg, WPARAM wParam, LPARAM lParam) { m_objMessageQueue.PostMessage(nMsg, wParam, lParam); }

		inline BOOL SetPriority(int nPriority)
		{
			return m_pThread ? m_pThread->SetThreadPriority(nPriority) : FALSE;
		}

		inline BOOL IsThreadAvailable() const { return m_pThread != NULL; }

	protected:
		static UINT DummyThreadProc(CWorkerThreadWrapper* pThis);

		inline BOOL GetFirstMessage(UINT& nMsg, WPARAM& wParam, LPARAM& lParam) { return m_objMessageQueue.GetFirstMessage(nMsg, wParam, lParam); }
		inline HANDLE GetSemaphore() const { return m_objMessageQueue.GetSemaphore(); }

	protected:
		AFX_THREADPROC				m_pfnThreadProc;
		LPVOID						m_lParam;

		CWinThread*					m_pThread;
		CMessageQueue				m_objMessageQueue;
	};

	class CDatabaseAccessThread;

	class CFileChangesHandler : public CWorkerThreadWrapper
	{
	public:
		inline CFileChangesHandler(LPFILEBACKUP_CALLBACK pCallback, CDatabaseAccessThread* pDatabaseAccessThread) : CWorkerThreadWrapper(), m_pCallback(pCallback), m_pDatabassAccessThread(pDatabaseAccessThread), m_fIsLogging(FALSE), m_hVxD(INVALID_HANDLE_VALUE)
		{
			m_arrayHandleBank[0] = GetSemaphore();
			m_nHandleNumber = 1;
		}

		virtual BOOL InitInstance();
		virtual DWORD ExitInstance();

		inline BOOL CreateThread(int nPriority = THREAD_PRIORITY_BELOW_NORMAL)
		{
			return CWorkerThreadWrapper::CreateThread((AFX_THREADPROC)(CFileBackupE::m_objInitObject.IsNT() ? CFileChangesHandler::WinNTFileChangesHandlerThreadProc : CFileChangesHandler::Win9xFileChangesHandlerThreadProc), this, nPriority);
		}

		inline DWORD TerminateThread(DWORD dwTimeout = 5000)
		{
			if ( m_pThread )
			{
				MESSAGE_RESULT objResult;
				DWORD dwWaitResult;

				if ( (objResult.m_hFinishedEvent = CreateEvent(NULL, TRUE, FALSE, NULL)) == NULL )
					AfxThrowResourceException();
				CWorkerThreadWrapper::PostMessage(UWM_DESTROY_WORKERTHREAD, (WPARAM)&objResult, NULL);
				if ( (dwWaitResult = WaitForSingleObject(objResult.m_hFinishedEvent, dwTimeout)) != WAIT_OBJECT_0 )
				{
					CloseHandle(objResult.m_hFinishedEvent);
					m_pThread = NULL;
					return dwWaitResult;
				}
				else
				{
					CloseHandle(objResult.m_hFinishedEvent);
					m_pThread = NULL;
					return objResult.m_dwResult;
				}
			}
			else
				return ERROR_ACCESS_DENIED;
		}

		inline DWORD StartLogging(CFileFilter* pFileFilter, DWORD dwTimeout = 500)
		{
			if ( !pFileFilter )
				return ERROR_INVALID_PARAMETER;
			else if ( m_pThread )
			{
				MESSAGE_RESULT objResult;
				DWORD dwWaitResult;

				if ( m_fIsLogging )
					StopLogging(dwTimeout);

				if ( (objResult.m_hFinishedEvent = CreateEvent(NULL, TRUE, FALSE, NULL)) == NULL )
					AfxThrowResourceException();
				CWorkerThreadWrapper::PostMessage(UWM_START_LOGGING_FILE_CHANGES, (WPARAM)&objResult, (LPARAM)pFileFilter);
				if ( (dwWaitResult = WaitForSingleObject(objResult.m_hFinishedEvent, dwTimeout)) != WAIT_OBJECT_0 )
				{
					CloseHandle(objResult.m_hFinishedEvent);
					return dwWaitResult;
				}
				else
				{
					CloseHandle(objResult.m_hFinishedEvent);
					return objResult.m_dwResult;
				}
			}
			else
				return ERROR_ACCESS_DENIED;
		}

		inline DWORD StopLogging(DWORD dwTimeout = 500)
		{
			if ( m_pThread )
			{
				MESSAGE_RESULT objResult;
				DWORD dwWaitResult;

				if ( (objResult.m_hFinishedEvent = CreateEvent(NULL, TRUE, FALSE, NULL)) == NULL )
					AfxThrowResourceException();
				CWorkerThreadWrapper::PostMessage(UWM_STOP_LOGGING_FILE_CHANGES, (WPARAM)&objResult, NULL);
				if ( (dwWaitResult = WaitForSingleObject(objResult.m_hFinishedEvent, dwTimeout)) != WAIT_OBJECT_0 )
				{
					CloseHandle(objResult.m_hFinishedEvent);
					return dwWaitResult;
				}
				else
				{
					CloseHandle(objResult.m_hFinishedEvent);
					return objResult.m_dwResult;
				}
			}
			else
				return ERROR_ACCESS_DENIED;
		}

		inline DWORD SetFileFilter(CFileFilter* pFileFilter, DWORD dwTimeout = 500) { return StartLogging(pFileFilter, dwTimeout); }

	protected:
		static UINT Win9xFileChangesHandlerThreadProc(CFileChangesHandler* pThis);
		static UINT WinNTFileChangesHandlerThreadProc(CFileChangesHandler* pThis);

		inline DWORD Win9xStartLoggingFileChanges(CFileFilter* pFileFilter)
		{
			CFileFilter::CParsedPathItem *pDriveItem, *pItem;
			CString csBasePath;
			TCHAR tsShortPathname[MAX_PATH];
			int nShortPathnameLength;

			if ( m_fIsLogging )
				Win9xStopLoggingFileChanges();
#if 0
			DWORD dwDataBufferLength;

			dwDataBufferLength = 0;
			pDriveItem = pFileFilter->GetFirstAvailableDrive();
			while ( pDriveItem )
				if ( pFileFilter->GetNextAvailableDriveBasePath(pDriveItem, csBasePath, pItem) )
				{
					CreateDirectory(csBasePath, NULL);
					dwDataBufferLength += csBasePath.GetLength() + GetShortPathName((LPCTSTR)csBasePath, tsShortPathname, sizeof(tsShortPathname)) + 2;
				}
			if ( dwDataBufferLength )
			{
	#ifndef UNICODE
				char* pBuf = new char[++dwDataBufferLength];
				PCHAR pChar = pBuf;
	#else
				char* pBuf = new char[++dwDataBufferLength * sizeof(WCHAR)];
				int nCharCount = 0;
	#endif

				pDriveItem = pFileFilter->GetFirstAvailableDrive();
				while ( pDriveItem )
				{
					if ( pFileFilter->GetNextAvailableDriveBasePath(pDriveItem, csBasePath, pItem) )
					{
	#ifndef UNICODE
						strcpy(pChar, (LPCTSTR)csBasePath);
						pChar += csBasePath.GetLength() + 1;
						if ( (nShortPathnameLength = ::GetShortPathName((LPCTSTR)csBasePath, tsShortPathname, sizeof(tsShortPathname))) != 0 )
						{
							strcpy(pChar, tsShortPathname);
							pChar += nShortPathnameLength + 1;
						}
						else
							*pChar++ = NULL;
	#else
						nCharCount += ::WideCharToMultiByte(CP_THREAD_ACP, 0, (LPCTSTR)csBasePath, csBasePath.GetLength() + 1, pBuf + nCharCount, dwDataBufferLength * sizeof(WCHAR) - nCharCount, NULL, NULL);
						if ( (nShortPathnameLength = ::GetShortPathName((LPCTSTR)csBasePath, tsShortPathname, sizeof(tsShortPathname))) != 0 )
							nCharCount += ::WideCharToMultiByte(CP_THREAD_ACP, 0, tsShortPathname, nShortPathnameLength + 1, pBuf + nCharCount, dwDataBufferLength * sizeof(WCHAR) - nCharCount, NULL, NULL);
						else
							pBuf[nCharCount++] = NULL;
	#endif
					}
				}
	#ifndef UNICODE
				*pChar++ = NULL;
	#else
				pBuf[nCharCount++] = NULL;
	#endif

				if ( DeviceIoControl(m_hVxD, DIRMON_StartLogging, pBuf, dwDataBufferLength, NULL, 0, NULL, NULL) )
				{
					if ( (m_arrayHandleBank[1] = m_arrayAccessoryBank[1].m_objOverlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL)) != NULL )
					{
						m_arrayAccessoryBank[1].m_pBuffer = CLargeBufferBlockBank::Allocate();
						if ( DeviceIoControl(m_hVxD, DIRMON_ReadChange, NULL, 0, m_arrayAccessoryBank[1].m_pBuffer, CLargeBufferBlockBank::GetBlockSize(), NULL, &m_arrayAccessoryBank[1].m_objOverlapped) )
						{
							m_arrayAccessoryBank[1].m_pParsedPathItemPointer = pItem;
							m_arrayAccessoryBank[1].m_csPath = csBasePath;
							m_nHandleNumber = 2;
						}
						else
						{
							DeviceIoControl(m_hVxD, DIRMON_StopLogging, NULL, 0, NULL, 0, NULL, NULL);
							CloseHandle(m_arrayAccessoryBank[1].m_objOverlapped.hEvent);
							CLargeBufferBlockBank::Free(m_arrayAccessoryBank[1].m_pBuffer);
						}
					}
					else
						DeviceIoControl(m_hVxD, DIRMON_StopLogging, NULL, 0, NULL, 0, NULL, NULL);
				}

				delete[] pBuf;
			}
#else
			char pBuf[MAX_PATH * 26 * 2];
			char* pChar = pBuf;

			pDriveItem = pFileFilter->GetFirstAvailableDrive();
			while ( pDriveItem )
				if ( pFileFilter->GetNextAvailableDriveBasePath(pDriveItem, csBasePath, pItem) )
				{
					CreateDirectory(csBasePath, NULL);
	#ifndef UNICODE
					strcpy(pChar, (LPCTSTR)csBasePath);
					pChar += csBasePath.GetLength() + 1;
					if ( (nShortPathnameLength = ::GetShortPathName((LPCTSTR)csBasePath, tsShortPathname, sizeof(tsShortPathname))) != 0 )
					{
						strcpy(pChar, tsShortPathname);
						pChar += nShortPathnameLength + 1;
					}
					else
						*pChar++ = NULL;
	#else
					pChar += ::WideCharToMultiByte(CP_THREAD_ACP, 0, (LPCTSTR)csBasePath, csBasePath.GetLength() + 1, pChar, sizeof(pBuf) - (pChar - pBuf), NULL, NULL);
					if ( (nShortPathnameLength = ::GetShortPathName((LPCTSTR)csBasePath, tsShortPathname, sizeof(tsShortPathname))) != 0 )
						pChar += ::WideCharToMultiByte(CP_THREAD_ACP, 0, tsShortPathname, nShortPathnameLength + 1, pChar, sizeof(pBuf) - (pChar - pBuf), NULL, NULL);
					else
						*pChar++ = NULL;
	#endif
				}

			if ( pChar != pBuf )
			{
				*pChar++ = NULL;
				if ( DeviceIoControl(m_hVxD, DIRMON_StartLogging, pBuf, pChar - pBuf, NULL, 0, NULL, NULL) )
				{
					if ( (m_arrayHandleBank[1] = m_arrayAccessoryBank[1].m_objOverlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL)) != NULL )
					{
						m_arrayAccessoryBank[1].m_pBuffer = CLargeBufferBlockBank::Allocate();
						if ( DeviceIoControl(m_hVxD, DIRMON_ReadChange, NULL, 0, m_arrayAccessoryBank[1].m_pBuffer, CLargeBufferBlockBank::GetBlockSize(), NULL, &m_arrayAccessoryBank[1].m_objOverlapped) )
						{
							m_arrayAccessoryBank[1].m_pParsedPathItemPointer = pItem;
							m_arrayAccessoryBank[1].m_csPath = csBasePath;
							m_nHandleNumber = 2;
						}
						else
						{
							DeviceIoControl(m_hVxD, DIRMON_StopLogging, NULL, 0, NULL, 0, NULL, NULL);
							CloseHandle(m_arrayAccessoryBank[1].m_objOverlapped.hEvent);
							CLargeBufferBlockBank::Free(m_arrayAccessoryBank[1].m_pBuffer);
						}
					}
					else
						DeviceIoControl(m_hVxD, DIRMON_StopLogging, NULL, 0, NULL, 0, NULL, NULL);
				}
			}
#endif
			if ( m_nHandleNumber > 1 )
			{
				m_pFileFilter = pFileFilter;
				m_fIsLogging = TRUE;
				return ERROR_SUCCESS;
			}
			else
				return ERROR_NOT_READY;
		}

		inline DWORD Win9xStopLoggingFileChanges()
		{
			if ( m_fIsLogging )
			{
				DWORD dwRet = ERROR_SUCCESS;

				//	Actually, it's not necessary to call CancelReadChange, because StopLogging does it automatically.
				//	Keep this line just for more clear process.
				if ( !DeviceIoControl(m_hVxD, DIRMON_CancelReadChange, NULL, 0, NULL, 0, NULL, NULL) )
					dwRet = GetLastError();
				if ( !DeviceIoControl(m_hVxD, DIRMON_StopLogging, NULL, 0, NULL, 0, NULL, NULL) )
					dwRet = GetLastError();
				if ( !CloseHandle(m_arrayAccessoryBank[1].m_objOverlapped.hEvent) )
					dwRet = GetLastError();
				m_arrayAccessoryBank[1].m_csPath.Empty();
				CLargeBufferBlockBank::Free(m_arrayAccessoryBank[1].m_pBuffer);

				m_nHandleNumber = 1;
				m_fIsLogging = FALSE;

				return dwRet;
			}
			else
				return ERROR_SUCCESS;
		}

		inline DWORD WinNTStartLoggingFileChanges(CFileFilter* pFileFilter)
		{
			CFileFilter::CParsedPathItem *pDriveItem, *pItem;
			CString csBasePath;

			if ( m_fIsLogging )
				WinNTStopLoggingFileChanges();

			pDriveItem = pFileFilter->GetFirstAvailableDrive();
			while ( pDriveItem )
			{
				if ( pFileFilter->GetNextAvailableDriveBasePath(pDriveItem, csBasePath, pItem) )
				{
					CreateDirectory(csBasePath, NULL);
					if ( (m_arrayAccessoryBank[m_nHandleNumber].m_hFile = CreateFile(csBasePath, FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, NULL))
						== INVALID_HANDLE_VALUE )
						continue;
					if ( (m_arrayHandleBank[m_nHandleNumber] = m_arrayAccessoryBank[m_nHandleNumber].m_objOverlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL))
						== NULL )
					{
						CloseHandle(m_arrayAccessoryBank[m_nHandleNumber].m_hFile);
						continue;
					}
					m_arrayAccessoryBank[m_nHandleNumber].m_pBuffer = CLargeBufferBlockBank::Allocate();
					if ( !ReadDirectoryChangesW(m_arrayAccessoryBank[m_nHandleNumber].m_hFile, m_arrayAccessoryBank[m_nHandleNumber].m_pBuffer, CLargeBufferBlockBank::GetBlockSize(), TRUE, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_LAST_WRITE, NULL, &m_arrayAccessoryBank[m_nHandleNumber].m_objOverlapped, NULL) )
					{
						CloseHandle(m_arrayAccessoryBank[m_nHandleNumber].m_hFile);
						CloseHandle(m_arrayAccessoryBank[m_nHandleNumber].m_objOverlapped.hEvent);
						CLargeBufferBlockBank::Free(m_arrayAccessoryBank[m_nHandleNumber].m_pBuffer);
						continue;
					}
					m_arrayAccessoryBank[m_nHandleNumber].m_pParsedPathItemPointer = pItem;
					m_arrayAccessoryBank[m_nHandleNumber].m_csPath = csBasePath;
					m_nHandleNumber++;
				}
			}
			if ( m_nHandleNumber > 1 )
			{
				m_pFileFilter = pFileFilter;
				m_fIsLogging = TRUE;
				return ERROR_SUCCESS;
			}
			else
				return ERROR_NOT_READY;
		}

		inline DWORD WinNTStopLoggingFileChanges()
		{
			if ( m_fIsLogging )
			{
				DWORD dwRet = ERROR_SUCCESS;
				int i;

				for ( i = 1; i < m_nHandleNumber; i++ )
				{
					if ( !CancelIo(m_arrayAccessoryBank[i].m_hFile) )
						dwRet = GetLastError();
					if ( !CloseHandle(m_arrayAccessoryBank[i].m_hFile) )
						dwRet = GetLastError();
					if ( !CloseHandle(m_arrayAccessoryBank[i].m_objOverlapped.hEvent) )
						dwRet = GetLastError();
					m_arrayAccessoryBank[i].m_csPath.Empty();
					CLargeBufferBlockBank::Free(m_arrayAccessoryBank[i].m_pBuffer);
				}

				m_nHandleNumber = 1;
				m_fIsLogging = FALSE;

				return dwRet;
			}
			else
				return ERROR_SUCCESS;
		}

		struct __tag_SpecialParamForWinNTHandleDirectoryNameChange
		{
			LPWSTR							pStringBuffer1;
			LPTSTR							pStringBuffer2;
			LPFILEBACKUP_CALLBACK			pCallback;
			LPVOID*							ppPostDataPage;
			PFILECHANGES_INFORMATION*		ppPrevPostInfo;
			PFILECHANGES_INFORMATION*		pPostInfo;
		};
		void WinNTHandleDirectoryNameChange(
			int								nPathnameLength,
			CFileFilter::CParsedPathItem*	pParsedPathItem,
			struct __tag_SpecialParamForWinNTHandleDirectoryNameChange* pExt);

	protected:
		HANDLE									m_hVxD;

		HANDLE									m_arrayHandleBank[32];
		class __tag_ACCESSORY_ITEM {		//	Actually I want to declare a struct
		public:
			__tag_ACCESSORY_ITEM() : m_hFile(NULL), m_pParsedPathItemPointer(NULL), m_pBuffer(NULL)
			{
				m_objOverlapped.Internal = m_objOverlapped.InternalHigh = 0;
				m_objOverlapped.Pointer = m_objOverlapped.hEvent = NULL;
			}

		public:
			HANDLE							m_hFile;
			CString							m_csPath;
			CFileFilter::CParsedPathItem*	m_pParsedPathItemPointer;
			LPVOID							m_pBuffer;
			OVERLAPPED						m_objOverlapped;
		}										m_arrayAccessoryBank[32];
		int										m_nHandleNumber;

		BOOL									m_fIsLogging;

		CFileFilter*							m_pFileFilter;
		CDatabaseAccessThread*					m_pDatabassAccessThread;
		LPFILEBACKUP_CALLBACK					m_pCallback;
	};

	class CFileCopyThreadWrapper : public CWorkerThreadWrapper
	{
	public:
		inline CFileCopyThreadWrapper(LPFILEBACKUP_CALLBACK pCallback, CDatabaseAccessThread* pDatabaseAccessThread) : CWorkerThreadWrapper(), m_pCallback(pCallback), m_pDatabaseAccessThread(pDatabaseAccessTh

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲1区2区3区视频| 国产精品一区在线观看你懂的| 久久一区二区三区国产精品| 欧美日韩一区高清| 欧美专区亚洲专区| 欧美怡红院视频| 欧美三级日韩在线| 欧美一区二区在线不卡| 制服丝袜亚洲精品中文字幕| 欧美一级理论片| 欧美zozozo| 国产日韩欧美a| 国产日韩v精品一区二区| 精品国产不卡一区二区三区| 精品播放一区二区| 久久久噜噜噜久噜久久综合| 国产喂奶挤奶一区二区三区| 欧美激情一区二区三区四区| 中文字幕亚洲区| 亚洲精品少妇30p| 亚洲国产美女搞黄色| 日韩中文字幕91| 激情都市一区二区| 不卡的电视剧免费网站有什么| 97精品国产露脸对白| 色94色欧美sute亚洲线路一ni| 欧美日产在线观看| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 日韩免费视频一区二区| 最新日韩av在线| 国产精品欧美综合在线| 久久女同性恋中文字幕| 国产精品久久久久影院亚瑟 | 亚洲综合免费观看高清在线观看| 亚洲免费在线播放| 久久国产三级精品| 欧美日韩精品欧美日韩精品| 日韩av一级片| 视频一区在线播放| 色婷婷亚洲一区二区三区| 日本道免费精品一区二区三区| 欧美日韩国产精选| 久久久高清一区二区三区| 亚洲另类春色国产| 久久99热狠狠色一区二区| av欧美精品.com| 91精品国产综合久久久蜜臀图片| 久久精品男人天堂av| 亚洲午夜电影在线观看| 国产精品综合av一区二区国产馆| 欧美在线制服丝袜| 国产婷婷精品av在线| 日韩在线a电影| gogo大胆日本视频一区| 欧美一级久久久久久久大片| 中文字幕亚洲区| 国产一区二区三区不卡在线观看 | 亚洲美女在线一区| 国产精品中文欧美| 欧美精品国产精品| 亚洲欧美另类在线| 国产成人午夜高潮毛片| 欧美一区二区三区在线视频| 亚洲免费在线观看| 成年人午夜久久久| 国产校园另类小说区| 琪琪一区二区三区| 欧美日韩一级视频| 一区二区三区高清不卡| av日韩在线网站| 中文一区二区完整视频在线观看| 日韩1区2区日韩1区2区| 欧美日韩精品一区视频| 樱花影视一区二区| aaa欧美色吧激情视频| 欧美激情一区二区三区蜜桃视频 | 成人国产亚洲欧美成人综合网| 精品国产免费一区二区三区四区| 天天综合色天天| 欧美日韩国产片| 亚洲va国产天堂va久久en| 91蝌蚪国产九色| 亚洲女同女同女同女同女同69| www.亚洲色图.com| 自拍偷拍亚洲激情| 99精品欧美一区| 樱桃国产成人精品视频| 在线免费观看日本欧美| 一区二区欧美在线观看| 91极品美女在线| 偷拍与自拍一区| 日韩欧美一二区| 国产一区二区三区免费看 | 国产精品中文有码| 亚洲成av人片在线| 欧美日高清视频| 日本在线不卡视频| 精品播放一区二区| 成人黄色av网站在线| 自拍av一区二区三区| 欧美中文字幕一区二区三区亚洲| 亚洲一区二区三区自拍| 欧美日韩一区二区三区四区| 日韩激情av在线| 久久久久久久久99精品| 99久久精品免费看| 午夜精品福利久久久| 亚洲精品一线二线三线| yourporn久久国产精品| 午夜精品福利一区二区三区蜜桃| 欧美sm极限捆绑bd| 不卡av电影在线播放| 午夜亚洲国产au精品一区二区| 日韩一级片网址| av色综合久久天堂av综合| 午夜精品一区二区三区电影天堂| 精品国产网站在线观看| 色综合一个色综合| 麻豆91免费看| 亚洲视频免费在线观看| 欧美一级精品在线| 色噜噜狠狠成人中文综合 | 欧美国产一区在线| 欧美在线播放高清精品| 国产成人在线视频免费播放| 亚洲一区欧美一区| 久久久国际精品| 正在播放亚洲一区| av资源网一区| 韩国精品久久久| 午夜伦欧美伦电影理论片| 国产精品国产三级国产aⅴ入口 | 成人欧美一区二区三区1314| 欧美美女视频在线观看| 99免费精品在线| 国产一区 二区 三区一级| 午夜影院久久久| 亚洲欧洲日韩一区二区三区| 精品久久五月天| 欧美高清视频www夜色资源网| 成人av电影免费观看| 国产在线精品一区二区| 婷婷一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在| 日韩精品一区二区三区视频播放 | 国产精品一区二区男女羞羞无遮挡 | 欧美性大战久久久| av资源网一区| www.在线成人| 成人av影视在线观看| 国产精品一级在线| 国产激情一区二区三区桃花岛亚洲| 免费国产亚洲视频| 美腿丝袜一区二区三区| 香蕉久久一区二区不卡无毒影院| 一区二区免费看| 一区二区三区中文字幕电影| 中文字幕综合网| 国产精品嫩草99a| 国产精品久久久久久久久久久免费看| wwww国产精品欧美| 久久婷婷一区二区三区| 精品国产91洋老外米糕| 精品国产免费一区二区三区四区| 日韩精品中文字幕在线不卡尤物| 欧美高清性hdvideosex| 日韩欧美中文字幕精品| 日韩一级欧美一级| 2023国产精品视频| 国产欧美视频在线观看| 国产精品久久久久久久浪潮网站 | 亚洲永久免费av| 天天免费综合色| 九一久久久久久| 国产激情偷乱视频一区二区三区| 风间由美性色一区二区三区| www.亚洲在线| 欧美日韩免费观看一区二区三区 | 国产精品色哟哟| 一区二区三区日韩欧美| 五月婷婷久久丁香| 久久99精品久久久久久久久久久久| 麻豆精品国产91久久久久久| 国产成人av一区二区三区在线| 成人小视频在线| 欧美伊人久久久久久久久影院| 3d成人h动漫网站入口| 久久久久国产精品麻豆ai换脸| 国产精品嫩草影院av蜜臀| 亚洲午夜视频在线| 久久精品国产色蜜蜜麻豆| av激情成人网| 337p亚洲精品色噜噜狠狠| 久久久久国产免费免费| 一区二区三区在线视频观看| 午夜精品福利在线| 北条麻妃国产九九精品视频| 欧美三级日本三级少妇99| 久久久精品免费观看| 亚洲一区欧美一区|