⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 malafilemonitor.cpp

📁 Shell扩展
💻 CPP
字号:
// MalaFileMonitor.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "MalaFileMonitor.h"

LONG nLocks = 0;
const char* szRegTable[][3]={ 
	{"CLSID\\{E6213589-AE77-4643-A61E-5D126430E073}",0,"CopyHook"},
	{"CLSID\\{E6213589-AE77-4643-A61E-5D126430E073}\\InProcServer32",0,(const char*)-1},
	{"CLSID\\{E6213589-AE77-4643-A61E-5D126430E073}\\InProcServer32","ThreadingModel","Apartment"},
	{"CLSID\\{E6213589-AE77-4643-A61E-5D126430E073}\\ProgID",0,"Bamboo.DenoFileMonitorHook.1"},
	{"Bamboo.DenoFileMonitorHook.1",0,"DenoFileMonitorHook"},
	{"Bamboo.DenoFileMonitorHook.1\\CLSID",0,"{E6213589-AE77-4643-A61E-5D126430E073}"},
	{"Directory\\Shellex\\CopyHookHandlers\\DenoFileMonitorHook",0,"{E6213589-AE77-4643-A61E-5D126430E073}"},
	{"Directory\\Shellex\\DragDropHandlers\\DenoFileMonitorHook",0,"{E6213589-AE77-4643-A61E-5D126430E073}"}
	};

HMODULE hInstance=NULL;

HRESULT APIENTRY DllUnregisterServer(void);

BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved){
	if(ul_reason_for_call==DLL_PROCESS_ATTACH)
		hInstance=(HMODULE)hModule;
    return TRUE;
}


// Used to determine whether the DLL can be unloaded by OLE
HRESULT APIENTRY DllCanUnloadNow(void)
{
//    AFX_MANAGE_STATE(AfxGetStaticModuleState());
	return nLocks==0 ? S_OK : S_FALSE;
}


// Returns a class factory to create an object of the requested type
HRESULT APIENTRY DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
    HRESULT hr = E_OUTOFMEMORY; 
    *ppv = NULL; 
    CClassFactory *pClassFactory = new CClassFactory; 
    if (pClassFactory != NULL)
        hr = pClassFactory->QueryInterface(riid, ppv); 
    return hr;
}


// DllRegisterServer - Adds entries to the system registry
HRESULT APIENTRY DllRegisterServer(void)
{
    // registers object, typelib and all interfaces in typelib
	HRESULT hr=S_OK;
	int items=sizeof(szRegTable)/sizeof(szRegTable[0]);
	char szDllPath[MAX_PATH];
	
	GetModuleFileName(hInstance,szDllPath,MAX_PATH);
	for(int i=0;i<items && SUCCEEDED(hr);i++){
		const char* szKeyName=szRegTable[i][0];
		const char* szValueName=szRegTable[i][1];
		const char* szValue=szRegTable[i][2];
		if(szValue==(const char*)-1)
			szValue=szDllPath;

            HKEY hKey;
			LONG ret=RegCreateKey(HKEY_CLASSES_ROOT,szKeyName,&hKey);
			if(ret==ERROR_SUCCESS){
					RegSetValueEx(hKey,szValueName,0,REG_SZ,(const BYTE*)szValue,strlen(szValue)+1);
					RegCloseKey(hKey);
			}
			if(ret!=ERROR_SUCCESS){
				hr= 0L;
				DllUnregisterServer();
			}
	}
	return hr;
}


// DllUnregisterServer - Removes entries from the system registry
HRESULT APIENTRY DllUnregisterServer(void)
{
	HRESULT hr=S_OK;
	LONG ret=0;
	int items=sizeof(szRegTable)/sizeof(szRegTable[0]);

	for(int i=items-1;i>=0;i--){

	const char* szKeyName=szRegTable[i][0];

	if( (i==items-1) || stricmp(szRegTable[i+1][0],szKeyName)!=0)

	ret=RegDeleteKey(HKEY_CLASSES_ROOT,szKeyName);
	if(ret!=ERROR_SUCCESS)
		//hr=SELFREG_E_CLASS;
		hr = 0L;
	}
	return hr;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -