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

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

?? filebackupe.h

?? 實(shí)時文件備份
?? H
?? 第 1 頁 / 共 5 頁
字號:
// FileBackup.h: interface for the CFileBackupE class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_FILEBACKUP_H__F916F369_A31D_4BF8_9575_6EA5C0792A4E__INCLUDED_)
#define AFX_FILEBACKUP_H__F916F369_A31D_4BF8_9575_6EA5C0792A4E__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <afxtempl.h>
#include "IoCtlCmd.h"

#define BASIC_ERROR(n)									(0x00 + (n))
#define CHANGESHANDLER_ERROR(n)							(0x40 + (n))
#define DATABASETHREAD_ERROR(n)							(0x80 + (n))
#define FILECOPYTHREAD_ERROR(n)							(0xC0 + (n))

#define LOAD_VXD_ERROR									BASIC_ERROR(1)
#define CHANGESHANDLER_MULTIBYTETOWIDECHAR_ERROR		CHANGESHANDLER_ERROR(1)
#define CHANGESHANDLER_WIDECHARTOMULTIBYTE_ERROR		CHANGESHANDLER_ERROR(2)
#define CHANGESHANDLER_GETLONGPATHNAME_ERROR			CHANGESHANDLER_ERROR(3)
#define CHANGESHANDLER_PATHNAMETOOLONG_ERROR			CHANGESHANDLER_ERROR(4)
#define CHANGESHANDLER_POSTFILECHANGES_ERROR			CHANGESHANDLER_ERROR(5)

typedef struct __tag_FileBackup_Callback_Param
{
	DWORD				m_dwCallbackType;
	LPCTSTR				m_pString;
	LPCTSTR				m_pString2;
	DWORD				m_dwPercentageOrErrorCode;	//	percentage or error code
	__int64				m_i64BytesAccessed;
} FILEBACKUP_CALLBACK_PARAM, *PFILEBACKUP_CALLBACK_PARAM;
typedef DWORD (WINAPI *LPFILEBACKUP_CALLBACK)(PFILEBACKUP_CALLBACK_PARAM lParam);

typedef struct __tag_FileBackup_FileChanges_Information
{
	struct __tag_FileBackup_FileChanges_Information*	m_pNext;
	time_t												m_tTime;
	BOOL												m_fNew;
	int													m_nBasePathLength;
	int													m_nPathnameLength;
	TCHAR												m_tsPathname[1];
} FILECHANGES_INFORMATION, *PFILECHANGES_INFORMATION;

#define	UWM_MYMESSAGE(n)				(WM_APP + 0x0040 + (n))
#define UWM_DESTROY_WORKERTHREAD		UWM_MYMESSAGE(1)
#define UWM_START_LOGGING_FILE_CHANGES	UWM_MYMESSAGE(2)
#define UWM_STOP_LOGGING_FILE_CHANGES	UWM_MYMESSAGE(3)
#define UWM_POST_FILE_CHANGES			UWM_MYMESSAGE(4)


inline char LOWER(char x) { return ((x) >= 'A' && (x) <= 'Z' ? (x) - 'A' + 'a' : (x)); }
inline WCHAR LOWER(WCHAR x) { return ((x) >= L'A' && (x) <= L'Z' ? (x) - L'A' + L'a' : (x)); }
//#define LOWER(x)		((x) >= _T('A') && (x) <= _T('Z') ? (x) - _T('A') + _T('a') : (x))


class CFileBackupE
{
public:	//	CMemoryException, CSimpleException
	class CVxDException : public ::CException
	{
//		DECLARE_DYNAMIC(CVxDException)
#ifdef _AFXDLL
		protected:
			static CRuntimeClass* PASCAL _GetBaseClass();
		public:
			static const AFX_DATA CRuntimeClass classCFileBackup_CVxDException;
			virtual CRuntimeClass* GetRuntimeClass() const;
#else
		public:
			static const AFX_DATA CRuntimeClass classCFileBackup_CVxDException;
			virtual CRuntimeClass* GetRuntimeClass() const;
#endif

	public:
		inline CVxDException() : CException(), m_dwErrorCode(0)
		{
			_tcscpy(m_tsMessage, _T("Failed in loading VxD driver to hook file system..."));
		}

		inline CVxDException(BOOL bAutoDelete) : CException(bAutoDelete), m_dwErrorCode(0)
		{
			_tcscpy(m_tsMessage, _T("Failed in loading VxD driver to hook file system..."));
		}

