引言

CodeProject上有一篇文章, 讲了怎么进行COM Hook.

http://www.codeproject.com/Articles/7309/ICopyHook-implementation

Com 接口 Hook 后, 当Windows特定操作发生时,

会由我们重载的COM接口实现, 来决定那个COM操作成功还是失败.

达到Windows行为管控的目的.

对于新手来说, 那个文章看完,还达不到能随意加入自己想要的COM接口的目的.

经过试验, Vs2010产生的ATL COM DLL 框架很难按照那篇文章加入想要的COM接口.

我采用的方法是, 用VC6产生COM DLL 框架, 加入自己想要的COM接口重载, 然后用VS2010打开,修改逻辑, 编译.

我的本来目的,是要加入一个IFileOperation接口, 实现在Win7上,管控文件操作.

因为在Win7上, 用API Hook 的方法,来拦截文件操作, 无法同时得到源文件和目标文件的全路径.

在搞这个之前,先彻底搞清楚, 如何利用VS编译器,加入自己想要的COM接口.

学了这篇文章,收获不小.

经过试验, 将最简化的加COM接口到COM DLL的试验, 记录如下:

建立ATL COM DLL 工程

这个ATL Object 的属性,默认属性符合要求,不用改

修改加入的Hook类 CLsDOHook

// LsDOHook.h : Declaration of the CLsDOHook#ifndef __LSDOHOOK_H_
#define __LSDOHOOK_H_#include "resource.h"       // main symbols
#include <SHLOBJ.H> ///< @note 3. 加入ICopyHook 头文件定义/
// CLsDOHook
/// CLsDOHook mean's LostSpeed Dir Operation Hook Class
class ATL_NO_VTABLE CLsDOHook : public CComObjectRootEx<CComSingleThreadModel>,public CComCoClass<CLsDOHook, &CLSID_LsDOHook>,public ICopyHook, ///< @note 1. 手工加入要继承的COM类public IDispatchImpl<ILsDOHook, &IID_ILsDOHook, &LIBID_LSCOMHOOKSHELLEXTLib>
{
public:CLsDOHook(){}/// @note 4. 加入必须实现的COM虚函数接口定义/// 由SHLOBJ.H抄来的纯虚函数定义, 将 PURE 修饰拿掉 // *** ICopyHook methods ***
//     STDMETHOD_(UINT,CopyCallback) (THIS_ HWND hwnd, UINT wFunc, UINT wFlags, LPCWSTR pszSrcFile, DWORD dwSrcAttribs,
//      LPCWSTR pszDestFile, DWORD dwDestAttribs) PURE;STDMETHOD_(UINT,CopyCallback) (THIS_ HWND hwnd, UINT wFunc, UINT wFlags, LPCWSTR pszSrcFile, DWORD dwSrcAttribs,LPCWSTR pszDestFile, DWORD dwDestAttribs);DECLARE_REGISTRY_RESOURCEID(IDR_LSDOHOOK)DECLARE_PROTECT_FINAL_CONSTRUCT()BEGIN_COM_MAP(CLsDOHook)COM_INTERFACE_ENTRY(ILsDOHook)COM_INTERFACE_ENTRY(IDispatch)/// @note 2. 指定 ICopyHook 由 CLsDOHook处理COM_INTERFACE_ENTRY_IID(IID_IShellCopyHook, CLsDOHook)
END_COM_MAP()// ILsDOHook
public:
};#endif //__LSDOHOOK_H_
// LsDOHook.cpp : Implementation of CLsDOHook
#include "stdafx.h"
#include "LsComHookShellExt.h"
#include "LsDOHook.h"/
// CLsDOHook/// @note 5. 实现继承来的纯虚COM接口
STDMETHODIMP_(UINT) CLsDOHook::CopyCallback(THIS_ HWND hwnd, UINT wFunc, UINT wFlags, LPCWSTR pszSrcFile, DWORD dwSrcAttribs,LPCWSTR pszDestFile, DWORD dwDestAttribs)
{/// do some thing .../// 工程需要选择 "Win32 Unicode Release MinDependency" 编译 !::MessageBoxW(NULL, pszSrcFile, pszDestFile, MB_OK | MB_ICONINFORMATION);return IDYES; ///< 允许
}/// @note 6. 按照 msdn CopyCallback 说明, 修改 LsDOHook.rgs
/// 使Windows操作和COM DLL关联
/** msdn CopyCallback description
http://msdn.microsoft.com/en-us/library/windows/desktop/bb776048(v=vs.85).aspxCopy hook handlers for folders are registered under the following key. HKEY_CLASSES_ROOTDirectoryShellexCopyHookHandlersyour_copyhook(Default) = {copyhook CLSID value}Copy hook handlers for printers are registered under the following key. HKEY_CLASSES_ROOTPrintersShellexCopyHookHandlersyour_copyhook(Default) = {copyhook CLSID value}
*/

修改.rgs文件, 使COMDLL的Hook操作和Windows动作关联

