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

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

?? shellext.cpp

?? FastCopy 利用緩沖技術加快文件拷貝
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
}

/*=========================================================================
  娭  悢 丗 
  奣  梫 丗 DLL Export 娭悢孮
  愢  柧 丗 
  拲  堄 丗 
=========================================================================*/
STDAPI DllCanUnloadNow(void)
{
	return SysObj && SysObj->DllRefCnt == 0 ? S_OK : S_FALSE;
}

STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppvOut)
{
	*ppvOut = NULL;

	if (IsEqualIID(rclsid, CURRENT_SHEXT_CLSID) || IsEqualIID(rclsid, CURRENT_SHEXTLNK_CLSID)) {
		ShellExtClassFactory	*cf = new ShellExtClassFactory;
		return cf->QueryInterface(riid, ppvOut);
	}
	return CLASS_E_CLASSNOTAVAILABLE;
}

BOOL GetClsId(REFIID cls_name, char *cls_id, int size)
{
	WCHAR		*w_cls_id;
	IMalloc		*im = NULL;

	::StringFromIID(cls_name, &w_cls_id);

	if (w_cls_id)
		::WideCharToMultiByte(CP_ACP, 0, w_cls_id, -1, cls_id, size, NULL, NULL);

	::CoGetMalloc(1, &im);
	im->Free(w_cls_id);
	im->Release();
	return	TRUE;
}

STDAPI DllRegisterServer(void)
{
	if (SHGetPathFromIDListV == NULL)
		return	E_FAIL;

	TShellExtRegistry	reg;

// CLASSKEY 搊榐
	if (reg.CreateClsKey()) {
		reg.SetStr(NULL, FASTCOPY);
		if (reg.CreateKey("InProcServer32")) {
			reg.SetStr(NULL, SysObj->DllName);
			reg.SetStr("ThreadingModel", "Apartment");
			reg.CloseKey();
		}
	}

// 娭楢晅偗
	reg.ChangeTopKey(HKEY_CLASSES_ROOT);
	for (int i=0; DllRegKeys[i]; i++) {
		if (reg.CreateKey(DllRegKeys[i])) {
			if (reg.CreateKey(FASTCOPY)) {
				reg.SetStr(NULL, reg.clsId);
				reg.CloseKey();
			}
			reg.CloseKey();
		}
	}

// NT宯偺捛壛
	if (IsWinNT())  {
		reg.ChangeTopKey(HKEY_LOCAL_MACHINE);
		if (reg.OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved")) {
			reg.SetStr(reg.clsId, FASTCOPY);
			reg.CloseKey();
		}
	}
	return S_OK;
}

STDAPI DllUnregisterServer(void)
{
	TShellExtRegistry	reg;

// CLASS_KEY 嶍彍
	reg.DeleteChildTree(reg.clsId);

// 娭楢晅偗 嶍彍
	reg.ChangeTopKey(HKEY_CLASSES_ROOT);
	for (int i=0; DllRegKeys[i]; i++) {
		if (reg.OpenKey(DllRegKeys[i])) {
			reg.DeleteChildTree(FASTCOPY);
			reg.CloseKey();
		}
	}

// 媽僶乕僕儑儞梡 (.lnk 愱梡)
	TShellExtRegistry	linkreg(CURRENT_SHEXTLNK_CLSID);
	linkreg.DeleteChildTree(linkreg.clsId);

// NT宯偺捛壛
	if (IsWinNT())  {
		reg.ChangeTopKey(HKEY_LOCAL_MACHINE);
		if (reg.OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved")) {
			reg.DeleteValue(reg.clsId);
			reg.DeleteValue(linkreg.clsId);	// 媽僶乕僕儑儞梡 (.lnk 愱梡)
			reg.CloseKey();
		}
	}

	return S_OK;
}

/*=========================================================================
  娭  悢 丗 FastCopy 梡 export 娭悢
  奣  梫 丗 
  愢  柧 丗 
  拲  堄 丗 
=========================================================================*/
BOOL WINAPI SetMenuFlags(int flags)
{
	TRegistry	reg(HKEY_CLASSES_ROOT);

	return	reg.OpenKey(SysObj->MenuFlgRegKey) && reg.SetInt(MENU_FLAGS, flags);
}

