Widows 注册表

HKEY_CLASSES_ROOT在此关键字之下,可以看到有一个CLSID关键字。在CLSID关键字之下列有系统中安装的所有组件的CLSID。注册表CLSID是一个具有如下格式的串:00000010-0000-0010-8000-00AA006D2EA4

HKEY_CLASSES_ROOT的开头,列出的将是各种应用程序所注册的文件扩展名。在扩展名之后,可以看到许多其他的名字。此类名字的大多数被称作是ProgID,表示是程序员定义的标识符。某些名称表示的不是ProgID而是一些特殊的关键字.

  • CLSID
  • AppID—此关键字下的子关键字的作用是将某个APPID(应用程序ID)映射成某个远程服务器名称。分式COM(DCOM)将用到此关键字。
  • 组件类别—注册表的这一分支可以将CATID(组件类别ID)映射成某个特定的组件类别。
  • Interface—此关键字用于将IID映射成与某个接口相关的信息。这些信息主要用于在跨进程边界使用接口的情况。
  • Licenses—保存的是授权使用COM组件的一些认可信息。
  • TypeLib—类型库关键字所保存的是关于接口成员函数所用参数的信息。另外还有其他一些信息。此关键字可以将一个LIBID映射成存储类型库的文件名称。

ProgID所谓ProgID指的是程序员给某个CLSID指定的一个程序员易记的名称。

ProgID命名约定

<Program>.<Component>.<Version>

如下图:

在许多情况下,客户并不关心它所连接的组件的版本究竟是什么。因为组件经常会有一个与版本号无关的ProgID。此ProgID被映射成所安装的最新版本的组件。与版本无关的 的命名约定是将上面约定中的版本号去掉。

ProgID注册表格式

ProgID及与版本无关的ProgID被列在组件CLSID下面。

ProgID的主要作用是获取相应的CLSID。在每一个CLSID项中查找查个ProgID将是非常低效的。因此在 的下面也将直接列出ProgID。由于ProgID不是针对最终用户而定义的,因此ProgID关键字的缺省值为用户易记的名称。在 之下有一个名为CLSID的关键字,其缺省值为组件的CLSID。如下图所示:

与版本号无关的ProgID 也直接被列在HKEY_CLASSES_ROOT下面。它们还有另外一个关键字CurVer,其缺少值为组件当前版本的ProgID

 

ProgIDCLSID的转换

CLSIDFromProgID

ProgIDFromCLSID

组件的自注册

为把组件注册到注册表,在DLL一定要输出如下两个函数:

STDAPI DllRegisterServer();     // 注册

STDAPI DllUnregisterServer();   // 反注册

我们使用REGSVR32.exe注册某个组件或反注册某个组,其实就是调用这两个函数的。

本文地址:http://www.cnblogs.com/fangyukuan/archive/2010/06/10/1755958.html

