上面四个属性是CertSetCertificateContextProperty或CertGetCertificateContextProperty可以为证书上下文设置的几个属性,下面对它们的关联简单的进行分析(其中的意义我也不太清楚):

通过CERT_KEY_CONTEXT_PROP_ID属性,我们可以为证书上下文设置一个CERT_KEY_CONTEXT结构体,在MSDN中,我们可以看到结构体的定义:

typedef struct _CERT_KEY_CONTEXT {
DWORD cbSize;
HCRYPTPROV hCryptProv;
DWORD dwKeySpec;
} CERT_KEY_CONTEXT, *PCERT_KEY_CONTEXT;
设置CERT_KEY_PROV_HANDLE_PROP_ID属性时,首先获取CERT_KEY_CONTEXT_PROP_ID属性,获得CERT_KEY_CONTEXT结
构体,根据MSDN,如果CERT_KEY_CONTEXT_PROP_ID属性不存在,则创建CERT_KEY_CONTEXT_PROP_ID属性,

以上分析是基于开源代码和MSDN,不涉及windows内部细节,只供参考,开源代码来源:

CERT_KEY_CONTEXT结构体中hCryptProv元素为设置CERT_KEY_PROV_HANDLE_PROP_ID属性时输入的参数,dwKeySpec元素
为CERT_KEY_PROV_INFO_PROP_ID属性对应的CRYPT_KEY_PROV_INFO结构体中dwKeySpec;如果存在属性
CERT_KEY_CONTEXT_PROP_ID属性,则首先判断设置CERT_KEY_PROV_HANDLE_PROP_ID属性时输入的参数dwFlags是否
存在CERT_STORE_NO_RELEASE_FLAG标志,如果不存在,则要手动释放CERT_KEY_CONTEXT结构体中hCryptProv对应的
CSP,如果存在,则可以不用管,然后,更新CERT_KEY_CONTEXT中的hCryptProv元素(使用输入的参数)。

设置CERT_KEY_SPEC_PROP_ID时,根据MSDN,首先获取CERT_KEY_CONTEXT_PROP_ID属性,获得CERT_KEY_CONTEXT结
构体,如果CERT_KEY_CONTEXT_PROP_ID属性不存在,则创建CERT_KEY_CONTEXT_PROP_ID属性,对应CERT_KEY_CONTEXT结构
体中hCryptProv元素设为0,dwKeySpec元素设为输入的参数;如果CERT_KEY_CONTEXT_PROP_ID属性存在,则更新对应结构体
CERT_KEY_CONTEXT中的dwKeySpec元素,使用输入的参数。
关于这几个属性的使用,网上资料实在是少,我基本也没接触过,所以我也不知道如果去使用这些属性,这里只是对它们的联系作以下简单的
分析,微软的MSDN上也进行了简短的说明。

http://www.koders.com/c/fidE5BEC613BE70EF0FF4028C5F0B8C103AE0CEC21F.aspx

CERT_KEY_CONTEXT_PROP_ID,CERT_KEY_PROV_INFO_PROP_ID,CERT_KEY_PROV_HANDLE_PROP_ID和CERT_KEY_SPEC_PROP_ID的更多相关文章

  1. windows p12(pfx)个人证书安装过程

    证书库个人证书存储区为其中的每个证书维护一个属性CERT_KEY_PROV_INFO_PROP_ID,该属性指定了证书对应的密钥容器的相关信息,包括密钥容器名,CSP名称,CSP类型,密钥用途,以及C ...

  2. CryptAPI 数字签名 与 Openssl 验证签名

    这段时间要实现一个认证协议,分为客户端和服务器端,客户端使用windows操作系统,服务器端使用linux操作系统,在客户端下(windows),使用windows证书库中的签名证书对消息进行签名(使 ...

  3. Windows密钥容器和证书的关系

    其实CSP主要是对容器里的密钥对操作的,和证书关系不大. 容器里的密钥对有两种类型:一种是AT_KEYEXCHANGE,表示加密的密钥对,一种是AT_SIGNATURE表示签名的密钥对. 由于美国的出 ...

  4. 2019-2020-2 20174314王方正 《网络对抗》 Exp0 Kali安装

    本博旨记录安装Kali的具体步骤. 一.Vmware的安装 略. 二.Vmware的配置 选择[文件]-[新建虚拟机]. 出现新建虚拟机导向,按照以下图示配置每一步.

随机推荐

  1. C语言字符串声明

    重新学习C语言字符串声明char *a="nihao";char a[]="nihao";什么区别?前者定义的是指针,并且指向字符串常量“nihao”,后者是字 ...

  2. 文件IO操作

    前言 本文介绍使用java进行简单的文件IO操作. 操作步骤 - 读文件 1. 定义一个Scanner对象 2. 调用该对象的input函数族进行文件读取 (参见下面代码) 3. 关闭输入流 说明:其 ...

  3. UI学习笔记---第十三天可视化设计 XIB, StoryBoard

    一.XIB Xib是一种苹果提供的快速构建界面的编程方式,主要是为了简化MVC中的V的构建 Xib提供可视化的编辑界面,能大大提升页面布局效率 Xib常用操作 为控件关联事件 为空间指定delegat ...

  4. .net利用本地播放器播放视频文件代码

    前台点击按钮,执行js事件,跳转到后台代码: function funShowVideo(index) {            var iTop = (window.screen.availHeig ...

  5. static讲解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念.  被stati ...

  6. avalon框架

    http://www.cnblogs.com/rubylouvre/p/4783966.html

  7. spark新能优化之广播共享数据

    如果你的算子函数中,使用到了特别大的数据,那么,这个时候,推荐将该数据进行广播.这样的话,就不至于将一个大数据拷贝到每一个task上去.而是给每个节点拷贝一份,然后节点上的task共享该数据. 这样的 ...

  8. php文件复制

    <?php $dirname="shangchuan"; copydir($dirname."/uploads", $dirname."/hel ...

  9. VPS搭建VPN(pptpd)

    环境:Ubuntu Server 12.04 下载FQ程序 wget http://cdxf.yun.ftn.qq.com/ftn_handler/40ad8a2875adf1f7b5193f54a5 ...

  10. JSON的转换(将JSON转换为字符串,将字符串转化为JSON)

    eval()和JSON.stringify()   1.eval用于从一个字符串中解析出json 对象,创建包含 JSON 语法的 JavaScript 字符串.例如 var str = '{ &qu ...