HKCR
{LsComHookShellExt.LsDOHook.1 = s 'LsDOHook Class'{CLSID = s '{03E13B03-DE82-41D8-BAEF-E61927F589C2}'}LsComHookShellExt.LsDOHook = s 'LsDOHook Class'{CLSID = s '{03E13B03-DE82-41D8-BAEF-E61927F589C2}'CurVer = s 'LsComHookShellExt.LsDOHook.1'}NoRemove CLSID{ForceRemove {03E13B03-DE82-41D8-BAEF-E61927F589C2} = s 'LsDOHook Class'{ProgID = s 'LsComHookShellExt.LsDOHook.1'VersionIndependentProgID = s 'LsComHookShellExt.LsDOHook'ForceRemove 'Programmable'InprocServer32 = s '%MODULE%'{val ThreadingModel = s 'Apartment'}'TypeLib' = s '{FDBCC028-75E1-48FA-9070-78C9CE2B8B0D}'}}Directory{Shellex{CopyHookHandlers{LsDOHook = s '{03E13B03-DE82-41D8-BAEF-E61927F589C2}'}}}
}

注册COM DLL

C:\Documents and Settings\Administrator>regsvr32 C:\lstmp\LsComHookShellExt\Rele
aseUMinDependency\LsComHookShellExt.dll

重启计算机, 试验Hook效果

当我们拷贝一个目录到另一个目录时, 操作会进入我们的 COM Shell 扩展DLL

备注

有了上面的试验基础,  我们添加想要的 COM接口 到 我们自己的Shell Extension DLL, 应该很容易了~~

note : add COM interface To Shell Extension DLL相关推荐

  1. VC++钩子DLL框架代码(MFC Extension DLL using shared MFC DLL)

    // HookDllDemo.cpp : Defines the initialization routines for the DLL. // #include "stdafx.h&quo ...

  2. 【解决】from win32com.shell import shellcon, shell ImportError: DLL load failed: 找不到指定的程序。

    某天用activate myenv激活虚拟环境的时候出现了这个错误. from win32com.shell import shellcon, shell ImportError: DLL load ...

  3. 【解决】安装CDR时提示:Corel Graphics-Windows Shell Extension以及CDR不显示缩略图

    文章目录 1. 按 2. 安装CorelDRAW_X4_SP2精简增强版后如何再安装其他高版本的CDR 1. 按 若ShellExt. msf控件未正确安装,则会导致CDR不能正常显示缩略图.此时建议 ...

  4. 【富文本】安装CDR时提示:Corel Graphics-Windows Shell Extension以及CDR不显示缩略图的解决方案

    本文已迁移至:https://coco56.blog.csdn.net/article/details/104650411

  5. Slimming Down Windows XP The Complete Guide 【 10章完整版 】

    网上有一个汉化好的 压榨XP手册 是基于他的汉化版 现在我贴出的是英文原版 你还可以向作者捐献15$以便获得一个自动优化XP的脚本 原文:http://www.bold-fortune.com/for ...

  6. BCompare 右键菜单不显示的问题(完美解决办法)

    By: Ailson Jack Date: 2019.07.13 个人博客:http://www.only2fire.com/ 本文在我博客的地址是:http://www.only2fire.com/ ...

  7. mac下载的java是zip_【7-Zip和java For Mac哪个好用】7-Zip和java For Mac对比-ZOL下载

    7-Zip解压软件是一个开放源码的数据压缩程序,7-Zip主要用在Microsoft Windows操作系统,Unix-like的操作系统,zol提供7-Zip解压软件官方版下载. 7-Zip是一款G ...

  8. Advanced Linq - Dynamic Linq query library: Add support for 'Contains' extension

    原文链接: http://blog.walteralmeida.com/2010/05/advanced-linq-dynamic-linq-library-add-support-for-conta ...

  9. GNOME Shell Extensions开发介绍

    前两天看到这篇介绍gnome shell extensions 开发的文章,来自blog.fpmurphy.com 很不错,特转来留着.有兴趣的人看看吧. GNOME Shell Extensions ...

最新文章

  1. weblogic java虚拟机_weblogic server 性能及调优-调优 java 虚拟机.doc
  2. 移动端适配与响应式布局
  3. LeetCode-反转链表
  4. 万网绑定二级域名_Hexo+yilia主题网站绑定个性域名
  5. 终端模拟器编译c语言,编写你自己的Terminal emulator
  6. Pandas知识点-排序操作
  7. UI设计实用素材|线框套件 WRFRM
  8. Android Layout XML属性
  9. 软件设计师真题及解析
  10. 程序员和码农有什么不同?从这三个单词就看得出来
  11. 汇编c语言环境搭建原理,什么是一个精简的C语言环境 怎么搭建?
  12. 图谱笔记(概念梳理)
  13. WRF4.2安装过程全记录
  14. javaweb学习(5)--Cookie
  15. Photoshop 系列:照片调色记录
  16. Android开发屏幕适配全攻略
  17. android 很多牛叉界面库github地址
  18. matlab读取xlsx文件,将大Excel(xlsx)文件加载到matlab中
  19. STM32CubeMX系列09——SDIO(SD卡读写、SD卡移植FATFS文件系统)
  20. RGBA和ARGB有区别吗

热门文章

  1. Java中单例设计模式是什么,java中单例设计模式
  2. 调用阿里API实现手机号归属地查询
  3. 笔记本无线对接--点对点连接上网设置方案
  4. “数字公务员”纷纷上岗,提高12345热线工单处理效率
  5. uniapp微信一键登录微信授权
  6. 【专利查询、下载及撰写】
  7. win10搭建pytorch环境记录
  8. 洛谷[P1427]小鱼的数字游戏
  9. Unity网络游戏之客户端(同步)
  10. 3D对战网络游戏C++框架:服务器端与客户端需求分析