上面四个属性是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. LeetCode Minimum Path Sum (简单DP)

    题意: 给一个n*m的矩阵,每次可以往下或右走,经过的格子中的数字之和就是答案了,答案最小为多少? 思路: 比较水,只是各种空间利用率而已. 如果可以在原空间上作修改. class Solution ...

  2. ML2 – Address Population

    Why do we need it, whatever it is? VM unicast, multicast and broadcast traffic flow is detailed in m ...

  3. 说说Audition消除歌曲中的人声

    今天再说说消除人声,音乐中人声的消除有多种方法,但都很难完全消除,而且效果越好越难消除,一首音效极佳的立体声歌曲是无法完全消除人声的.本人常用的是以下三种方法.第1种如下图,此方法简单,但是完成后变成 ...

  4. ZOJ 1178 Booklet Printing

    原题链接 题目大意:书本印刷都是用大开的纸张对折.比如一个册子一共4页,为了方便装订,外侧印刷1.4页,内侧印刷2.3页,这样对折之后就可以按照正常阅读习惯翻页了.此题目的就是给出书的总页数,要求计算 ...

  5. URIEncoding和useBodyEncodingForURI详解

    之前关于编码的问题已经总结过两次了,有些地方写的很粗略.http://blog.itpub.net/29254281/viewspace-775925/http://blog.itpub.net/29 ...

  6. install kinect driver for ARM---38

    原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ The video describes connecting a Microsoft Kinect to ...

  7. UI组件(思维导图)

  8. P364 实战练习(多线程)

    尝试定义一个继承Thread类的类,并覆盖run( )方法,在run( )方法中每隔1000毫秒打印一句话. 编写代码如下: 编写PractiseThread类: package org.hanqi. ...

  9. IOS中货币高精度要求使用NSDecialNumber、

    float a = 0.01;        int b =99999999;        double c = 0.0;        c = a * b; //如果单纯的使用double会导致数 ...

  10. JS构造函数详解

    //构造函数 //使自己的对象多次复制,同时实例根据设置的访问等级可以访问其内部的属性和方法 //当对象被实例化后,构造函数会立即执行它所包含的任何代码 function myObject(msg) ...