关于Windows 注册表相关的发现(C#)

0x00 前言

注意:这篇文章发出来只是记录我对注册表的一些了解,里面包含了错误的理解,不准确的理解,以及有偏差的理解。如果有哪位朋友曾经玩过WIN32的注册表,欢迎指点。这年头关于注册表的资料实在是太少了。兴许是我智商有限搜不到!

本文指引:

本文不涉及到具体实现,理论而言所有人都适合阅读。但要求读者至少知道什么是注册表,regedit怎么打开。什么是注册表项。。。。。

0x01 入门

这里我只研究右键菜单相关的功能。

在注册表中,HKEY_CLASSES_ROOT下记录着根系统文件后缀名与处理程序之间的映射,也就是文件关联。最直接的例子就是你的MP3文件由酷狗音乐还是网易云音乐打开。如果我们需要为我们的程序添加文件关联,我们就需要对这个注册表项进行操作、修改。

当然这个注册表项里面不只能处理文件关联,还有其他的高级操作:比如文件资源管理器的右键菜单项。

 

这里我先简单介绍一下,HKEY_CLASSES_ROOT这个目录下有一个绝对会存在的子注册表项:\HKEY_CLASSES_ROOT\* 。

这个注册表项主要用于处理全局后缀名,多说无益,我们就直接来点实战。这是我电脑上全局后缀名的注册表项,注意shell注册表子项可以提供最简单的右键操作,也就是没有下一级菜单的一般都在shell下面:

看到我选择了VSCode了吗?我选择了BCD文件,因为这个文件没有注册文件关联,所以由全局后缀里面的shell注册表项决定右键菜单如何显示。这里我们可以看到Open With Code这个菜单项。

这时候我们删除注册表项,看看结果:

这时候那个右键菜单已经不见了。这一个例子也算是一个引入吧,个人觉得这个例子还是有点用处的。

0x02 更多的内容

 在这里我不讲任何编程实践,想知道如何操作注册表的看这里:

(C#)https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/file-system/how-to-create-a-key-in-the-registry

这里只讨论文件后缀名以及URL Protocol相关的东西,注意是讨论,不代表我知道的多,如果有更独到的简介请在评论区骚扰我。

(2017/11/24 今天先到这里,此文章长期不定时更新,明天再写点)

 备注一下一些内容:

OpenWithProgIds:即打开方式菜单显示的内容,这也是打开方式的列表项,有待考究,毕竟WIN32的东西太过遥远。。。。微软的文档旧的不知道跑哪去了,新的有暂时找不到,在网上能搜到的都是零碎的东西,凑不成完整的知识点。。。

PersistentHandler:永久句柄,是Windows Search 搜索特性。。。没翻译完全,有兴趣可以自己看一下(地址:http://www.tomshardware.com/forum/20602-63-persistenthandler)

 

吐槽一下:当搬运工真的苦逼

 

0x04 不幸

非常不幸的是,我们无法通过CLR创建高级的Shell拓展,包括虚拟文件(类似虚拟光驱挂载目录),目前最多能做到的是通过修改注册表,创建文件关联,右键新建文件之类的操作。。待续

0x03 有用的一些博客

http://www.cnblogs.com/cssmystyle/archive/2011/05/04/2036250.html

 

posted @ 2017-11-24 21:34  丹麦的鱼  阅读(327)  评论(0编辑  收藏  举报