COM笔记-Widows 注册表的更多相关文章

  1. Widows 注册表 HKEY_CLASSES_ROOT

    Widows 注册表 HKEY_CLASSES_ROOT在此关键字之下,可以看到有一个CLSID关键字.在CLSID关键字之下列有系统中安装的所有组件的CLSID.注册表CLSID是一个具有如下格式的 ...

  2. 20151222jquery学习笔记--验证注册表单

    $(function () { $('#search_button').button({ icons : { primary : 'ui-icon-search', }, }); $('#reg'). ...

  3. windows注册表学习笔记

    注册表,想起来了就学学,方便操作.无需把它当成重要学问,今日就学一波,作为了解. 一.注册表清理脚本 主要是删除临时文件,旧文件.并不能够删除无效的键 @echo off del/f/s/q %sys ...

  4. 网上查了点关于windows注册表的知识,发现基本名词没理解好,于是整理这篇笔记(可能个别地方不准确,先这么理解吧),有了这个理解,再去看网上的文章,就差不读了

    打开注册表编辑器,左边窗格中显示的是“注册表项”,右边窗格中显示的是“注册表项的项值” 子项:子项是相对父项而言的,在某一个项(父项)下面出现的项(子项) 值项:一个项可以有一个或多个项值,当前被使用 ...

  5. C#高级编程笔记(22至25章节)文件\注册表\权限\事务

    22安全(using System.Security.Principal;) AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.Wi ...

  6. 【读书笔记】C#高级编程 第二十四章 文件和注册表操作

    (一)文件和注册表 对于文件系统操作,相关的类几乎都在System.IO名称空间中,而注册表操作由System.Win32名称空间中的类来处理. (二)管理文件系统 System.MarshalByR ...

  7. 黑客常用的windows注册表大全

    目录 使系统没有"运行"选项                        1让操作系统无"关闭系统" 选项                    2让操作系统 ...

  8. Win10 远程桌面连接出现“要求的函数不受支持”的解决办法之修改注册表

    问题起因 笔者自己在阿里云上搞服务器,有一台 Windows Server 必须通过远程桌面连接来管理,由于没能完全关掉 Win10 自带的烦人的系统更新,导致昨天安装完更新后出现了连接远程桌面时“要 ...

  9. 常用的windows注册表大全

    目录 使系统没有“运行”选项                        1让操作系统无“关闭系统” 选项                    2让操作系统无“注销”选项              ...

随机推荐

  1. 【网络IO系列】 预备知识 操作系统之内核程序和用户程序

    一.概念 首先我们先来复习一下操作系统的概念和作用 操作系统是用户和硬件之间的一层媒介程序,为上提供编程接口,为下调用资源,管理驱动,以使用硬件. 从以上的表述我们可以看出OS的两点作用,第一个是对下 ...

  2. MAC系统如果碰到报错信息:sudo:command not found

    ** 一般要考虑最近是否有别人或者自己修改过环境变量,这种报错往往是因为环境变量设置错误导致的. ** 1. 首先要获得创建,或者是打开bash_profile的权限,请在命令行中输入: export ...

  3. .h .cpp区别

    首先,我们可以将所有东西都放在一个.cpp文件内. 然后编译器就将这个.cpp编译成.obj,obj是什么东西? 就是编译单元了.一个程序,可以由一个编译单元组成, 也可以有多个编译单元组成. 如果你 ...

  4. etcd中watch源码解读

    etcd中watch的源码解析 前言 client端的代码 Watch newWatcherGrpcStream run newWatchClient serveSubstream server端的代 ...

  5. ZYNQ Linux 移植:包含petalinux移植和手动移植debian9

    参考: https://electronut.in/workflow-for-using-linux-on-xilinx-zynq/ https://blog.csdn.net/m0_37545528 ...

  6. SSM框架,在Html界面利用ajax,json,jQuery实现省市区下拉框联动

    1.先生成省市区表格 2.建立实体类 3.在html画出下拉框 <select id="province"> <option value="" ...

  7. 第八篇--编写Windows服务

    编写service服务参考网址:https://blog.csdn.net/nodeathphoenix/article/details/24181509 vc获得显示器状态(捕获息屏.亮屏网址):h ...

  8. golang可执行文件瘦身(缩小文件大小)

    起因 golang部署起来极其遍历,但有时候希望对可执行文件进行瘦身(缩小文件大小) 尝试 情况允许情况下,交叉编译为32位 删除不必要的符号表.调试信息 尝试用对应平台的upx打压缩壳 解决 经过多 ...

  9. 从零开始的Java RASP实现(一)

    目录 0 从零开始的Java RASP实现(一) 1 javaagent 1.1 Main方法启动前 概念介绍: 如何使用 创建agent 创建main 1.2 JVM启动后 attach机制 启动一 ...

  10. 构建前端第3篇之---使用scss

    张艳涛 写于2021-1-20 主要解决俩个问题: 在单个vue文件中 <style rel="stylesheet/scss" lang="scss"& ...