		inline CVxDException(BOOL bAutoDelete, DWORD dwErrorCode) : CException(bAutoDelete), m_dwErrorCode(dwErrorCode)
		{
			_stprintf(m_tsMessage, _T("Failed in loading VxD driver to hook file system: 0x%08X"), dwErrorCode);
		}

		inline CVxDException(BOOL bAutoDelete, LPCTSTR ptsFilename) : CException(bAutoDelete)
		{
			_stprintf(m_tsMessage, _T("Failed in loading VxD driver (%s) to hook file system..."), ptsFilename);
		}

		inline CVxDException(BOOL bAutoDelete, DWORD dwErrorCode, LPCTSTR ptsFilename) : CException(bAutoDelete), m_dwErrorCode(dwErrorCode)
		{
			_stprintf(m_tsMessage, _T("Failed in loading VxD driver (%s) to hook file system: 0x%08X"), ptsFilename, dwErrorCode);
		}

		virtual ~CVxDException()
		{
		}

		virtual BOOL GetErrorMessage(LPTSTR lpszError, UINT nMaxError, PUINT pnHelpContext = NULL)
		{
			ASSERT(lpszError != NULL && AfxIsValidString(lpszError, nMaxError));

			if ( pnHelpContext != NULL )
				*pnHelpContext = 0;

			lstrcpyn(lpszError, m_tsMessage, nMaxError);

			return TRUE;
		}

	protected:
		TCHAR m_tsMessage[128 + MAX_PATH];
		DWORD m_dwErrorCode;
	};

	class CGlobalInit
	{
	public:
		inline CGlobalInit()
		{
			m_dwVersion = GetVersion();

#ifdef _DEBUG
			InitializeCriticalSection(&m_objDebugOutputCriticalSection);
#endif
		}

		inline ~CGlobalInit()
		{
#ifdef _DEBUG
			DeleteCriticalSection(&m_objDebugOutputCriticalSection);
#endif
		}

		inline BOOL IsNT() { return m_dwVersion < 0x80000000; }

#ifdef _DEBUG
		inline void DebugPrint(LPCTSTR lpszFormat, ...)
		{
			va_list argList;
			CString csMessage;

			va_start(argList, lpszFormat);
			csMessage.FormatV(lpszFormat, argList);

			if ( !csMessage.IsEmpty() && csMessage.GetLength() > 0 )
			{
				EnterCriticalSection(&m_objDebugOutputCriticalSection);
				_tprintf((LPCTSTR)csMessage);
				LeaveCriticalSection(&m_objDebugOutputCriticalSection);
			}

			va_end(argList);
		}
#endif

	protected:
		DWORD						m_dwVersion;

#ifdef _DEBUG
		CRITICAL_SECTION			m_objDebugOutputCriticalSection;
#endif
	};

	class CFilenameMaskList
	{
	public:
		class CFilenameMask
		{
		public:
			typedef enum
			{
				SYNC_FILE_MASK_TYPE_OTHER				= 0,
				SYNC_FILE_MASK_TYPE_ALL					= 1,
				SYNC_FILE_MASK_TYPE_EXT					= 2,
			} FILE_MASK_TYPE;

			inline CFilenameMask() : m_enumType(SYNC_FILE_MASK_TYPE_OTHER), m_nMaskLen(0), m_nRequiredLen(0) {}
			inline CFilenameMask(LPCTSTR pcstrMask) { *this = pcstrMask; }

			inline void Reset() { m_csMask.Empty(); m_enumType = SYNC_FILE_MASK_TYPE_OTHER; m_nMaskLen = m_nRequiredLen = 0; }

			inline CFilenameMask& operator =(LPCTSTR pcstrMask)
			{
				LPCTSTR pStart;

				if ( IsAllMask(pcstrMask) )
				{
					m_enumType = SYNC_FILE_MASK_TYPE_ALL;
					m_csMask.Empty();
				}
				else if ( IsExtMask(pcstrMask, &pStart) )
				{
					m_enumType = SYNC_FILE_MASK_TYPE_EXT;
					m_csMask = pStart;
				}
				else
				{
					LPCTSTR pMask;

					m_enumType = SYNC_FILE_MASK_TYPE_OTHER;
					m_csMask = CleanMask(pcstrMask);

					pMask = m_csMask;
					m_nRequiredLen = 0;
					while ( *pMask != NULL )
					{
						if ( *pMask != _T('*') && *pMask != _T('?') )
							m_nRequiredLen++;
						pMask++;
					}
				}
				m_nMaskLen = m_csMask.GetLength();
				m_csMask.MakeLower();
				return *this;
			}