int WINAPI GetMenuFlags(void)
{
	TRegistry	reg(HKEY_CLASSES_ROOT);
	int			val = -1;

	if (reg.OpenKey(SysObj->MenuFlgRegKey))
		reg.GetInt(MENU_FLAGS, &val);

	return	val;
}

BOOL WINAPI UpdateDll(void)
{
	int		val = GetMenuFlags();

	const GUID *oldiids[] = {
		&CLSID_ShellExtID1, // ID1 偵偼 lnkid 偼側偄
		&CLSID_ShellExtID2, &CLSID_ShellExtLinkID2,
		&CLSID_ShellExtID3, &CLSID_ShellExtLinkID3,
		&CLSID_ShellExtID4, &CLSID_ShellExtLinkID4,
		NULL };

	for (int i=0; oldiids[i]; i++) {
		TShellExtRegistry	oldReg(*oldiids[i]);
		oldReg.DeleteChildTree(oldReg.clsId);
	}

	if (val != -1) {
		DllRegisterServer();
		SetMenuFlags(val);
	}
	return	TRUE;
}

BOOL WINAPI IsRegistServer(void)
{
	return	TShellExtRegistry().OpenClsKey();
}

/*=========================================================================
	PathArray
=========================================================================*/
PathArray::PathArray(void)
{
	totalLen = num = 0;
	pathArray = NULL;
}

PathArray::~PathArray()
{
	Init();
}

void PathArray::Init(void)
{
	if (pathArray) {
		while (--num >= 0)
			free(pathArray[num]);
		free(pathArray);
		pathArray = NULL;
		totalLen = num = 0;
	}
}

int PathArray::GetMultiPath(void *multi_path, int max_len)
{
	int		total_len = 0;
	void	*FMT_STR	= IS_WINNT_V ? (void *)L"%s\"%s\"" : (void *)"%s\"%s\"";
	void	*SPACE_STR	= IS_WINNT_V ? (void *)L" " : (void *)" ";

	for (int i=0; i < num; i++) {
		if (total_len + strlenV(pathArray[i]) + 4 >= max_len)
			break;
		total_len += wsprintfV((char *)multi_path + total_len * CHAR_LEN_V, FMT_STR, i ? SPACE_STR : "\0", pathArray[i]);
	}
	return	total_len;
}

int PathArray::GetMultiPathLen(void)
{
	return	totalLen + 3 * num + 10;
}

BOOL PathArray::RegisterPath(const void *path)
{
#define MAX_ALLOC	100
	if ((num % MAX_ALLOC) == 0)
		pathArray = (void **)realloc(pathArray, (num + MAX_ALLOC) * sizeof(void *));

	int		len = strlenV(path) + 1;
	pathArray[num] = malloc(len * CHAR_LEN_V);
	memcpy(pathArray[num++], path, len * CHAR_LEN_V);
	totalLen += len;

	return	TRUE;
}

TShellExtRegistry::TShellExtRegistry(REFIID cls_name) : TRegistry(HKEY_CLASSES_ROOT)
{
	GetClsId(cls_name, clsId, sizeof(clsId));
	OpenKey("CLSID");
}

ShellExtSystem::ShellExtSystem(HINSTANCE hI)
{
	if (IS_WINNT_V = IsWinNT()) {
		DragQueryFileV = (UINT (WINAPI *)(HDROP, UINT, void *, UINT))DragQueryFileW;
		SHGetPathFromIDListV = (BOOL (WINAPI *)(LPCITEMIDLIST, void *))::GetProcAddress(::GetModuleHandle("shell32.dll"), "SHGetPathFromIDListW");
		strlenV = (int (*)(const void *))wcslen;
		wsprintfV = (int (WINAPI *)(void *, const void *,...))wsprintfW;
		MakePathV = (int (*)(void *, const void *, const void *))MakePathW;
		EMPTY_STR_V = L"";
		FMT_TOSTR_V = L" /to=\"%s\"";
		CHAR_LEN_V = sizeof(WCHAR);
	}
	else {
		DragQueryFileV = (UINT (WINAPI *)(HDROP, UINT, void *, UINT))DragQueryFileA;
		SHGetPathFromIDListV = (BOOL (WINAPI *)(LPCITEMIDLIST, void *))SHGetPathFromIDList;
		strlenV = (int (*)(const void *))strlen;
		wsprintfV = (int (WINAPI *)(void *, const void *,...))wsprintfA;
		MakePathV = (int (*)(void *, const void *, const void *))MakePath;
		EMPTY_STR_V = "";
		FMT_TOSTR_V = " /to=\"%s\"";
		CHAR_LEN_V = sizeof(char);
	}

	HInstance = hI;
	DllRefCnt = 0;

// GetSystemDefaultLCID() 偵婎偯偄偨儕僜乕僗暥帤楍傪帠慜偵儘乕僪偟偰偍偔
	LCID	curLcid = ::GetThreadLocale();
	LCID	newLcid = ::GetSystemDefaultLCID();

	if (curLcid != newLcid)
		::SetThreadLocale(newLcid);

	InitInstanceForLoadStr(hI);
	for (UINT id=IDS_RIGHTCOPY; id <= IDS_DDMOVE; id++)
		GetLoadStr(id);

	if (curLcid != newLcid)
		::SetThreadLocale(curLcid);

	char	path[MAX_PATH], *fname = NULL;
	::GetModuleFileName(hI, path, MAX_PATH);
	DllName = strdup(path);
	::GetFullPathName(DllName, MAX_PATH, path, &fname);
	if (fname)
		strcpy(fname, FASTCOPY_EXE);
	ExeName = strdup(path);

	wsprintf(path, "%s\\" FASTCOPY, DllRegKeys[0]);
	MenuFlgRegKey = strdup(path);
}

