📄 malafilemonitor.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 + -