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

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

?? filebackupe.h

?? 實(shí)時(shí)文件備份
?? H
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
// 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
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区在线观看免费视频播放| 婷婷久久综合九色国产成人 | 色呦呦一区二区三区| 91精品国模一区二区三区| 亚洲美女在线国产| 成人精品国产免费网站| 日本一区二区三区在线观看| 老司机免费视频一区二区| 精品日韩在线一区| 国产在线视频精品一区| 国产免费久久精品| 日韩欧美一区二区在线视频| 一区二区在线观看免费| 国产三级久久久| 日韩免费视频一区二区| 欧美日韩午夜在线视频| 麻豆专区一区二区三区四区五区| 精品处破学生在线二十三| 东方欧美亚洲色图在线| 亚洲私人影院在线观看| 欧美日韩一区二区在线观看| 成人黄色片在线观看| 国产一区二区三区黄视频 | 久久这里只有精品视频网| 国产一区999| 免费观看成人鲁鲁鲁鲁鲁视频| 久久综合精品国产一区二区三区| 欧美精品在线一区二区| 国产mv日韩mv欧美| 国产在线乱码一区二区三区| 老司机精品视频导航| 丝袜亚洲另类丝袜在线| 国产欧美一区二区精品性色| 精品美女在线观看| 欧美成人综合网站| 日韩三区在线观看| 欧美一区二区在线免费播放| av网站一区二区三区| 亚州成人在线电影| 国产欧美日韩三级| 久久久777精品电影网影网| 欧美视频中文一区二区三区在线观看| 精久久久久久久久久久| 一区二区成人在线观看| 久久综合色婷婷| 亚洲精品一区二区三区在线观看| 精品久久久久av影院| 精品电影一区二区三区 | 日韩一区二区免费在线观看| 9191精品国产综合久久久久久| 欧美日韩高清在线| 波多野结衣中文字幕一区二区三区| 丁香网亚洲国际| 成人av在线电影| 91丨国产丨九色丨pron| 麻豆91在线观看| 狠狠色丁香久久婷婷综合_中 | 久久欧美一区二区| 69av一区二区三区| 精品国产青草久久久久福利| 久久嫩草精品久久久精品| 中文天堂在线一区| 欧美精品一区男女天堂| 国产欧美日韩不卡| 亚洲视频 欧洲视频| 午夜伦欧美伦电影理论片| 免费观看久久久4p| 国产不卡在线视频| 91蜜桃在线免费视频| 欧美精品aⅴ在线视频| 精品粉嫩aⅴ一区二区三区四区| 欧美国产日产图区| 国产欧美一区二区精品性| 日韩毛片高清在线播放| 亚洲mv大片欧洲mv大片精品| 国内精品自线一区二区三区视频| 成人午夜激情在线| 成人一区二区在线观看| 一本大道av伊人久久综合| 91麻豆精品国产综合久久久久久| 国产亚洲精品免费| 一区二区三区欧美亚洲| 精品中文字幕一区二区| 91蜜桃视频在线| 精品国产露脸精彩对白| 一区二区视频在线看| 麻豆国产91在线播放| av在线不卡免费看| 日韩欧美一区电影| 亚洲久草在线视频| 国产一区二区福利| 欧美日韩在线三级| 国产精品久久久久久久久免费樱桃| 久久久久久9999| 亚洲国产精品久久不卡毛片 | 欧美在线观看视频在线| 欧洲国产伦久久久久久久| 久久这里只精品最新地址| 亚洲午夜久久久久中文字幕久| 国产美女在线精品| 欧美猛男男办公室激情| 亚洲欧美日韩国产综合| 国产黄色成人av| 色综合久久久久综合体桃花网| 精品剧情在线观看| 亚洲第一电影网| 色综合色狠狠天天综合色| 久久综合色一综合色88| 青娱乐精品视频| 在线观看91视频| 欧美激情一区二区三区四区| 青青草精品视频| 欧美日韩五月天| 一区二区在线观看不卡| a美女胸又www黄视频久久| 国产亚洲精品aa| 久色婷婷小香蕉久久| 6080国产精品一区二区| 亚洲一卡二卡三卡四卡五卡| 久久成人精品无人区| 欧美久久一二三四区| 亚洲另类中文字| 91在线观看视频| 国产精品二三区| 成人午夜在线视频| 久久精品夜色噜噜亚洲aⅴ| 精品一区二区三区不卡| 精品蜜桃在线看| 久久国产剧场电影| 精品免费国产一区二区三区四区| 日本不卡的三区四区五区| 91精选在线观看| 欧美96一区二区免费视频| 欧美精品在线一区二区| 日日夜夜免费精品视频| 制服丝袜中文字幕一区| 日韩国产高清在线| 97精品久久久久中文字幕| 欧美一区2区视频在线观看| 午夜成人免费视频| 欧美一区二区性放荡片| 日韩av电影免费观看高清完整版在线观看| 精品视频资源站| 午夜精品成人在线| 日韩一级高清毛片| 精品一二线国产| 久久久久久久久久电影| 丰满白嫩尤物一区二区| 1024亚洲合集| 粉嫩一区二区三区性色av| 欧美高清在线一区| www.99精品| 一区二区三区中文在线| 欧美日韩综合在线免费观看| 日韩av不卡一区二区| 精品乱人伦小说| 成人av综合在线| 亚洲综合色噜噜狠狠| 欧美一区二区久久| 国产乱子伦一区二区三区国色天香| 色综合久久综合中文综合网| 亚洲自拍与偷拍| 日韩一二三区不卡| 懂色av噜噜一区二区三区av| 亚洲欧美区自拍先锋| 欧美美女直播网站| 国产一区999| 一区二区在线观看视频| 欧美一区二区二区| 成人动漫精品一区二区| 亚洲专区一二三| 精品国产乱码久久久久久牛牛| 99在线精品视频| 日日摸夜夜添夜夜添国产精品| 久久精品免视看| 在线观看亚洲专区| 精品一区二区三区香蕉蜜桃| 日韩理论电影院| 日韩一区二区影院| 972aa.com艺术欧美| 青青草原综合久久大伊人精品优势| 中文字幕巨乱亚洲| 欧美精品tushy高清| caoporn国产精品| 免费成人av在线播放| 亚洲欧美色一区| 日韩欧美一级精品久久| 日本高清不卡视频| 亚洲国产aⅴ天堂久久| 久久久九九九九| 在线不卡的av| av电影在线观看一区| 黄页网站大全一区二区| 亚洲国产日韩a在线播放性色| 久久久不卡网国产精品一区| 欧美三级一区二区| 波多野洁衣一区| 狠狠色综合日日| 天天操天天干天天综合网| 亚洲视频在线观看一区|