/*=========================================================================
  娭  悢 丗 DllMain
  奣  梫 丗 
  愢  柧 丗 
  拲  堄 丗 
=========================================================================*/
int APIENTRY DllMain(HINSTANCE hI, DWORD reason, PVOID)
{
	switch (reason) {
	case DLL_PROCESS_ATTACH:
		if (SysObj == NULL)
			SysObj = new ShellExtSystem(hI);
		return	TRUE;

	case DLL_THREAD_ATTACH:
		return	TRUE;

	case DLL_THREAD_DETACH:
		return	TRUE;

	case DLL_PROCESS_DETACH:
		if (SysObj) {
			delete [] SysObj->ExeName;
			delete SysObj;
			SysObj = NULL;
		}
		return	TRUE;
	}
	return	TRUE;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区在线观看精品| 国产精品久久久久久久久晋中 | 青青国产91久久久久久| 91视频国产观看| 日韩美女视频一区二区| 成人精品鲁一区一区二区| 久久久久久久久久久电影| 国产 日韩 欧美大片| 国产精品毛片无遮挡高清| 成人久久久精品乱码一区二区三区 | 亚洲一区二区中文在线| 欧美视频中文字幕| 三级欧美在线一区| 日韩欧美另类在线| 成人免费观看视频| 一个色综合av| 911精品产国品一二三产区 | 国产一区999| 国产精品久久久久久久久果冻传媒 | 成人免费毛片aaaaa**| 亚洲欧美成aⅴ人在线观看| 在线观看不卡视频| 奇米影视一区二区三区| 国产区在线观看成人精品| 91无套直看片红桃| 日日摸夜夜添夜夜添国产精品| 日韩美女一区二区三区四区| 国产成a人无v码亚洲福利| 亚洲精品免费视频| 欧美一区二区三区视频在线| 国产999精品久久久久久| 亚洲一区二区三区国产| 精品国产麻豆免费人成网站| 91一区二区三区在线播放| 视频在线在亚洲| 国产精品久久久久久久岛一牛影视| 91久久一区二区| 国产一区二区三区在线观看免费| 亚洲激情在线激情| 精品国产一区二区三区av性色| 97se亚洲国产综合自在线观| 日韩国产欧美在线视频| 国产精品剧情在线亚洲| 日韩一区国产二区欧美三区| av动漫一区二区| 久久99久久99小草精品免视看| 亚洲黄色免费网站| 久久综合久色欧美综合狠狠| 欧美在线观看一二区| 国产黄人亚洲片| 日本美女一区二区| 亚洲卡通欧美制服中文| 精品成人一区二区| 欧美电影一区二区| 一本色道亚洲精品aⅴ| 国产精品一二三| 日韩精品乱码av一区二区| 伊人开心综合网| 国产精品美女久久久久久久久 | 国产精品人成在线观看免费| 欧美一区日韩一区| 欧美日韩国产高清一区二区三区| 成人毛片视频在线观看| 国产盗摄一区二区| 激情五月婷婷综合网| 日韩精品电影在线| 亚洲h精品动漫在线观看| 亚洲欧美日韩系列| 亚洲国产精品成人综合色在线婷婷| 日韩欧美久久久| 欧美一区二区人人喊爽| 欧美三级午夜理伦三级中视频| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产女主播一区| 久久久国产午夜精品| 欧美v日韩v国产v| 日韩精品一区二区三区四区视频| 欧美色综合影院| 欧美视频一区二区三区在线观看| 99久久精品情趣| 色综合中文字幕国产| 91丨porny丨中文| 91免费看片在线观看| 99精品视频在线观看| 91浏览器打开| 91久久国产最好的精华液| 欧美日韩一级视频| 欧美一区二区视频观看视频| 欧美一区日本一区韩国一区| 欧美videofree性高清杂交| 精品国产自在久精品国产| 欧美大白屁股肥臀xxxxxx| 日韩精品专区在线影院重磅| 26uuu另类欧美| 中文字幕电影一区| 亚洲精品日韩专区silk| 亚洲二区在线观看| 奇米综合一区二区三区精品视频| 捆绑调教美女网站视频一区| 久久er99精品| 不卡视频一二三四| 色爱区综合激月婷婷| 欧美日韩一区二区欧美激情| 日韩精品资源二区在线| 国产欧美一区视频| 亚洲精品一卡二卡| 日韩av一区二区在线影视| 国产美女一区二区| 97精品久久久久中文字幕| 欧美亚一区二区| 日韩精品中文字幕在线不卡尤物| 国产女主播在线一区二区| 一区二区三区在线视频免费观看| 亚洲mv在线观看| 国产黄色成人av| 欧美日韩精品专区| ww亚洲ww在线观看国产| 国产精品久久久久一区| 亚洲成a人片在线不卡一二三区 | 欧美日韩一本到| 精品国产免费视频| 亚洲综合另类小说| 精品一区二区三区影院在线午夜| 色综合婷婷久久| 日韩一二三区视频| 亚洲人成在线播放网站岛国| 日韩av电影一区| 99精品欧美一区| 精品国产伦一区二区三区观看方式| 综合激情成人伊人| 久99久精品视频免费观看| 91蜜桃视频在线| 欧美va亚洲va| 天堂久久一区二区三区| 成人av在线播放网址| 日韩亚洲欧美综合| 亚洲欧美日韩人成在线播放| 捆绑调教一区二区三区| 欧洲一区在线观看| 国产精品视频一二三区| 美洲天堂一区二卡三卡四卡视频 | 久久69国产一区二区蜜臀| 91精品福利在线| 国产精品久久久久天堂| 国产一区二区三区在线观看免费 | 成人美女视频在线观看18| 亚洲综合色婷婷| 成人涩涩免费视频| www一区二区| 青娱乐精品在线视频| 精品视频资源站| 亚洲欧美日韩国产综合在线| 成人h动漫精品| 国产亚洲精品久| 国产一区在线观看视频| 欧美一区日韩一区| 天天色天天操综合| 欧美无砖砖区免费| 一区二区三区四区视频精品免费 | 日韩一级黄色大片| 天天色天天操综合| 欧美高清视频一二三区| 性欧美疯狂xxxxbbbb| 欧美综合色免费| 一区二区三区四区在线| 色哟哟精品一区| 亚洲日本护士毛茸茸| 不卡一区二区三区四区| 中文字幕第一区综合| 成人高清视频在线| 国产精品午夜免费| www.欧美.com| 亚洲人成在线观看一区二区| 一本到三区不卡视频| 亚洲精品成人在线| 在线精品国精品国产尤物884a| 一区二区成人在线视频| 欧美视频在线一区| 青椒成人免费视频| 精品国产乱码久久久久久1区2区| 精油按摩中文字幕久久| 久久久久久久av麻豆果冻| 国产馆精品极品| 1区2区3区欧美| 欧美无乱码久久久免费午夜一区| 亚洲尤物视频在线| 日韩一本二本av| 国产成人午夜精品5599| 136国产福利精品导航| 欧美主播一区二区三区美女| 亚洲一二三四久久| 日韩三级免费观看| 国产不卡视频在线观看| 最近日韩中文字幕| 精品视频在线免费观看| 六月丁香婷婷色狠狠久久| 中文字幕 久热精品 视频在线| 色婷婷av一区二区三区gif| 亚洲国产日韩在线一区模特| 56国语精品自产拍在线观看|