怎么捕获双击文件图标打开文件这个动作?

xf_21 2021-01-03 11:35:46
想在打开文件时做些判断。
怎么实现这个目标?
...全文
162 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
an_bachelor 2021-01-05
  • 打赏
  • 举报
回复
引用 4 楼 xf_21 的回复:
[quote=引用 2 楼 陈仲甫 的回复:]可以关联特定的扩展名到你程序 然后你的程序带参数调用原来的关联程序
你这个思路还是挺巧妙的,不过不完全适合我的需要。 应用场景是这样的:有些文件被加密了,比如图片文件,但后缀名不变。我想在用户双击文件时先判断文件是不是加密的,如果是,执行业务流程,不是,执行默认的文件打开流程。 不想直接文件关联。[/quote] 我们以前类似项目是这么做的:所有加密过的文件都附加一个罕见的特定扩展名(例如$$$),一个文件系统过滤器驱动负责在运行时捕获读写请求,并且对鉴权过的访问透明地解密数据和发送解密后的数据。我认为实际上也可以把加密后的文件以内容标识,例如加特定文件头标识出来,用扩展名区别可能是图省事吧。 你的做法是先捕获所有启动程序的动作,再去分析被这个程序(隐式地带参数打开,也就是大多数情况下的双击打开)的文件吗?感觉有点绕了,不如直接在文件系统IO请求上去拦截,因为你最终还是要回到文件内容,真实的意图也是对内容访问进行审计,而不是审计shell的双击。
an_bachelor 2021-01-05
  • 打赏
  • 举报
回复
我也没搞过驱动,但说不能截取文件内容,感觉不可能啊?文件系统的驱动不就是干这个(文件读写)的吗? 建议你可以装个WDK,根据提供的例子来改改,也许简单功能并不难实现?
xf_21 2021-01-05
  • 打赏
  • 举报
回复
引用 8 楼 陈仲甫 的回复:
[quote=引用 4 楼 xf_21 的回复:][quote=引用 2 楼 陈仲甫 的回复:]可以关联特定的扩展名到你程序 然后你的程序带参数调用原来的关联程序
你这个思路还是挺巧妙的,不过不完全适合我的需要。 应用场景是这样的:有些文件被加密了,比如图片文件,但后缀名不变。我想在用户双击文件时先判断文件是不是加密的,如果是,执行业务流程,不是,执行默认的文件打开流程。 不想直接文件关联。[/quote] 我们以前类似项目是这么做的:所有加密过的文件都附加一个罕见的特定扩展名(例如$$$),一个文件系统过滤器驱动负责在运行时捕获读写请求,并且对鉴权过的访问透明地解密数据和发送解密后的数据。我认为实际上也可以把加密后的文件以内容标识,例如加特定文件头标识出来,用扩展名区别可能是图省事吧。 你的做法是先捕获所有启动程序的动作,再去分析被这个程序(隐式地带参数打开,也就是大多数情况下的双击打开)的文件吗?感觉有点绕了,不如直接在文件系统IO请求上去拦截,因为你最终还是要回到文件内容,真实的意图也是对内容访问进行审计,而不是审计shell的双击。[/quote] 我和驱动维护人员说,能不能做到打开文件前,我只给驱动传加密文件的id和对应key,让驱动在过滤文件操作时自己去读文件头,是加密文件就从之前提供的id和key里去找匹配的key,然后解密,说不行,说有很多碎文件还是什么,反正就是实现不了。
xf_21 2021-01-05
  • 打赏
  • 举报
回复
引用 8 楼 陈仲甫 的回复:
[quote=引用 4 楼 xf_21 的回复:][quote=引用 2 楼 陈仲甫 的回复:]可以关联特定的扩展名到你程序 然后你的程序带参数调用原来的关联程序
你这个思路还是挺巧妙的,不过不完全适合我的需要。 应用场景是这样的:有些文件被加密了,比如图片文件,但后缀名不变。我想在用户双击文件时先判断文件是不是加密的,如果是,执行业务流程,不是,执行默认的文件打开流程。 不想直接文件关联。[/quote] 我们以前类似项目是这么做的:所有加密过的文件都附加一个罕见的特定扩展名(例如$$$),一个文件系统过滤器驱动负责在运行时捕获读写请求,并且对鉴权过的访问透明地解密数据和发送解密后的数据。我认为实际上也可以把加密后的文件以内容标识,例如加特定文件头标识出来,用扩展名区别可能是图省事吧。 你的做法是先捕获所有启动程序的动作,再去分析被这个程序(隐式地带参数打开,也就是大多数情况下的双击打开)的文件吗?感觉有点绕了,不如直接在文件系统IO请求上去拦截,因为你最终还是要回到文件内容,真实的意图也是对内容访问进行审计,而不是审计shell的双击。[/quote] 我想先拦截到双击文件这个事件,得到文件名,判断文件加密与否(有文件头),加密就用画图打开,不加密,用系统默认的程序或用户指定的程序打开。想读文件进程创建之前做这个事。 有驱动,但是驱动做不到我只给他传文件密钥(每个加密文件的密钥都是不一样的)然后不管,只要进程打开一个加密文件,那么所有被这个进程写过的文件都会变成加密文件,需要应用程序预先给他传参数,设定哪些路径下的文件是不涉密的,比如word的临时文件、模板文件等。还要在打开文件时告诉驱动,某某pid的进程要打开加密文件了、文件id是什么、密钥多少,以及其它信息。所以目前的局面是一个进程不能同时打开多个加密文件,也不能同时打开明文文件和加密文件。对于图片而言,由于图片阅读器一般都用左右箭头浏览文件,存在同时打开多个加密文件或加密非加密混杂的情形,所以就没法用默认的图片阅读器看加密文件,只能设定用画图这种一次只打开一个文件的程序看加密图片。对别的扩展名的文件也存在此类问题,比如word,启动时会给加 /n 或 /w 参数,表示每打开一个文件就创建一个实例。 感觉驱动有问题,但是维护人员表示做不到我说的那样,我自己又不会做驱动,只能形成现在这种局面。
xf_21 2021-01-04
  • 打赏
  • 举报
回复
引用 3 楼 schlafenhamster 的回复:
shell 编程 ?
shell 扩展里有这样的接口吗?似乎没有
xf_21 2021-01-04
  • 打赏
  • 举报
回复
引用 2 楼 陈仲甫 的回复:
可以关联特定的扩展名到你程序 然后你的程序带参数调用原来的关联程序
你这个思路还是挺巧妙的,不过不完全适合我的需要。 应用场景是这样的:有些文件被加密了,比如图片文件,但后缀名不变。我想在用户双击文件时先判断文件是不是加密的,如果是,执行业务流程,不是,执行默认的文件打开流程。 不想直接文件关联。
schlafenhamster 2021-01-04
  • 打赏
  • 举报
回复
shell 编程 ?
schlafenhamster 2021-01-04
  • 打赏
  • 举报
回复
shellext.dll 自己写
an_bachelor 2021-01-03
  • 打赏
  • 举报
回复
可以关联特定的扩展名到你程序 然后你的程序带参数调用原来的关联程序
schlafenhamster 2021-01-03
  • 打赏
  • 举报
回复
是使用 CFileDialog ?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