			inline BOOL operator ==(LPCTSTR pcstrMask) const
			{
				LPCTSTR pStart;

				if ( IsAllMask(pcstrMask) )
					return m_enumType == SYNC_FILE_MASK_TYPE_ALL;
				else if ( IsExtMask(pcstrMask, &pStart) )
					return m_enumType == SYNC_FILE_MASK_TYPE_EXT && m_csMask.CompareNoCase(pStart) == 0;
				else
					return m_enumType == SYNC_FILE_MASK_TYPE_OTHER && m_csMask.CompareNoCase(CleanMask(pcstrMask)) == 0;
			}

			inline BOOL operator ==(const CFilenameMask& mask) const
			{
				return m_enumType == mask.m_enumType && m_csMask.Compare(mask.m_csMask) == 0;
			}

			inline BOOL operator !=(const CFilenameMask& mask) const
			{
				return !(*this == mask);
			}

			inline int Compare(LPCTSTR pcstrMask) const
			{
				LPCTSTR pStart;

				if ( IsAllMask(pcstrMask) )
					return m_enumType == SYNC_FILE_MASK_TYPE_ALL ? 0 : 1;
				else if ( IsExtMask(pcstrMask, &pStart) )
					return m_enumType == SYNC_FILE_MASK_TYPE_EXT ? m_csMask.CompareNoCase(pStart) : m_enumType == SYNC_FILE_MASK_TYPE_ALL ? -1 : 1;
				else
					return m_enumType == SYNC_FILE_MASK_TYPE_OTHER ? m_csMask.CompareNoCase(CleanMask(pcstrMask)) : -1;
			}

			inline static BOOL IsAllMask(LPCTSTR pcstrMask)
			{
				BOOL fCharLimit;

				if ( pcstrMask == NULL || *pcstrMask == NULL )
					return TRUE;

				fCharLimit = TRUE;
				while ( *pcstrMask != NULL )
				{
					if ( *pcstrMask == _T('*') )
						fCharLimit = FALSE;
					else if ( *pcstrMask == _T('.') )
					{
						if ( fCharLimit )
							return FALSE;
						else
							fCharLimit = TRUE;
					}
					else if ( *pcstrMask != _T('?') )
						return FALSE;
					pcstrMask++;
				}
				return !fCharLimit;
			}

			inline static BOOL IsExtMask(LPCTSTR pcstrMask, LPCTSTR* ppStart = NULL)
			{
				BOOL fCharLimit;

				if ( pcstrMask == NULL || *pcstrMask == NULL )
					return FALSE;

				fCharLimit = TRUE;
				while ( *pcstrMask != NULL )
				{
					if ( *pcstrMask == _T('*') )
						fCharLimit = FALSE;
					else if ( *pcstrMask == _T('.') )
					{
						if ( fCharLimit )
							return FALSE;
						else
						{
							if ( *++pcstrMask == NULL )
								return FALSE;
							if ( ppStart != NULL )
								*ppStart = pcstrMask;
							do
							{
								if ( *pcstrMask == _T('*') || *pcstrMask == _T('?') || *pcstrMask == _T('.') )
									return FALSE;
							} while ( *++pcstrMask != NULL );
							return TRUE;
						}
					}
					else if ( *pcstrMask != _T('?') )
						return FALSE;
					pcstrMask++;
				}
				return FALSE;
			}

			inline static CString CleanMask(LPCTSTR pcstrMask)
			{
				CString csNewMask;
				int nOrgMaskLen = _tcslen(pcstrMask);
				LPCTSTR pOrgMask = pcstrMask;
				LPTSTR pNewMask = csNewMask.GetBuffer(nOrgMaskLen + 1);
				int nQuestionMarkLen = 0;

				while ( *pOrgMask != NULL )
				{
					if ( *pOrgMask == _T('*') )
					{
						*pNewMask++ = _T('*');
						nQuestionMarkLen = 0;
						while ( *pOrgMask == _T('*') || *pOrgMask == _T('?') )
							pOrgMask++;
						continue;
					}
					else if ( *pOrgMask == _T('?') )
						nQuestionMarkLen++;
					else
					{
						while ( nQuestionMarkLen > 0 )
						{
							*pNewMask++ = _T('?');
							nQuestionMarkLen--;
						}
						*pNewMask++ = *pOrgMask;
					}
					pOrgMask++;
				}

				*pNewMask = NULL;
				csNewMask.ReleaseBuffer();
				return csNewMask;
			}

			static BOOL IsSubNameMatch(LPCTSTR pcstrMask, LPCTSTR pcstrName);
			static BOOL IsSubNameMatchWithoutDot(LPCTSTR pcstrMask, LPCTSTR pcstrName);

			inline BOOL IsNameMatch(LPCTSTR pcstrName) const
			{
				if ( pcstrName == NULL )
					return FALSE;

				if ( m_enumType == SYNC_FILE_MASK_TYPE_ALL )
					return TRUE;

				if ( m_enumType == SYNC_FILE_MASK_TYPE_EXT )
				{
					int nNameLen = _tcslen(pcstrName);
					LPCTSTR pName;

					if ( m_nMaskLen >= nNameLen )
						return FALSE;
					pName = pcstrName + nNameLen - m_nMaskLen;
					return *(pName - 1) == _T('.') && m_csMask.CompareNoCase(pName) == 0;
				}

				{
					LPCTSTR pMask = m_csMask;
					LPCTSTR pOrgName = pcstrName;
					TCHAR tsNameDuplicate[MAX_PATH];
					LPTSTR pName = tsNameDuplicate;
					int nDotCount = 0;

					while ( *pOrgName != NULL )
						if ( *pOrgName >= _T('A') && *pOrgName <= _T('Z') )
							*pName++ = *pOrgName++ + _T('a') - _T('A');
						else if ( *pOrgName == _T('.') )
						{
							*pName++ = _T('.');
							pOrgName++;
							nDotCount++;
						}
						else
							*pName++ = *pOrgName++;
					*pName = NULL;
					while ( pName > tsNameDuplicate && *(pName - 1) == _T('.') )
					{
							*--pName = NULL;
							nDotCount--;
					}
					if ( pName == tsNameDuplicate )
						return FALSE;
					pName = tsNameDuplicate;
					if ( nDotCount != 0 )
					{
						while ( *pMask != NULL )
						{
							if ( *pMask == _T('*') || *pMask == _T('?') )
								return IsSubNameMatch(pMask, pName);
							else if ( *pMask != *pName )
								return FALSE;
							pName++;
							pMask++;
						}
						return *pName == NULL;	//	*pMask == NULL
					}
					else
					{
						while ( *pMask != NULL )
						{
							if ( *pMask == _T('*') || *pMask == _T('?') )

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丰满白嫩尤物一区二区| 石原莉奈一区二区三区在线观看| av亚洲精华国产精华精| 亚洲二区视频在线| 久久综合色一综合色88| 97久久超碰国产精品电影| 五月天一区二区| 久久久久久久精| 在线日韩国产精品| 国产老妇另类xxxxx| 亚洲影视在线观看| 久久精品无码一区二区三区| 91国产丝袜在线播放| 久久99国产精品免费| 亚洲卡通动漫在线| 久久久精品黄色| 4438成人网| 91美女片黄在线| 国产自产高清不卡| 91碰在线视频| 欧美丰满少妇xxxbbb| 蜜臀久久久99精品久久久久久| 中文字幕的久久| 日韩欧美国产精品一区| 91黄色激情网站| 国产69精品一区二区亚洲孕妇| 午夜精品在线视频一区| 亚洲色图欧洲色图| 久久久国际精品| 欧美一区二区私人影院日本| 91免费精品国自产拍在线不卡| 国产在线视频精品一区| 天堂精品中文字幕在线| 亚洲欧美电影一区二区| 久久精品网站免费观看| 日韩三级视频在线观看| 欧美日韩一区二区欧美激情| 92精品国产成人观看免费 | 欧美成人综合网站| 欧美三级一区二区| 在线一区二区观看| 久久久久久久综合色一本| 一区二区三区四区激情 | 国精产品一区一区三区mba桃花 | 亚洲欧美日韩国产另类专区| 久久人人爽人人爽| 日韩视频免费直播| 欧美日韩国产不卡| 欧美日韩激情一区二区三区| 91国产精品成人| 欧美在线观看视频在线| 色八戒一区二区三区| 91老师国产黑色丝袜在线| 99久久国产免费看| 91性感美女视频| 色88888久久久久久影院野外 | 首页国产丝袜综合| 日韩精品一二三四| 日本午夜一本久久久综合| 丝袜诱惑亚洲看片| 蜜乳av一区二区| 欧美成人激情免费网| 欧美日韩视频专区在线播放| 欧美日韩在线精品一区二区三区激情 | 91成人看片片| 欧美午夜精品免费| 欧美日韩久久不卡| 538在线一区二区精品国产| 51精品久久久久久久蜜臀| 日韩欧美卡一卡二| www成人在线观看| 欧美激情中文不卡| 亚洲女女做受ⅹxx高潮| 一级做a爱片久久| 天天av天天翘天天综合网| 奇米一区二区三区av| 激情五月激情综合网| 成人免费毛片app| 91首页免费视频| 欧美日韩国产片| 精品国产乱子伦一区| 亚洲国产成人私人影院tom| 最新国产成人在线观看| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲福利视频三区| 久草热8精品视频在线观看| 粉嫩久久99精品久久久久久夜| 91在线云播放| 欧美精品在线观看播放| 国产亚洲欧美日韩俺去了| 日韩一区在线免费观看| 日韩精品91亚洲二区在线观看| 国产电影一区在线| 一本一道综合狠狠老| 8x福利精品第一导航| 中文字幕精品一区二区三区精品| 亚洲尤物在线视频观看| 激情综合色丁香一区二区| 91在线观看美女| 日韩精品专区在线影院观看| 最新日韩av在线| 日本欧美一区二区三区乱码| 成人av网站在线观看免费| 欧美日韩精品专区| 欧美激情艳妇裸体舞| 日韩高清在线电影| av毛片久久久久**hd| 欧美丰满高潮xxxx喷水动漫| 国产精品女上位| 蜜桃视频一区二区三区| 91首页免费视频| 国产亚洲综合性久久久影院| 天堂一区二区在线| 色综合久久天天综合网| 久久亚洲精品国产精品紫薇| 一区二区三区欧美在线观看| 国产乱码精品1区2区3区| 中文字幕制服丝袜一区二区三区 | 337p亚洲精品色噜噜狠狠| 中文乱码免费一区二区| 蜜桃av噜噜一区二区三区小说| 91亚洲大成网污www| 久久人人97超碰com| 五月综合激情日本mⅴ| 色综合久久久久综合体| 久久久久久久综合狠狠综合| 日韩高清一区在线| 欧美在线观看禁18| 国产精品国产精品国产专区不片| 久久99九九99精品| 欧美男女性生活在线直播观看| 成人欧美一区二区三区黑人麻豆| 国产综合久久久久久鬼色| 9191精品国产综合久久久久久| 樱桃国产成人精品视频| 成人aa视频在线观看| 久久久国产综合精品女国产盗摄| 免费精品视频在线| 中文字幕在线观看一区二区| 久久麻豆一区二区| 日韩电影在线观看电影| 欧美在线你懂得| 亚洲欧美激情一区二区| 成人黄色电影在线 | caoporm超碰国产精品| 精品国产伦一区二区三区观看方式| 午夜久久久久久久久| 在线观看av不卡| 亚洲精品va在线观看| 99re在线精品| 亚洲视频 欧洲视频| 99麻豆久久久国产精品免费优播| 久久久久99精品国产片| 国产一区二区三区香蕉| 26uuu亚洲综合色| 国产精一区二区三区| 久久精品日产第一区二区三区高清版| 久久草av在线| 精品久久人人做人人爰| 国产一区二区三区综合| 欧美色图天堂网| 亚洲黄一区二区三区| 欧美亚洲综合网| 丝袜亚洲另类欧美综合| 日韩欧美国产一区二区在线播放 | 国产自产视频一区二区三区| 久久伊99综合婷婷久久伊| 国产一区不卡精品| 欧美极品另类videosde| 99re8在线精品视频免费播放| 一区二区三区波多野结衣在线观看| 欧美亚洲国产bt| 蜜臀久久99精品久久久久久9| 精品国产乱码久久久久久牛牛| 国产伦精品一区二区三区免费迷 | 国产河南妇女毛片精品久久久| 国产午夜亚洲精品羞羞网站| av欧美精品.com| 亚洲福利视频三区| 精品久久久久久久久久久久久久久| 国产精品一二三区在线| 亚洲理论在线观看| 日韩一区二区高清| 丰满放荡岳乱妇91ww| 亚洲一二三区视频在线观看| 日韩一区二区视频| 成人免费毛片app| 中文字幕免费不卡| 久久精品理论片| 欧美精品一区二区久久久| 丁香婷婷综合网| 一区二区在线观看不卡| 91精品欧美久久久久久动漫 | 日韩vs国产vs欧美| 国产日韩亚洲欧美综合| 在线国产电影不卡| 国产米奇在线777精品观看| 亚洲另类一区二区| 精品国产91乱码一区二区三区| www.亚洲国产|