diff --git a/mingw-w64-headers/include/dpapi.h b/mingw-w64-headers/include/dpapi.h
new file mode 100644
index 0000000..1e685ea
--- /dev/null
+++ b/mingw-w64-headers/include/dpapi.h
@@ -0,0 +1,96 @@
+/**
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+
+#ifndef __DPAPI_H__
+#define __DPAPI_H__
+
+#ifndef DPAPI_IMP
+#define DPAPI_IMP DECLSPEC_IMPORT
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
+
+#define CRYPTPROTECT_DEFAULT_PROVIDER { 0xdf9d8cd0, 0x1501, 0x11d1,{ 0x8c, 0x7a, 0x00, 0xc0, 0x4f, 0xc2, 0x97, 0xeb } }
+
+#define szFORCE_KEY_PROTECTION "ForceKeyProtection"
+
+#define dwFORCE_KEY_PROTECTION_DISABLED 0x0
+#define dwFORCE_KEY_PROTECTION_USER_SELECT 0x1
+#define dwFORCE_KEY_PROTECTION_HIGH 0x2
+
+#define CRYPTPROTECT_PROMPT_ON_UNPROTECT 0x1
+#define CRYPTPROTECT_PROMPT_ON_PROTECT 0x2
+#define CRYPTPROTECT_PROMPT_RESERVED 0x04
+#define CRYPTPROTECT_PROMPT_STRONG 0x08
+#define CRYPTPROTECT_PROMPT_REQUIRE_STRONG 0x10
+
+#define CRYPTPROTECT_UI_FORBIDDEN 0x1
+#define CRYPTPROTECT_LOCAL_MACHINE 0x4
+#define CRYPTPROTECT_CRED_SYNC 0x8
+#define CRYPTPROTECT_AUDIT 0x10
+#define CRYPTPROTECT_NO_RECOVERY 0x20
+#define CRYPTPROTECT_VERIFY_PROTECTION 0x40
+#define CRYPTPROTECT_CRED_REGENERATE 0x80
+
+#define CRYPTPROTECT_FIRST_RESERVED_FLAGVAL 0x0fffffff
+#define CRYPTPROTECT_LAST_RESERVED_FLAGVAL 0xffffffff
+
+#define CRYPTPROTECTMEMORY_BLOCK_SIZE 16
+
+#define CRYPTPROTECTMEMORY_SAME_PROCESS 0x0
+#define CRYPTPROTECTMEMORY_CROSS_PROCESS 0x1
+#define CRYPTPROTECTMEMORY_SAME_LOGON 0x2
+
+#ifndef CRYPTO_BLOBS_DEFINED
+#define CRYPTO_BLOBS_DEFINED
+  typedef struct _CRYPTOAPI_BLOB {
+    DWORD cbData;
+    BYTE *pbData;
+  } CRYPT_INTEGER_BLOB,*PCRYPT_INTEGER_BLOB;
+
+  typedef CRYPT_INTEGER_BLOB CERT_BLOB,*PCERT_BLOB;
+  typedef CRYPT_INTEGER_BLOB CERT_NAME_BLOB,*PCERT_NAME_BLOB;
+  typedef CRYPT_INTEGER_BLOB CERT_RDN_VALUE_BLOB,*PCERT_RDN_VALUE_BLOB;
+  typedef CRYPT_INTEGER_BLOB CRL_BLOB,*PCRL_BLOB;
+  typedef CRYPT_INTEGER_BLOB CRYPT_ATTR_BLOB,*PCRYPT_ATTR_BLOB;
+  typedef CRYPT_INTEGER_BLOB CRYPT_DATA_BLOB,*PCRYPT_DATA_BLOB;
+  typedef CRYPT_INTEGER_BLOB CRYPT_DER_BLOB,*PCRYPT_DER_BLOB;
+  typedef CRYPT_INTEGER_BLOB CRYPT_DIGEST_BLOB,*PCRYPT_DIGEST_BLOB;
+  typedef CRYPT_INTEGER_BLOB CRYPT_HASH_BLOB,*PCRYPT_HASH_BLOB;
+  typedef CRYPT_INTEGER_BLOB CRYPT_OBJID_BLOB,*PCRYPT_OBJID_BLOB;
+  typedef CRYPT_INTEGER_BLOB CRYPT_UINT_BLOB,*PCRYPT_UINT_BLOB;
+  typedef CRYPT_INTEGER_BLOB DATA_BLOB,*PDATA_BLOB;
+#endif
+
+  typedef struct _CRYPTPROTECT_PROMPTSTRUCT {
+    DWORD cbSize;
+    DWORD dwPromptFlags;
+    HWND hwndApp;
+    LPCWSTR szPrompt;
+  } CRYPTPROTECT_PROMPTSTRUCT,*PCRYPTPROTECT_PROMPTSTRUCT;
+
+  DPAPI_IMP WINBOOL WINAPI CryptProtectData (DATA_BLOB *pDataIn, LPCWSTR szDataDescr, DATA_BLOB *pOptionalEntropy, PVOID pvReserved, CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct, DWORD dwFlags, DATA_BLOB *pDataOut);
+  DPAPI_IMP WINBOOL WINAPI CryptUnprotectData (DATA_BLOB *pDataIn, LPWSTR *ppszDataDescr, DATA_BLOB *pOptionalEntropy, PVOID pvReserved, CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct, DWORD dwFlags, DATA_BLOB *pDataOut);
+  DPAPI_IMP WINBOOL WINAPI CryptProtectMemory (LPVOID pDataIn, DWORD cbDataIn, DWORD dwFlags);
+  DPAPI_IMP WINBOOL WINAPI CryptUnprotectMemory (LPVOID pDataIn, DWORD cbDataIn, DWORD dwFlags);
+#if NTDDI_VERSION >= 0x06020000
+  WINBOOL WINAPI CryptProtectDataNoUI (DATA_BLOB *pDataIn, LPCWSTR szDataDescr, DATA_BLOB *pOptionalEntropy, PVOID pvReserved, CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct, DWORD dwFlags, const BYTE *pbOptionalPassword, DWORD cbOptionalPassword, DATA_BLOB *pDataOut);
+  WINBOOL WINAPI CryptUnprotectDataNoUI (DATA_BLOB *pDataIn, LPWSTR *ppszDataDescr, DATA_BLOB *pOptionalEntropy, PVOID pvReserved, CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct, DWORD dwFlags, const BYTE *pbOptionalPassword, DWORD cbOptionalPassword, DATA_BLOB *pDataOut);
+#endif
+#if NTDDI_VERSION >= 0x06000000
+  DPAPI_IMP WINBOOL WINAPI CryptUpdateProtectedState (PSID pOldSid, LPCWSTR pwszOldPassword, DWORD dwFlags, DWORD *pdwSuccessCount, DWORD *pdwFailureCount);
+#endif
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/mingw-w64-headers/include/wincrypt.h b/mingw-w64-headers/include/wincrypt.h
index dc5c6d3..7f2f4f2 100644
--- a/mingw-w64-headers/include/wincrypt.h
+++ b/mingw-w64-headers/include/wincrypt.h
@@ -9,25 +9,29 @@
 #include <_mingw.h>
 #include <_mingw_unicode.h>
 #include <guiddef.h>
-#include <bcrypt.h>
-#include <ncrypt.h>
 #include <winapifamily.h>
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
+
 #ifndef _HRESULT_DEFINED
 #define _HRESULT_DEFINED
   typedef LONG HRESULT;
 #endif
 
 #ifndef DECLSPEC_IMPORT
+#ifndef __WIDL__
 #define DECLSPEC_IMPORT __declspec(dllimport)
+#else
+#define DECLSPEC_IMPORT
+#endif
 #endif
 
 #ifndef WINIMPM
-#define WINIMPM	DECLSPEC_IMPORT
+#define WINIMPM DECLSPEC_IMPORT
 #endif
 
 #include <apisetcconv.h>
@@ -48,20 +52,27 @@
 #ifndef IN
 #define IN
 #endif
+
 #ifndef OUT
 #define OUT
 #endif
+
 #ifndef OPTIONAL
 #define OPTIONAL
 #endif
 #endif
 
+#ifndef WINCRYPT32API
 #define WINCRYPT32API WINIMPM
+#endif
+
+#ifndef WINCRYPT32STRINGAPI
 #define WINCRYPT32STRINGAPI WINIMPM
+#endif
 
 #define GET_ALG_CLASS(x) (x & (7 << 13))
 #define GET_ALG_TYPE(x) (x & (15 << 9))
-#define GET_ALG_SID(x) (x & (511))
+#define GET_ALG_SID(x) (x & 511)
 
 #define ALG_CLASS_ANY (0)
 #define ALG_CLASS_SIGNATURE (1 << 13)
@@ -90,6 +101,9 @@
 #define ALG_SID_DSS_ANY 0
 #define ALG_SID_DSS_PKCS 1
 #define ALG_SID_DSS_DMS 2
+#if NTDDI_VERSION >= 0x06000000
+#define ALG_SID_ECDSA 3
+#endif
 
 #define ALG_SID_DES 1
 #define ALG_SID_3DES 3
@@ -99,6 +113,8 @@
 #define ALG_SID_SAFERSK64 7
 #define ALG_SID_SAFERSK128 8
 #define ALG_SID_3DES_112 9
+#define ALG_SID_SKIPJACK 10
+#define ALG_SID_TEK 11
 #define ALG_SID_CYLINK_MEK 12
 #define ALG_SID_RC5 13
 #define ALG_SID_AES_128 14
@@ -106,9 +122,6 @@
 #define ALG_SID_AES_256 16
 #define ALG_SID_AES 17
 
-#define ALG_SID_SKIPJACK 10
-#define ALG_SID_TEK 11
-
 #define CRYPT_MODE_CBCI 6
 #define CRYPT_MODE_CFBP 7
 #define CRYPT_MODE_OFBP 8
@@ -124,6 +137,9 @@
 #define ALG_SID_DH_EPHEM 2
 #define ALG_SID_AGREED_KEY_ANY 3
 #define ALG_SID_KEA 4
+#if NTDDI_VERSION >= 0x06000000
+#define ALG_SID_ECDH 5
+#endif
 
 #define ALG_SID_MD2 1
 #define ALG_SID_MD4 2
@@ -149,6 +165,10 @@
 #define ALG_SID_TLS1_MASTER 6
 #define ALG_SID_SCHANNEL_ENC_KEY 7
 
+#if NTDDI_VERSION >= 0x06000000
+#define ALG_SID_ECMQV 1
+#endif
+
 #define ALG_SID_EXAMPLE 80
 
 #ifndef ALGIDDEF
@@ -200,25 +220,28 @@
 #define CALG_SHA_256 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_256)
 #define CALG_SHA_384 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_384)
 #define CALG_SHA_512 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_512)
+#if NTDDI_VERSION >= 0x06000000
+#define CALG_ECDH (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_ECDH)
+#define CALG_ECMQV (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY | ALG_SID_ECMQV)
+#define CALG_ECDSA (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_ECDSA)
+#endif
 
-#if (_WIN32_WINNT >= 0x0600)
-#define CALG_ECDH 0x0000aa05
-#define CALG_ECDSA 0x00002203
-#endif /*(_WIN32_WINNT >= 0x0600)*/
-
-#ifndef __HCRYPTKEY__
-#define __HCRYPTKEY__
 /* In ncrypt.h too */
+#ifndef HCRYPTPROV_DEFINED
+#define HCRYPTPROV_DEFINED
+  typedef ULONG_PTR HCRYPTHASH;
   typedef ULONG_PTR HCRYPTKEY;
   typedef ULONG_PTR HCRYPTPROV;
 #endif
-  typedef ULONG_PTR HCRYPTHASH;
 
-#define CRYPT_VERIFYCONTEXT 0xF0000000
+#define CRYPT_VERIFYCONTEXT 0xf0000000
 #define CRYPT_NEWKEYSET 0x8
 #define CRYPT_DELETEKEYSET 0x10
 #define CRYPT_MACHINE_KEYSET 0x20
 #define CRYPT_SILENT 0x40
+#if NTDDI_VERSION >= 0x06000000
+#define CRYPT_DEFAULT_CONTAINER_OPTIONAL 0x80
+#endif
 
 #define CRYPT_EXPORTABLE 0x1
 #define CRYPT_USER_PROTECTED 0x2
@@ -236,27 +259,27 @@
 #define CRYPT_VOLATILE 0x1000
 #define CRYPT_SGCKEY 0x2000
 #define CRYPT_ARCHIVABLE 0x4000
+#if NTDDI_VERSION >= 0x06000000
+#define CRYPT_FORCE_KEY_PROTECTION_HIGH 0x8000
+#endif
+#define CRYPT_USER_PROTECTED_STRONG 0x100000
 
 #define RSA1024BIT_KEY 0x4000000
 
 #define CRYPT_SERVER 0x400
 
-#define KEY_LENGTH_MASK 0xFFFF0000
+#define KEY_LENGTH_MASK 0xffff0000
 
 #define CRYPT_Y_ONLY 0x1
 #define CRYPT_SSL2_FALLBACK 0x2
 #define CRYPT_DESTROYKEY 0x4
+#define CRYPT_DECRYPT_RSA_NO_PADDING_CHECK 0x20
 #define CRYPT_OAEP 0x40
-
 #define CRYPT_BLOB_VER3 0x80
 #define CRYPT_IPSEC_HMAC_KEY 0x100
 
-#define CRYPT_DECRYPT_RSA_NO_PADDING_CHECK 0x20
-
 #define CRYPT_SECRETDIGEST 0x1
-
 #define CRYPT_OWF_REPL_LM_HASH 0x1
-
 #define CRYPT_LITTLE_ENDIAN 0x1
 
 #define CRYPT_NOHASHOID 0x1
@@ -323,6 +346,8 @@
 #define KP_VERIFY_PARAMS 40
 #define KP_HIGHEST_VERSION 41
 #define KP_GET_USE_COUNT 42
+#define KP_PIN_ID 43
+#define KP_PIN_INFO 44
 
 #define PKCS5_PADDING 1
 #define RANDOM_PADDING 2
@@ -388,6 +413,15 @@
 #define PP_KEYSPEC 39
 #define PP_ENUMEX_SIGNING_PROT 40
 #define PP_CRYPT_COUNT_KEY_USE 41
+#if NTDDI_VERSION >= 0x06000000
+#define PP_USER_CERTSTORE 42
+#define PP_SMARTCARD_READER 43
+#define PP_SMARTCARD_GUID 45
+#define PP_ROOT_CERTSTORE 46
+#endif
+#if NTDDI_VERSION >= 0x06020000
+#define PP_SMARTCARD_READER_ICON 47
+#endif
 
 #define CRYPT_FIRST 1
 #define CRYPT_NEXT 2
@@ -420,6 +454,11 @@
 #define PP_KEYEXCHANGE_ALG 14
 #define PP_SIGNATURE_ALG 15
 #define PP_DELETEKEY 24
+#if NTDDI_VERSION >= 0x06000000
+#define PP_PIN_PROMPT_STRING 44
+#define PP_SECURE_KEYEXCHANGE_PIN 47
+#define PP_SECURE_SIGNATURE_PIN 48
+#endif
 
 #define PROV_RSA_FULL 1
 #define PROV_RSA_SIG 2
@@ -427,6 +466,11 @@
 #define PROV_FORTEZZA 4
 #define PROV_MS_EXCHANGE 5
 #define PROV_SSL 6
+#define PROV_STT_MER 7
+#define PROV_STT_ACQ 8
+#define PROV_STT_BRND 9
+#define PROV_STT_ROOT 10
+#define PROV_STT_ISS 11
 #define PROV_RSA_SCHANNEL 12
 #define PROV_DSS_DH 13
 #define PROV_EC_ECDSA_SIG 14
@@ -449,6 +493,9 @@
 #define MS_DEF_DSS_DH_PROV __MINGW_NAME_UAW(MS_DEF_DSS_DH_PROV)
 #define MS_ENH_DSS_DH_PROV __MINGW_NAME_UAW(MS_ENH_DSS_DH_PROV)
 #define MS_DEF_DH_SCHANNEL_PROV __MINGW_NAME_UAW(MS_DEF_DH_SCHANNEL_PROV)
+#define MS_SCARD_PROV __MINGW_NAME_UAW(MS_SCARD_PROV)
+#define MS_ENH_RSA_AES_PROV_XP __MINGW_NAME_UAW(MS_ENH_RSA_AES_PROV_XP)
+#define MS_ENH_RSA_AES_PROV __MINGW_NAME_UAW(MS_ENH_RSA_AES_PROV)
 
 #define MS_DEF_PROV_A "Microsoft Base Cryptographic Provider v1.0"
 #define MS_DEF_PROV_W L"Microsoft Base Cryptographic Provider v1.0"
@@ -468,14 +515,8 @@
 #define MS_ENH_DSS_DH_PROV_W L"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
 #define MS_DEF_DH_SCHANNEL_PROV_A "Microsoft DH SChannel Cryptographic Provider"
 #define MS_DEF_DH_SCHANNEL_PROV_W L"Microsoft DH SChannel Cryptographic Provider"
-
-#define MS_SCARD_PROV __MINGW_NAME_UAW(MS_SCARD_PROV)
-#define MS_ENH_RSA_AES_PROV __MINGW_NAME_UAW(MS_ENH_RSA_AES_PROV)
-#define MS_ENH_RSA_AES_PROV_XP __MINGW_NAME_UAW(MS_ENH_RSA_AES_PROV_XP)
-
 #define MS_SCARD_PROV_A "Microsoft Base Smart Card Crypto Provider"
 #define MS_SCARD_PROV_W L"Microsoft Base Smart Card Crypto Provider"
-
 #define MS_ENH_RSA_AES_PROV_A "Microsoft Enhanced RSA and AES Cryptographic Provider"
 #define MS_ENH_RSA_AES_PROV_W L"Microsoft Enhanced RSA and AES Cryptographic Provider"
 #define MS_ENH_RSA_AES_PROV_XP_A "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
@@ -486,13 +527,9 @@
 #define EXPO_OFFLOAD_REG_VALUE "ExpoOffload"
 #define EXPO_OFFLOAD_FUNC_NAME "OffloadModExpo"
 
+#ifndef szKEY_CRYPTOAPI_PRIVATE_KEY_OPTIONS
 #define szKEY_CRYPTOAPI_PRIVATE_KEY_OPTIONS "Software\\Policies\\Microsoft\\Cryptography"
-
-#define szFORCE_KEY_PROTECTION "ForceKeyProtection"
-
-#define dwFORCE_KEY_PROTECTION_DISABLED 0x0
-#define dwFORCE_KEY_PROTECTION_USER_SELECT 0x1
-#define dwFORCE_KEY_PROTECTION_HIGH 0x2
+#endif
 
 #define szKEY_CACHE_ENABLED "CachePrivateKeys"
 #define szKEY_CACHE_SECONDS "PrivateKeyLifetimeSeconds"
@@ -527,7 +564,6 @@
     DWORD dwFlags;
     DWORD dwReserved;
   } SCHANNEL_ALG,*PSCHANNEL_ALG;
-
 #define SCHANNEL_MAC_KEY 0x0
 #define SCHANNEL_ENC_KEY 0x1
 
@@ -563,7 +599,6 @@
     DWORD magic;
     DWORD bitlen;
     DWORD pubexp;
-
   } RSAPUBKEY;
 
   typedef struct _PUBKEY {
@@ -582,7 +617,7 @@
     DWORD bitlenQ;
     DWORD bitlenJ;
     DSSSEED DSSSeed;
-  } DHPUBKEY_VER3,DSSPUBKEY_VER3;
+  } DHPUBKEY_VER3, DSSPUBKEY_VER3;
 
   typedef struct _PRIVKEYVER3 {
     DWORD magic;
@@ -624,11 +659,37 @@
     unsigned char Feedback[8];
   } CRYPT_3DES_KEY_STATE,*PCRYPT_3DES_KEY_STATE;
 
+#if NTDDI_VERSION >= 0x06000000
+  typedef struct _CRYPT_AES_128_KEY_STATE {
+    unsigned char Key[16];
+    unsigned char IV[16];
+    unsigned char EncryptionState[11][16];
+    unsigned char DecryptionState[11][16];
+    unsigned char Feedback[16];
+  } CRYPT_AES_128_KEY_STATE,*PCRYPT_AES_128_KEY_STATE;
+
+  typedef struct _CRYPT_AES_256_KEY_STATE {
+    unsigned char Key[32];
+    unsigned char IV[16];
+    unsigned char EncryptionState[15][16];
+    unsigned char DecryptionState[15][16];
+    unsigned char Feedback[16];
+  } CRYPT_AES_256_KEY_STATE,*PCRYPT_AES_256_KEY_STATE;
+#endif
+#endif
+
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
+
+#ifndef CRYPTO_BLOBS_DEFINED
+#define CRYPTO_BLOBS_DEFINED
   typedef struct _CRYPTOAPI_BLOB {
     DWORD cbData;
     BYTE *pbData;
   } CRYPT_INTEGER_BLOB,*PCRYPT_INTEGER_BLOB,CRYPT_UINT_BLOB,*PCRYPT_UINT_BLOB,CRYPT_OBJID_BLOB,*PCRYPT_OBJID_BLOB,CERT_NAME_BLOB,*PCERT_NAME_BLOB,CERT_RDN_VALUE_BLOB,*PCERT_RDN_VALUE_BLOB,CERT_BLOB,*PCERT_BLOB,CRL_BLOB,*PCRL_BLOB,DATA_BLOB,*PDATA_BLOB,CRYPT_DATA_BLOB,*PCRYPT_DATA_BLOB,CRYPT_HASH_BLOB,*PCRYPT_HASH_BLOB,CRYPT_DIGEST_BLOB,*PCRYPT_DIGEST_BLOB,CRYPT_DER_BLOB,*PCRYPT_DER_BLOB,CRYPT_ATTR_BLOB,*PCRYPT_ATTR_BLOB;
+#endif
+#endif
 
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
   typedef struct _CMS_DH_KEY_INFO {
     DWORD dwVersion;
     ALG_ID Algid;
@@ -637,61 +698,67 @@
     void *pReserved;
   } CMS_DH_KEY_INFO,*PCMS_DH_KEY_INFO;
 
-#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
-
 #define CryptAcquireContext __MINGW_NAME_AW(CryptAcquireContext)
 #define CryptSignHash __MINGW_NAME_AW(CryptSignHash)
 #define CryptVerifySignature __MINGW_NAME_AW(CryptVerifySignature)
-
-  WINIMPM WINBOOL WINAPI CryptAcquireContextA(HCRYPTPROV *phProv,LPCSTR szContainer,LPCSTR szProvider,DWORD dwProvType,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptAcquireContextW(HCRYPTPROV *phProv,LPCWSTR szContainer,LPCWSTR szProvider,DWORD dwProvType,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptReleaseContext(HCRYPTPROV hProv,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptGenKey(HCRYPTPROV hProv,ALG_ID Algid,DWORD dwFlags,HCRYPTKEY *phKey);
-  WINIMPM WINBOOL WINAPI CryptDeriveKey(HCRYPTPROV hProv,ALG_ID Algid,HCRYPTHASH hBaseData,DWORD dwFlags,HCRYPTKEY *phKey);
-  WINIMPM WINBOOL WINAPI CryptDestroyKey(HCRYPTKEY hKey);
-  WINIMPM WINBOOL WINAPI CryptSetKeyParam(HCRYPTKEY hKey,DWORD dwParam,CONST BYTE *pbData,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptGetKeyParam(HCRYPTKEY hKey,DWORD dwParam,BYTE *pbData,DWORD *pdwDataLen,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptSetHashParam(HCRYPTHASH hHash,DWORD dwParam,CONST BYTE *pbData,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptGetHashParam(HCRYPTHASH hHash,DWORD dwParam,BYTE *pbData,DWORD *pdwDataLen,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptSetProvParam(HCRYPTPROV hProv,DWORD dwParam,CONST BYTE *pbData,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptGetProvParam(HCRYPTPROV hProv,DWORD dwParam,BYTE *pbData,DWORD *pdwDataLen,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptGenRandom(HCRYPTPROV hProv,DWORD dwLen,BYTE *pbBuffer);
-  WINIMPM WINBOOL WINAPI CryptGetUserKey(HCRYPTPROV hProv,DWORD dwKeySpec,HCRYPTKEY *phUserKey);
-  WINIMPM WINBOOL WINAPI CryptExportKey(HCRYPTKEY hKey,HCRYPTKEY hExpKey,DWORD dwBlobType,DWORD dwFlags,BYTE *pbData,DWORD *pdwDataLen);
-  WINIMPM WINBOOL WINAPI CryptImportKey(HCRYPTPROV hProv,CONST BYTE *pbData,DWORD dwDataLen,HCRYPTKEY hPubKey,DWORD dwFlags,HCRYPTKEY *phKey);
-  WINIMPM WINBOOL WINAPI CryptEncrypt(HCRYPTKEY hKey,HCRYPTHASH hHash,WINBOOL Final,DWORD dwFlags,BYTE *pbData,DWORD *pdwDataLen,DWORD dwBufLen);
-  WINIMPM WINBOOL WINAPI CryptDecrypt(HCRYPTKEY hKey,HCRYPTHASH hHash,WINBOOL Final,DWORD dwFlags,BYTE *pbData,DWORD *pdwDataLen);
-  WINIMPM WINBOOL WINAPI CryptCreateHash(HCRYPTPROV hProv,ALG_ID Algid,HCRYPTKEY hKey,DWORD dwFlags,HCRYPTHASH *phHash);
-  WINIMPM WINBOOL WINAPI CryptHashData(HCRYPTHASH hHash,CONST BYTE *pbData,DWORD dwDataLen,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptHashSessionKey(HCRYPTHASH hHash,HCRYPTKEY hKey,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptDestroyHash(HCRYPTHASH hHash);
-  WINIMPM WINBOOL WINAPI CryptSignHashA(HCRYPTHASH hHash,DWORD dwKeySpec,LPCSTR szDescription,DWORD dwFlags,BYTE *pbSignature,DWORD *pdwSigLen);
-  WINIMPM WINBOOL WINAPI CryptSignHashW(HCRYPTHASH hHash,DWORD dwKeySpec,LPCWSTR szDescription,DWORD dwFlags,BYTE *pbSignature,DWORD *pdwSigLen);
-  WINIMPM WINBOOL WINAPI CryptVerifySignatureA(HCRYPTHASH hHash,CONST BYTE *pbSignature,DWORD dwSigLen,HCRYPTKEY hPubKey,LPCSTR szDescription,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptVerifySignatureW(HCRYPTHASH hHash,CONST BYTE *pbSignature,DWORD dwSigLen,HCRYPTKEY hPubKey,LPCWSTR szDescription,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptSetProviderA(LPCSTR pszProvName,DWORD dwProvType);
-  WINIMPM WINBOOL WINAPI CryptSetProviderW(LPCWSTR pszProvName,DWORD dwProvType);
-
 #define CryptSetProvider __MINGW_NAME_AW(CryptSetProvider)
 #define CryptSetProviderEx __MINGW_NAME_AW(CryptSetProviderEx)
 #define CryptGetDefaultProvider __MINGW_NAME_AW(CryptGetDefaultProvider)
 #define CryptEnumProviderTypes __MINGW_NAME_AW(CryptEnumProviderTypes)
 #define CryptEnumProviders __MINGW_NAME_AW(CryptEnumProviders)
 
-  WINIMPM WINBOOL WINAPI CryptSetProviderExA(LPCSTR pszProvName,DWORD dwProvType,DWORD *pdwReserved,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptSetProviderExW(LPCWSTR pszProvName,DWORD dwProvType,DWORD *pdwReserved,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptGetDefaultProviderA(DWORD dwProvType,DWORD *pdwReserved,DWORD dwFlags,LPSTR pszProvName,DWORD *pcbProvName);
-  WINIMPM WINBOOL WINAPI CryptGetDefaultProviderW(DWORD dwProvType,DWORD *pdwReserved,DWORD dwFlags,LPWSTR pszProvName,DWORD *pcbProvName);
-  WINIMPM WINBOOL WINAPI CryptEnumProviderTypesA(DWORD dwIndex,DWORD *pdwReserved,DWORD dwFlags,DWORD *pdwProvType,LPSTR szTypeName,DWORD *pcbTypeName);
-  WINIMPM WINBOOL WINAPI CryptEnumProviderTypesW(DWORD dwIndex,DWORD *pdwReserved,DWORD dwFlags,DWORD *pdwProvType,LPWSTR szTypeName,DWORD *pcbTypeName);
-  WINIMPM WINBOOL WINAPI CryptEnumProvidersA(DWORD dwIndex,DWORD *pdwReserved,DWORD dwFlags,DWORD *pdwProvType,LPSTR szProvName,DWORD *pcbProvName);
-  WINIMPM WINBOOL WINAPI CryptEnumProvidersW(DWORD dwIndex,DWORD *pdwReserved,DWORD dwFlags,DWORD *pdwProvType,LPWSTR szProvName,DWORD *pcbProvName);
-  WINIMPM WINBOOL WINAPI CryptContextAddRef(HCRYPTPROV hProv,DWORD *pdwReserved,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptDuplicateKey(HCRYPTKEY hKey,DWORD *pdwReserved,DWORD dwFlags,HCRYPTKEY *phKey);
-  WINIMPM WINBOOL WINAPI CryptDuplicateHash(HCRYPTHASH hHash,DWORD *pdwReserved,DWORD dwFlags,HCRYPTHASH *phHash);
-  WINBOOL __cdecl GetEncSChannel(BYTE **pData,DWORD *dwDecSize);
+  WINIMPM WINBOOL WINAPI CryptAcquireContextA (HCRYPTPROV *phProv, LPCSTR szContainer, LPCSTR szProvider, DWORD dwProvType, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptAcquireContextW (HCRYPTPROV *phProv, LPCWSTR szContainer, LPCWSTR szProvider, DWORD dwProvType, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptReleaseContext (HCRYPTPROV hProv, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptGenKey (HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYPTKEY *phKey);
+  WINIMPM WINBOOL WINAPI CryptDeriveKey (HCRYPTPROV hProv, ALG_ID Algid, HCRYPTHASH hBaseData, DWORD dwFlags, HCRYPTKEY *phKey);
+  WINIMPM WINBOOL WINAPI CryptDestroyKey (HCRYPTKEY hKey);
+  WINIMPM WINBOOL WINAPI CryptSetKeyParam (HCRYPTKEY hKey, DWORD dwParam, CONST BYTE *pbData, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptGetKeyParam (HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptSetHashParam (HCRYPTHASH hHash, DWORD dwParam, CONST BYTE *pbData, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptGetHashParam (HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptSetProvParam (HCRYPTPROV hProv, DWORD dwParam, CONST BYTE *pbData, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptGetProvParam (HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptGenRandom (HCRYPTPROV hProv, DWORD dwLen, BYTE *pbBuffer);
+  WINIMPM WINBOOL WINAPI CryptGetUserKey (HCRYPTPROV hProv, DWORD dwKeySpec, HCRYPTKEY *phUserKey);
+  WINIMPM WINBOOL WINAPI CryptExportKey (HCRYPTKEY hKey, HCRYPTKEY hExpKey, DWORD dwBlobType, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen);
+  WINIMPM WINBOOL WINAPI CryptImportKey (HCRYPTPROV hProv, CONST BYTE *pbData, DWORD dwDataLen, HCRYPTKEY hPubKey, DWORD dwFlags, HCRYPTKEY *phKey);
+  WINIMPM WINBOOL WINAPI CryptEncrypt (HCRYPTKEY hKey, HCRYPTHASH hHash, WINBOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen, DWORD dwBufLen);
+  WINIMPM WINBOOL WINAPI CryptDecrypt (HCRYPTKEY hKey, HCRYPTHASH hHash, WINBOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen);
+  WINIMPM WINBOOL WINAPI CryptCreateHash (HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey, DWORD dwFlags, HCRYPTHASH *phHash);
+  WINIMPM WINBOOL WINAPI CryptHashData (HCRYPTHASH hHash, CONST BYTE *pbData, DWORD dwDataLen, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptHashSessionKey (HCRYPTHASH hHash, HCRYPTKEY hKey, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptDestroyHash (HCRYPTHASH hHash);
+  WINIMPM WINBOOL WINAPI CryptSignHashA (HCRYPTHASH hHash, DWORD dwKeySpec, LPCSTR szDescription, DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen);
+  WINIMPM WINBOOL WINAPI CryptSignHashW (HCRYPTHASH hHash, DWORD dwKeySpec, LPCWSTR szDescription, DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen);
+  WINIMPM WINBOOL WINAPI CryptVerifySignatureA (HCRYPTHASH hHash, CONST BYTE *pbSignature, DWORD dwSigLen, HCRYPTKEY hPubKey, LPCSTR szDescription, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptVerifySignatureW (HCRYPTHASH hHash, CONST BYTE *pbSignature, DWORD dwSigLen, HCRYPTKEY hPubKey, LPCWSTR szDescription, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptSetProviderA (LPCSTR pszProvName, DWORD dwProvType);
+  WINIMPM WINBOOL WINAPI CryptSetProviderW (LPCWSTR pszProvName, DWORD dwProvType);
+  WINIMPM WINBOOL WINAPI CryptSetProviderExA (LPCSTR pszProvName, DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptSetProviderExW (LPCWSTR pszProvName, DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptGetDefaultProviderA (DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags, LPSTR pszProvName, DWORD *pcbProvName);
+  WINIMPM WINBOOL WINAPI CryptGetDefaultProviderW (DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags, LPWSTR pszProvName, DWORD *pcbProvName);
+  WINIMPM WINBOOL WINAPI CryptEnumProviderTypesA (DWORD dwIndex, DWORD *pdwReserved, DWORD dwFlags, DWORD *pdwProvType, LPSTR szTypeName, DWORD *pcbTypeName);
+  WINIMPM WINBOOL WINAPI CryptEnumProviderTypesW (DWORD dwIndex, DWORD *pdwReserved, DWORD dwFlags, DWORD *pdwProvType, LPWSTR szTypeName, DWORD *pcbTypeName);
+  WINIMPM WINBOOL WINAPI CryptEnumProvidersA (DWORD dwIndex, DWORD *pdwReserved, DWORD dwFlags, DWORD *pdwProvType, LPSTR szProvName, DWORD *pcbProvName);
+  WINIMPM WINBOOL WINAPI CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved, DWORD dwFlags, DWORD *pdwProvType, LPWSTR szProvName, DWORD *pcbProvName);
+  WINIMPM WINBOOL WINAPI CryptContextAddRef (HCRYPTPROV hProv, DWORD *pdwReserved, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptDuplicateKey (HCRYPTKEY hKey, DWORD *pdwReserved, DWORD dwFlags, HCRYPTKEY *phKey);
+  WINIMPM WINBOOL WINAPI CryptDuplicateHash (HCRYPTHASH hHash, DWORD *pdwReserved, DWORD dwFlags, HCRYPTHASH *phHash);
+  WINBOOL __cdecl GetEncSChannel (BYTE **pData, DWORD *dwDecSize);
+#endif
 
-#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
+#ifndef _DDK_DRIVER_
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
+  typedef ULONG_PTR HCRYPTPROV_OR_NCRYPT_KEY_HANDLE;
+  typedef ULONG_PTR HCRYPTPROV_LEGACY;
+
+#include <bcrypt.h>
+#endif
+
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
+#include <ncrypt.h>
 
   typedef struct _CRYPT_BIT_BLOB {
     DWORD cbData;
@@ -703,11 +770,14 @@
     LPSTR pszObjId;
     CRYPT_OBJID_BLOB Parameters;
   } CRYPT_ALGORITHM_IDENTIFIER,*PCRYPT_ALGORITHM_IDENTIFIER;
+#endif
 
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
 #define szOID_RSA "1.2.840.113549"
 #define szOID_PKCS "1.2.840.113549.1"
 #define szOID_RSA_HASH "1.2.840.113549.2"
 #define szOID_RSA_ENCRYPT "1.2.840.113549.3"
+
 #define szOID_PKCS_1 "1.2.840.113549.1.1"
 #define szOID_PKCS_2 "1.2.840.113549.1.2"
 #define szOID_PKCS_3 "1.2.840.113549.1.3"
@@ -719,13 +789,24 @@
 #define szOID_PKCS_9 "1.2.840.113549.1.9"
 #define szOID_PKCS_10 "1.2.840.113549.1.10"
 #define szOID_PKCS_12 "1.2.840.113549.1.12"
+
 #define szOID_RSA_RSA "1.2.840.113549.1.1.1"
 #define szOID_RSA_MD2RSA "1.2.840.113549.1.1.2"
 #define szOID_RSA_MD4RSA "1.2.840.113549.1.1.3"
 #define szOID_RSA_MD5RSA "1.2.840.113549.1.1.4"
 #define szOID_RSA_SHA1RSA "1.2.840.113549.1.1.5"
 #define szOID_RSA_SETOAEP_RSA "1.2.840.113549.1.1.6"
+
+#define szOID_RSAES_OAEP "1.2.840.113549.1.1.7"
+#define szOID_RSA_MGF1 "1.2.840.113549.1.1.8"
+#define szOID_RSA_PSPECIFIED "1.2.840.113549.1.1.9"
+#define szOID_RSA_SSA_PSS "1.2.840.113549.1.1.10"
+#define szOID_RSA_SHA256RSA "1.2.840.113549.1.1.11"
+#define szOID_RSA_SHA384RSA "1.2.840.113549.1.1.12"
+#define szOID_RSA_SHA512RSA "1.2.840.113549.1.1.13"
+
 #define szOID_RSA_DH "1.2.840.113549.1.3.1"
+
 #define szOID_RSA_data "1.2.840.113549.1.7.1"
 #define szOID_RSA_signedData "1.2.840.113549.1.7.2"
 #define szOID_RSA_envelopedData "1.2.840.113549.1.7.3"
@@ -733,6 +814,7 @@
 #define szOID_RSA_digestedData "1.2.840.113549.1.7.5"
 #define szOID_RSA_hashedData "1.2.840.113549.1.7.5"
 #define szOID_RSA_encryptedData "1.2.840.113549.1.7.6"
+
 #define szOID_RSA_emailAddr "1.2.840.113549.1.9.1"
 #define szOID_RSA_unstructName "1.2.840.113549.1.9.2"
 #define szOID_RSA_contentType "1.2.840.113549.1.9.3"
@@ -745,10 +827,15 @@
 #define szOID_RSA_certExtensions "1.2.840.113549.1.9.14"
 #define szOID_RSA_SMIMECapabilities "1.2.840.113549.1.9.15"
 #define szOID_RSA_preferSignedData "1.2.840.113549.1.9.15.1"
+
+#define szOID_TIMESTAMP_TOKEN "1.2.840.113549.1.9.16.1.4"
+#define szOID_RFC3161_counterSign "1.3.6.1.4.1.311.3.3.1"
+
 #define szOID_RSA_SMIMEalg "1.2.840.113549.1.9.16.3"
 #define szOID_RSA_SMIMEalgESDH "1.2.840.113549.1.9.16.3.5"
 #define szOID_RSA_SMIMEalgCMS3DESwrap "1.2.840.113549.1.9.16.3.6"
 #define szOID_RSA_SMIMEalgCMSRC2wrap "1.2.840.113549.1.9.16.3.7"
+
 #define szOID_RSA_MD2 "1.2.840.113549.2.2"
 #define szOID_RSA_MD4 "1.2.840.113549.2.4"
 #define szOID_RSA_MD5 "1.2.840.113549.2.5"
@@ -765,6 +852,28 @@
 #define szOID_X957_DSA "1.2.840.10040.4.1"
 #define szOID_X957_SHA1DSA "1.2.840.10040.4.3"
 
+#define szOID_ECC_PUBLIC_KEY "1.2.840.10045.2.1"
+#define szOID_ECC_CURVE_P256 "1.2.840.10045.3.1.7"
+#define szOID_ECC_CURVE_P384 "1.3.132.0.34"
+#define szOID_ECC_CURVE_P521 "1.3.132.0.35"
+#define szOID_ECDSA_SHA1 "1.2.840.10045.4.1"
+#define szOID_ECDSA_SPECIFIED "1.2.840.10045.4.3"
+#define szOID_ECDSA_SHA256 "1.2.840.10045.4.3.2"
+#define szOID_ECDSA_SHA384 "1.2.840.10045.4.3.3"
+#define szOID_ECDSA_SHA512 "1.2.840.10045.4.3.4"
+
+#define szOID_NIST_AES128_CBC "2.16.840.1.101.3.4.1.2"
+#define szOID_NIST_AES192_CBC "2.16.840.1.101.3.4.1.22"
+#define szOID_NIST_AES256_CBC "2.16.840.1.101.3.4.1.42"
+
+#define szOID_NIST_AES128_WRAP "2.16.840.1.101.3.4.1.5"
+#define szOID_NIST_AES192_WRAP "2.16.840.1.101.3.4.1.25"
+#define szOID_NIST_AES256_WRAP "2.16.840.1.101.3.4.1.45"
+
+#define szOID_DH_SINGLE_PASS_STDDH_SHA1_KDF "1.3.133.16.840.63.0.2"
+#define szOID_DH_SINGLE_PASS_STDDH_SHA256_KDF "1.3.132.1.11.1"
+#define szOID_DH_SINGLE_PASS_STDDH_SHA384_KDF "1.3.132.1.11.2"
+
 #define szOID_DS "2.5"
 #define szOID_DSALG "2.5.8"
 #define szOID_DSALG_CRPT "2.5.8.1"
@@ -833,9 +942,9 @@
 #define szOID_INFOSEC_mosaicKMandUpdSig "2.16.840.1.101.2.1.1.20"
 #define szOID_INFOSEC_mosaicUpdatedInteg "2.16.840.1.101.2.1.1.21"
 
-#define szOID_NIST_AES128_CBC "2.16.840.1.101.3.4.1.2"
-#define szOID_NIST_AES192_CBC "2.16.840.1.101.3.4.1.22"
-#define szOID_NIST_AES256_CBC "2.16.840.1.101.3.4.1.42"
+#define szOID_NIST_sha256 "2.16.840.1.101.3.4.2.1"
+#define szOID_NIST_sha384 "2.16.840.1.101.3.4.2.2"
+#define szOID_NIST_sha512 "2.16.840.1.101.3.4.2.3"
 
   typedef struct _CRYPT_OBJID_TABLE {
     DWORD dwAlgId;
@@ -846,13 +955,19 @@
     CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
     CRYPT_HASH_BLOB Hash;
   } CRYPT_HASH_INFO,*PCRYPT_HASH_INFO;
+#endif
 
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
   typedef struct _CERT_EXTENSION {
     LPSTR pszObjId;
     WINBOOL fCritical;
     CRYPT_OBJID_BLOB Value;
   } CERT_EXTENSION,*PCERT_EXTENSION;
 
+  typedef const CERT_EXTENSION *PCCERT_EXTENSION;
+#endif
+
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
   typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE {
     LPSTR pszObjId;
     CRYPT_OBJID_BLOB Value;
@@ -916,13 +1031,22 @@
 #define szOID_GIVEN_NAME "2.5.4.42"
 #define szOID_INITIALS "2.5.4.43"
 #define szOID_DN_QUALIFIER "2.5.4.46"
+
 #define szOID_DOMAIN_COMPONENT "0.9.2342.19200300.100.1.25"
+
 #define szOID_PKCS_12_FRIENDLY_NAME_ATTR "1.2.840.113549.1.9.20"
 #define szOID_PKCS_12_LOCAL_KEY_ID "1.2.840.113549.1.9.21"
 #define szOID_PKCS_12_KEY_PROVIDER_NAME_ATTR "1.3.6.1.4.1.311.17.1"
 #define szOID_LOCAL_MACHINE_KEYSET "1.3.6.1.4.1.311.17.2"
+#define szOID_PKCS_12_EXTENDED_ATTRIBUTES "1.3.6.1.4.1.311.17.3"
+#define szOID_PKCS_12_PROTECTED_PASSWORD_SECRET_BAG_TYPE_ID "1.3.6.1.4.1.311.17.4"
+
 #define szOID_KEYID_RDN "1.3.6.1.4.1.311.10.7.1"
 
+#define szOID_EV_RDN_LOCALE "1.3.6.1.4.1.311.60.2.1.1"
+#define szOID_EV_RDN_STATE_OR_PROVINCE "1.3.6.1.4.1.311.60.2.1.2"
+#define szOID_EV_RDN_COUNTRY "1.3.6.1.4.1.311.60.2.1.3"
+
 #define CERT_RDN_ANY_TYPE 0
 #define CERT_RDN_ENCODED_BLOB 1
 #define CERT_RDN_OCTET_STRING 2
@@ -941,13 +1065,16 @@
 #define CERT_RDN_BMP_STRING 12
 #define CERT_RDN_UNICODE_STRING 12
 #define CERT_RDN_UTF8_STRING 13
-#define CERT_RDN_TYPE_MASK 0xff
+
+#define CERT_RDN_TYPE_MASK 0x000000ff
 #define CERT_RDN_FLAGS_MASK 0xff000000
+
 #define CERT_RDN_ENABLE_T61_UNICODE_FLAG 0x80000000
 #define CERT_RDN_ENABLE_UTF8_UNICODE_FLAG 0x20000000
 #define CERT_RDN_FORCE_UTF8_UNICODE_FLAG 0x10000000
 #define CERT_RDN_DISABLE_CHECK_TYPE_FLAG 0x40000000
 #define CERT_RDN_DISABLE_IE4_UTF8_FLAG 0x1000000
+#define CERT_RDN_ENABLE_PUNYCODE_FLAG 0x2000000
 
 #define IS_CERT_RDN_CHAR_STRING(X) (((X) & CERT_RDN_TYPE_MASK) >= CERT_RDN_NUMERIC_STRING)
 
@@ -965,17 +1092,30 @@
     DWORD dwValueType;
     CERT_RDN_VALUE_BLOB Value;
   } CERT_NAME_VALUE,*PCERT_NAME_VALUE;
+#endif
 
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
   typedef struct _CERT_PUBLIC_KEY_INFO {
     CRYPT_ALGORITHM_IDENTIFIER Algorithm;
     CRYPT_BIT_BLOB PublicKey;
   } CERT_PUBLIC_KEY_INFO,*PCERT_PUBLIC_KEY_INFO;
+#endif
 
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
 #define CERT_RSA_PUBLIC_KEY_OBJID szOID_RSA_RSA
 #define CERT_DEFAULT_OID_PUBLIC_KEY_SIGN szOID_RSA_RSA
 #define CERT_DEFAULT_OID_PUBLIC_KEY_XCHG szOID_RSA_RSA
 
-  typedef struct _CRYPT_PRIVATE_KEY_INFO{
+  typedef struct _CRYPT_ECC_PRIVATE_KEY_INFO {
+    DWORD dwVersion;
+    CRYPT_DER_BLOB PrivateKey;
+    LPSTR szCurveOid;
+    CRYPT_BIT_BLOB PublicKey;
+  } CRYPT_ECC_PRIVATE_KEY_INFO,*PCRYPT_ECC_PRIVATE_KEY_INFO;
+
+#define CRYPT_ECC_PRIVATE_KEY_INFO_v1 1
+
+  typedef struct _CRYPT_PRIVATE_KEY_INFO {
     DWORD Version;
     CRYPT_ALGORITHM_IDENTIFIER Algorithm;
     CRYPT_DER_BLOB PrivateKey;
@@ -987,9 +1127,9 @@
     CRYPT_DATA_BLOB EncryptedPrivateKey;
   } CRYPT_ENCRYPTED_PRIVATE_KEY_INFO,*PCRYPT_ENCRYPTED_PRIVATE_KEY_INFO;
 
-  typedef WINBOOL (CALLBACK *PCRYPT_DECRYPT_PRIVATE_KEY_FUNC)(CRYPT_ALGORITHM_IDENTIFIER Algorithm,CRYPT_DATA_BLOB EncryptedPrivateKey,BYTE *pbClearTextKey,DWORD *pcbClearTextKey,LPVOID pVoidDecryptFunc);
-  typedef WINBOOL (CALLBACK *PCRYPT_ENCRYPT_PRIVATE_KEY_FUNC)(CRYPT_ALGORITHM_IDENTIFIER *pAlgorithm,CRYPT_DATA_BLOB *pClearTextPrivateKey,BYTE *pbEncryptedKey,DWORD *pcbEncryptedKey,LPVOID pVoidEncryptFunc);
-  typedef WINBOOL (CALLBACK *PCRYPT_RESOLVE_HCRYPTPROV_FUNC)(CRYPT_PRIVATE_KEY_INFO *pPrivateKeyInfo,HCRYPTPROV *phCryptProv,LPVOID pVoidResolveFunc);
+  typedef WINBOOL (CALLBACK *PCRYPT_DECRYPT_PRIVATE_KEY_FUNC) (CRYPT_ALGORITHM_IDENTIFIER Algorithm, CRYPT_DATA_BLOB EncryptedPrivateKey, BYTE *pbClearTextKey, DWORD *pcbClearTextKey, LPVOID pVoidDecryptFunc);
+  typedef WINBOOL (CALLBACK *PCRYPT_ENCRYPT_PRIVATE_KEY_FUNC) (CRYPT_ALGORITHM_IDENTIFIER *pAlgorithm, CRYPT_DATA_BLOB *pClearTextPrivateKey, BYTE *pbEncryptedKey, DWORD *pcbEncryptedKey, LPVOID pVoidEncryptFunc);
+  typedef WINBOOL (CALLBACK *PCRYPT_RESOLVE_HCRYPTPROV_FUNC) (CRYPT_PRIVATE_KEY_INFO *pPrivateKeyInfo, HCRYPTPROV *phCryptProv, LPVOID pVoidResolveFunc);
 
   typedef struct _CRYPT_PKCS8_IMPORT_PARAMS {
     CRYPT_DIGEST_BLOB PrivateKey;
@@ -997,7 +1137,7 @@
     LPVOID pVoidResolveFunc;
     PCRYPT_DECRYPT_PRIVATE_KEY_FUNC pDecryptPrivateKeyFunc;
     LPVOID pVoidDecryptFunc;
-  } CRYPT_PKCS8_IMPORT_PARAMS,*PCRYPT_PKCS8_IMPORT_PARAMS,CRYPT_PRIVATE_KEY_BLOB_AND_PARAMS,*PCRYPT_PRIVATE_KEY_BLOB_AND_PARAMS;
+  } CRYPT_PKCS8_IMPORT_PARAMS,*PCRYPT_PKCS8_IMPORT_PARAMS, CRYPT_PRIVATE_KEY_BLOB_AND_PARAMS,*PCRYPT_PRIVATE_KEY_BLOB_AND_PARAMS;
 
   typedef struct _CRYPT_PKCS8_EXPORT_PARAMS {
     HCRYPTPROV hCryptProv;
@@ -1006,7 +1146,9 @@
     PCRYPT_ENCRYPT_PRIVATE_KEY_FUNC pEncryptPrivateKeyFunc;
     LPVOID pVoidEncryptFunc;
   } CRYPT_PKCS8_EXPORT_PARAMS,*PCRYPT_PKCS8_EXPORT_PARAMS;
+#endif
 
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
   typedef struct _CERT_INFO {
     DWORD dwVersion;
     CRYPT_INTEGER_BLOB SerialNumber;
@@ -1021,7 +1163,9 @@
     DWORD cExtension;
     PCERT_EXTENSION rgExtension;
   } CERT_INFO,*PCERT_INFO;
+#endif
 
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
 #define CERT_V1 0
 #define CERT_V2 1
 #define CERT_V3 2
@@ -1060,6 +1204,20 @@
 #define CRL_V1 0
 #define CRL_V2 1
 
+#define CERT_BUNDLE_CERTIFICATE 0
+#define CERT_BUNDLE_CRL 1
+
+  typedef struct _CERT_OR_CRL_BLOB {
+    DWORD dwChoice;
+    DWORD cbEncoded;
+    BYTE *pbEncoded;
+  } CERT_OR_CRL_BLOB,*PCERT_OR_CRL_BLOB;
+
+  typedef struct _CERT_OR_CRL_BUNDLE {
+    DWORD cItem;
+    PCERT_OR_CRL_BLOB rgItem;
+  } CERT_OR_CRL_BUNDLE,*PCERT_OR_CRL_BUNDLE;
+
   typedef struct _CERT_REQUEST_INFO {
     DWORD dwVersion;
     CERT_NAME_BLOB Subject;
@@ -1089,6 +1247,9 @@
     LPSTR *rgpszUsageIdentifier;
   } CTL_USAGE,*PCTL_USAGE,CERT_ENHKEY_USAGE,*PCERT_ENHKEY_USAGE;
 
+  typedef const CTL_USAGE *PCCTL_USAGE;
+  typedef const CERT_ENHKEY_USAGE *PCCERT_ENHKEY_USAGE;
+
   typedef struct _CTL_ENTRY {
     CRYPT_DATA_BLOB SubjectIdentifier;
     DWORD cAttribute;
@@ -1130,10 +1291,10 @@
     CRYPT_BIT_BLOB Signature;
   } CRYPT_CSP_PROVIDER,*PCRYPT_CSP_PROVIDER;
 
-#define CERT_ENCODING_TYPE_MASK 0xffff
+#define CERT_ENCODING_TYPE_MASK 0x0000ffff
 #define CMSG_ENCODING_TYPE_MASK 0xffff0000
-#define GET_CERT_ENCODING_TYPE(T) ((T) & CERT_ENCODING_TYPE_MASK)
-#define GET_CMSG_ENCODING_TYPE(T) ((T) & CMSG_ENCODING_TYPE_MASK)
+#define GET_CERT_ENCODING_TYPE(T) (T & CERT_ENCODING_TYPE_MASK)
+#define GET_CMSG_ENCODING_TYPE(T) (T & CMSG_ENCODING_TYPE_MASK)
 
 #define CRYPT_ASN_ENCODING 0x1
 #define CRYPT_NDR_ENCODING 0x2
@@ -1142,10 +1303,11 @@
 #define PKCS_7_ASN_ENCODING 0x10000
 #define PKCS_7_NDR_ENCODING 0x20000
 
-  WINIMPM WINBOOL WINAPI CryptFormatObject(DWORD dwCertEncodingType,DWORD dwFormatType,DWORD dwFormatStrType,void *pFormatStruct,LPCSTR lpszStructType,const BYTE *pbEncoded,DWORD cbEncoded,void *pbFormat,DWORD *pcbFormat);
+  WINIMPM WINBOOL WINAPI CryptFormatObject (DWORD dwCertEncodingType, DWORD dwFormatType, DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat);
 
 #define CRYPT_FORMAT_STR_MULTI_LINE 0x1
 #define CRYPT_FORMAT_STR_NO_HEX 0x10
+
 #define CRYPT_FORMAT_SIMPLE 0x1
 #define CRYPT_FORMAT_X509 0x2
 #define CRYPT_FORMAT_OID 0x4
@@ -1166,8 +1328,8 @@
     PFN_CRYPT_FREE pfnFree;
   } CRYPT_ENCODE_PARA,*PCRYPT_ENCODE_PARA;
 
-  WINIMPM WINBOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType,LPCSTR lpszStructType,const void *pvStructInfo,DWORD dwFlags,PCRYPT_ENCODE_PARA pEncodePara,void *pvEncoded,DWORD *pcbEncoded);
-  WINIMPM WINBOOL WINAPI CryptEncodeObject(DWORD dwCertEncodingType,LPCSTR lpszStructType,const void *pvStructInfo,BYTE *pbEncoded,DWORD *pcbEncoded);
+  WINIMPM WINBOOL WINAPI CryptEncodeObjectEx (DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, void *pvEncoded, DWORD *pcbEncoded);
+  WINIMPM WINBOOL WINAPI CryptEncodeObject (DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded);
 
 #define CRYPT_ENCODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG 0x8
 #define CRYPT_ENCODE_ALLOC_FLAG 0x8000
@@ -1176,6 +1338,9 @@
 #define CRYPT_UNICODE_NAME_ENCODE_FORCE_UTF8_UNICODE_FLAG CERT_RDN_FORCE_UTF8_UNICODE_FLAG
 #define CRYPT_UNICODE_NAME_ENCODE_DISABLE_CHECK_TYPE_FLAG CERT_RDN_DISABLE_CHECK_TYPE_FLAG
 #define CRYPT_SORTED_CTL_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x10000
+#define CRYPT_ENCODE_ENABLE_PUNYCODE_FLAG 0x20000
+#define CRYPT_ENCODE_ENABLE_UTF8PERCENT_FLAG 0x40000
+#define CRYPT_ENCODE_ENABLE_IA5CONVERSION_FLAG (CRYPT_ENCODE_ENABLE_PUNYCODE_FLAG | CRYPT_ENCODE_ENABLE_UTF8PERCENT_FLAG)
 
   typedef struct _CRYPT_DECODE_PARA {
     DWORD cbSize;
@@ -1183,8 +1348,8 @@
     PFN_CRYPT_FREE pfnFree;
   } CRYPT_DECODE_PARA,*PCRYPT_DECODE_PARA;
 
-  WINIMPM WINBOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType,LPCSTR lpszStructType,const BYTE *pbEncoded,DWORD cbEncoded,DWORD dwFlags,PCRYPT_DECODE_PARA pDecodePara,void *pvStructInfo,DWORD *pcbStructInfo);
-  WINIMPM WINBOOL WINAPI CryptDecodeObject(DWORD dwCertEncodingType,LPCSTR lpszStructType,const BYTE *pbEncoded,DWORD cbEncoded,DWORD dwFlags,void *pvStructInfo,DWORD *pcbStructInfo);
+  WINIMPM WINBOOL WINAPI CryptDecodeObjectEx (DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo);
+  WINIMPM WINBOOL WINAPI CryptDecodeObject (DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo);
 
 #define CRYPT_DECODE_NOCOPY_FLAG 0x1
 #define CRYPT_DECODE_TO_BE_SIGNED_FLAG 0x2
@@ -1192,6 +1357,10 @@
 #define CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG 0x8
 #define CRYPT_DECODE_ALLOC_FLAG 0x8000
 #define CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG CERT_RDN_DISABLE_IE4_UTF8_FLAG
+#define CRYPT_DECODE_ENABLE_PUNYCODE_FLAG 0x2000000
+#define CRYPT_DECODE_ENABLE_UTF8PERCENT_FLAG 0x4000000
+#define CRYPT_DECODE_ENABLE_IA5CONVERSION_FLAG (CRYPT_DECODE_ENABLE_PUNYCODE_FLAG | CRYPT_DECODE_ENABLE_UTF8PERCENT_FLAG)
+
 #define CRYPT_ENCODE_DECODE_NONE 0
 #define X509_CERT ((LPCSTR) 1)
 #define X509_CERT_TO_BE_SIGNED ((LPCSTR) 2)
@@ -1227,6 +1396,7 @@
 #define X509_CHOICE_OF_TIME ((LPCSTR) 30)
 #define X509_AUTHORITY_KEY_ID2 ((LPCSTR) 31)
 #define X509_AUTHORITY_INFO_ACCESS ((LPCSTR) 32)
+#define X509_SUBJECT_INFO_ACCESS X509_AUTHORITY_INFO_ACCESS
 #define X509_CRL_REASON_CODE X509_ENUMERATED
 #define PKCS_CONTENT_INFO ((LPCSTR) 33)
 #define X509_SEQUENCE_OF_ANY ((LPCSTR) 34)
@@ -1239,17 +1409,16 @@
 #define X509_DSS_SIGNATURE ((LPCSTR) 40)
 #define PKCS_RC2_CBC_PARAMETERS ((LPCSTR) 41)
 #define PKCS_SMIME_CAPABILITIES ((LPCSTR) 42)
+#define X509_QC_STATEMENTS_EXT ((LPCSTR) 42)
 #define PKCS_RSA_PRIVATE_KEY ((LPCSTR) 43)
 #define PKCS_PRIVATE_KEY_INFO ((LPCSTR) 44)
 #define PKCS_ENCRYPTED_PRIVATE_KEY_INFO ((LPCSTR) 45)
 #define X509_PKIX_POLICY_QUALIFIER_USERNOTICE ((LPCSTR) 46)
 #define X509_DH_PUBLICKEY X509_MULTI_BYTE_UINT
 #define X509_DH_PARAMETERS ((LPCSTR) 47)
+#define X509_ECC_SIGNATURE ((LPCSTR) 47)
 #define PKCS_ATTRIBUTES ((LPCSTR) 48)
 #define PKCS_SORTED_CTL ((LPCSTR) 49)
-
-#define X509_ECC_SIGNATURE ((LPCSTR) 47)
-
 #define X942_DH_PARAMETERS ((LPCSTR) 50)
 #define X509_BITS_WITHOUT_TRAILING_ZEROES ((LPCSTR) 51)
 #define X942_OTHER_INFO ((LPCSTR) 52)
@@ -1278,8 +1447,16 @@
 #define PKCS_RSA_SSA_PSS_PARAMETERS ((LPCSTR) 75)
 #define PKCS_RSAES_OAEP_PARAMETERS ((LPCSTR) 76)
 #define ECC_CMS_SHARED_INFO ((LPCSTR) 77)
+#define TIMESTAMP_REQUEST ((LPCSTR) 78)
+#define TIMESTAMP_RESPONSE ((LPCSTR) 79)
+#define TIMESTAMP_INFO ((LPCSTR) 80)
+#define X509_CERT_BUNDLE ((LPCSTR) 81)
+#define X509_ECC_PRIVATE_KEY ((LPCSTR) 82)
+#define CNG_RSA_PRIVATE_KEY_BLOB ((LPCSTR) 83)
+
 #define PKCS7_SIGNER_INFO ((LPCSTR) 500)
 #define CMS_SIGNER_INFO ((LPCSTR) 501)
+
 #define szOID_AUTHORITY_KEY_IDENTIFIER "2.5.29.1"
 #define szOID_KEY_ATTRIBUTES "2.5.29.2"
 #define szOID_CERT_POLICIES_95 "2.5.29.3"
@@ -1292,8 +1469,11 @@
 #define szOID_KEY_USAGE "2.5.29.15"
 #define szOID_PRIVATEKEY_USAGE_PERIOD "2.5.29.16"
 #define szOID_BASIC_CONSTRAINTS2 "2.5.29.19"
+
 #define szOID_CERT_POLICIES "2.5.29.32"
 #define szOID_ANY_CERT_POLICY "2.5.29.32.0"
+#define szOID_INHIBIT_ANY_POLICY "2.5.29.54"
+
 #define szOID_AUTHORITY_KEY_IDENTIFIER2 "2.5.29.35"
 #define szOID_SUBJECT_KEY_IDENTIFIER "2.5.29.14"
 #define szOID_SUBJECT_ALT_NAME2 "2.5.29.17"
@@ -1302,33 +1482,43 @@
 #define szOID_REASON_CODE_HOLD "2.5.29.23"
 #define szOID_CRL_DIST_POINTS "2.5.29.31"
 #define szOID_ENHANCED_KEY_USAGE "2.5.29.37"
+
+#define szOID_ANY_ENHANCED_KEY_USAGE "2.5.29.37.0"
+
 #define szOID_CRL_NUMBER "2.5.29.20"
+
 #define szOID_DELTA_CRL_INDICATOR "2.5.29.27"
 #define szOID_ISSUING_DIST_POINT "2.5.29.28"
+
 #define szOID_FRESHEST_CRL "2.5.29.46"
 #define szOID_NAME_CONSTRAINTS "2.5.29.30"
+
 #define szOID_POLICY_MAPPINGS "2.5.29.33"
 #define szOID_LEGACY_POLICY_MAPPINGS "2.5.29.5"
 #define szOID_POLICY_CONSTRAINTS "2.5.29.36"
-#define szOID_ECC_PUBLIC_KEY "1.2.840.10045.2.1"
-#define szOID_ECDSA_SPECIFIED "1.2.840.10045.4.3"
-#define szOID_RSA_SSA_PSS "1.2.840.113549.1.1.10"
-#define szOID_RSAES_OAEP "1.2.840.113549.1.1.7"
+
 #define szOID_RENEWAL_CERTIFICATE "1.3.6.1.4.1.311.13.1"
 #define szOID_ENROLLMENT_NAME_VALUE_PAIR "1.3.6.1.4.1.311.13.2.1"
 #define szOID_ENROLLMENT_CSP_PROVIDER "1.3.6.1.4.1.311.13.2.2"
 #define szOID_OS_VERSION "1.3.6.1.4.1.311.13.2.3"
+
 #define szOID_ENROLLMENT_AGENT "1.3.6.1.4.1.311.20.2.1"
+
 #define szOID_PKIX "1.3.6.1.5.5.7"
 #define szOID_PKIX_PE "1.3.6.1.5.5.7.1"
 #define szOID_AUTHORITY_INFO_ACCESS "1.3.6.1.5.5.7.1.1"
+#define szOID_SUBJECT_INFO_ACCESS "1.3.6.1.5.5.7.1.11"
 #define szOID_BIOMETRIC_EXT "1.3.6.1.5.5.7.1.2"
+#define szOID_QC_STATEMENTS_EXT "1.3.6.1.5.5.7.1.3"
 #define szOID_LOGOTYPE_EXT "1.3.6.1.5.5.7.1.12"
+
 #define szOID_CERT_EXTENSIONS "1.3.6.1.4.1.311.2.1.14"
 #define szOID_NEXT_UPDATE_LOCATION "1.3.6.1.4.1.311.10.2"
 #define szOID_REMOVE_CERTIFICATE "1.3.6.1.4.1.311.10.8.1"
 #define szOID_CROSS_CERT_DIST_POINTS "1.3.6.1.4.1.311.10.9.1"
+
 #define szOID_CTL "1.3.6.1.4.1.311.10.1"
+
 #define szOID_SORTED_CTL "1.3.6.1.4.1.311.10.1.1"
 
 #ifndef szOID_SERIALIZED
@@ -1339,6 +1529,10 @@
 #define szOID_NT_PRINCIPAL_NAME "1.3.6.1.4.1.311.20.2.3"
 #endif
 
+#ifndef szOID_INTERNATIONALIZED_EMAIL_ADDRESS
+#define szOID_INTERNATIONALIZED_EMAIL_ADDRESS "1.3.6.1.4.1.311.20.2.4"
+#endif
+
 #ifndef szOID_PRODUCT_UPDATE
 #define szOID_PRODUCT_UPDATE "1.3.6.1.4.1.311.31.1"
 #endif
@@ -1354,7 +1548,6 @@
 #ifndef szOID_CERTSRV_CA_VERSION
 #define szOID_CERTSRV_CA_VERSION "1.3.6.1.4.1.311.21.1"
 #endif
-
 #define szOID_CERTSRV_PREVIOUS_CERT_HASH "1.3.6.1.4.1.311.21.2"
 #define szOID_CRL_VIRTUAL_BASE "1.3.6.1.4.1.311.21.3"
 #define szOID_CRL_NEXT_PUBLISH "1.3.6.1.4.1.311.21.4"
@@ -1375,9 +1568,13 @@
 #define szOID_REQUEST_CLIENT_INFO "1.3.6.1.4.1.311.21.20"
 #define szOID_ENCRYPTED_KEY_HASH "1.3.6.1.4.1.311.21.21"
 #define szOID_CERTSRV_CROSSCA_VERSION "1.3.6.1.4.1.311.21.22"
+
 #define szOID_NTDS_REPLICATION "1.3.6.1.4.1.311.25.1"
+
 #define szOID_SUBJECT_DIR_ATTRS "2.5.29.9"
+
 #define szOID_PKIX_KP "1.3.6.1.5.5.7.3"
+
 #define szOID_PKIX_KP_SERVER_AUTH "1.3.6.1.5.5.7.3.1"
 #define szOID_PKIX_KP_CLIENT_AUTH "1.3.6.1.5.5.7.3.2"
 #define szOID_PKIX_KP_CODE_SIGNING "1.3.6.1.5.5.7.3.3"
@@ -1386,8 +1583,17 @@
 #define szOID_PKIX_KP_IPSEC_TUNNEL "1.3.6.1.5.5.7.3.6"
 #define szOID_PKIX_KP_IPSEC_USER "1.3.6.1.5.5.7.3.7"
 #define szOID_PKIX_KP_TIMESTAMP_SIGNING "1.3.6.1.5.5.7.3.8"
+#define szOID_PKIX_KP_OCSP_SIGNING "1.3.6.1.5.5.7.3.9"
+
+#define szOID_PKIX_OCSP_NONCE "1.3.6.1.5.5.7.48.1.2"
+#define szOID_PKIX_OCSP_NOCHECK "1.3.6.1.5.5.7.48.1.5"
+
 #define szOID_IPSEC_KP_IKE_INTERMEDIATE "1.3.6.1.5.5.8.2.2"
+
+#define szOID_PKINIT_KP_KDC "1.3.6.1.5.2.3.5"
+
 #define szOID_KP_CTL_USAGE_SIGNING "1.3.6.1.4.1.311.10.3.1"
+
 #define szOID_KP_TIME_STAMP_SIGNING "1.3.6.1.4.1.311.10.3.2"
 
 #ifndef szOID_SERVER_GATED_CRYPTO
@@ -1397,8 +1603,10 @@
 #ifndef szOID_SGC_NETSCAPE
 #define szOID_SGC_NETSCAPE "2.16.840.1.113730.4.1"
 #endif
+
 #define szOID_KP_EFS "1.3.6.1.4.1.311.10.3.4"
 #define szOID_EFS_RECOVERY "1.3.6.1.4.1.311.10.3.4.1"
+
 #define szOID_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.5"
 #define szOID_NT5_CRYPTO "1.3.6.1.4.1.311.10.3.6"
 #define szOID_OEM_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.7"
@@ -1409,6 +1617,8 @@
 #define szOID_KP_DOCUMENT_SIGNING "1.3.6.1.4.1.311.10.3.12"
 #define szOID_KP_LIFETIME_SIGNING "1.3.6.1.4.1.311.10.3.13"
 #define szOID_KP_MOBILE_DEVICE_SOFTWARE "1.3.6.1.4.1.311.10.3.14"
+#define szOID_KP_SMART_DISPLAY "1.3.6.1.4.1.311.10.3.15"
+#define szOID_KP_CSP_SIGNATURE "1.3.6.1.4.1.311.10.3.16"
 
 #ifndef szOID_DRM
 #define szOID_DRM "1.3.6.1.4.1.311.10.5.1"
@@ -1430,11 +1640,23 @@
 #define szOID_KP_SMARTCARD_LOGON "1.3.6.1.4.1.311.20.2.2"
 #endif
 
+#define szOID_KP_KERNEL_MODE_CODE_SIGNING "1.3.6.1.4.1.311.61.1.1"
+#define szOID_KP_KERNEL_MODE_TRUSTED_BOOT_SIGNING "1.3.6.1.4.1.311.61.4.1"
+#define szOID_REVOKED_LIST_SIGNER "1.3.6.1.4.1.311.10.3.19"
+#define szOID_DISALLOWED_LIST "1.3.6.1.4.1.311.10.3.30"
+#define szOID_KP_KERNEL_MODE_HAL_EXTENSION_SIGNING "1.3.6.1.4.1.311.61.5.1"
 #define szOID_YESNO_TRUST_ATTR "1.3.6.1.4.1.311.10.4.1"
 
 #define szOID_PKIX_POLICY_QUALIFIER_CPS "1.3.6.1.5.5.7.2.1"
 #define szOID_PKIX_POLICY_QUALIFIER_USERNOTICE "1.3.6.1.5.5.7.2.2"
 
+#define szOID_ROOT_PROGRAM_FLAGS "1.3.6.1.4.1.311.60.1.1"
+#define CERT_ROOT_PROGRAM_FLAG_ORG 0x80
+#define CERT_ROOT_PROGRAM_FLAG_LSC 0x40
+#define CERT_ROOT_PROGRAM_FLAG_SUBJECT_LOGO 0x20
+#define CERT_ROOT_PROGRAM_FLAG_OU 0x10
+#define CERT_ROOT_PROGRAM_FLAG_ADDRESS 0x08
+
 #define szOID_CERT_POLICIES_95_QUALIFIER1 "2.16.840.1.113733.1.7.1.1"
 
   typedef struct _CERT_EXTENSIONS {
@@ -1442,16 +1664,16 @@
     PCERT_EXTENSION rgExtension;
   } CERT_EXTENSIONS,*PCERT_EXTENSIONS;
 
-#define CERT_UNICODE_RDN_ERR_INDEX_MASK 0x3FF
+#define CERT_UNICODE_RDN_ERR_INDEX_MASK 0x3ff
 #define CERT_UNICODE_RDN_ERR_INDEX_SHIFT 22
 #define CERT_UNICODE_ATTR_ERR_INDEX_MASK 0x3f
 #define CERT_UNICODE_ATTR_ERR_INDEX_SHIFT 16
 #define CERT_UNICODE_VALUE_ERR_INDEX_MASK 0xffff
 #define CERT_UNICODE_VALUE_ERR_INDEX_SHIFT 0
 
-#define GET_CERT_UNICODE_RDN_ERR_INDEX(X) (((X) >> CERT_UNICODE_RDN_ERR_INDEX_SHIFT) & CERT_UNICODE_RDN_ERR_INDEX_MASK)
-#define GET_CERT_UNICODE_ATTR_ERR_INDEX(X) (((X) >> CERT_UNICODE_ATTR_ERR_INDEX_SHIFT) & CERT_UNICODE_ATTR_ERR_INDEX_MASK)
-#define GET_CERT_UNICODE_VALUE_ERR_INDEX(X) ((X) & CERT_UNICODE_VALUE_ERR_INDEX_MASK)
+#define GET_CERT_UNICODE_RDN_ERR_INDEX(X) ((X >> CERT_UNICODE_RDN_ERR_INDEX_SHIFT) &CERT_UNICODE_RDN_ERR_INDEX_MASK)
+#define GET_CERT_UNICODE_ATTR_ERR_INDEX(X) ((X >> CERT_UNICODE_ATTR_ERR_INDEX_SHIFT) &CERT_UNICODE_ATTR_ERR_INDEX_MASK)
+#define GET_CERT_UNICODE_VALUE_ERR_INDEX(X) (X &CERT_UNICODE_VALUE_ERR_INDEX_MASK)
 
   typedef struct _CERT_AUTHORITY_KEY_ID_INFO {
     CRYPT_DATA_BLOB KeyId;
@@ -1470,15 +1692,14 @@
     PCERT_PRIVATE_KEY_VALIDITY pPrivateKeyUsagePeriod;
   } CERT_KEY_ATTRIBUTES_INFO,*PCERT_KEY_ATTRIBUTES_INFO;
 
-#define CERT_DIGITAL_SIGNATURE_KEY_USAGE 0x80
-#define CERT_NON_REPUDIATION_KEY_USAGE 0x40
-#define CERT_KEY_ENCIPHERMENT_KEY_USAGE 0x20
+#define CERT_ENCIPHER_ONLY_KEY_USAGE 0x01
+#define CERT_OFFLINE_CRL_SIGN_KEY_USAGE 0x02
+#define CERT_KEY_CERT_SIGN_KEY_USAGE 0x04
+#define CERT_KEY_AGREEMENT_KEY_USAGE 0x08
 #define CERT_DATA_ENCIPHERMENT_KEY_USAGE 0x10
-#define CERT_KEY_AGREEMENT_KEY_USAGE 0x8
-#define CERT_KEY_CERT_SIGN_KEY_USAGE 0x4
-#define CERT_OFFLINE_CRL_SIGN_KEY_USAGE 0x2
-#define CERT_CRL_SIGN_KEY_USAGE 0x2
-#define CERT_ENCIPHER_ONLY_KEY_USAGE 0x1
+#define CERT_KEY_ENCIPHERMENT_KEY_USAGE 0x20
+#define CERT_NON_REPUDIATION_KEY_USAGE 0x40
+#define CERT_DIGITAL_SIGNATURE_KEY_USAGE 0x80
 
 #define CERT_DECIPHER_ONLY_KEY_USAGE 0x80
 
@@ -1536,14 +1757,13 @@
     DWORD cAltEntry;
     PCERT_ALT_NAME_ENTRY rgAltEntry;
   } CERT_ALT_NAME_INFO,*PCERT_ALT_NAME_INFO;
-
-#define CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK 0xFF
+#define CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK 0xff
 #define CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT 16
-#define CERT_ALT_NAME_VALUE_ERR_INDEX_MASK 0xffff
+#define CERT_ALT_NAME_VALUE_ERR_INDEX_MASK 0x0000ffff
 #define CERT_ALT_NAME_VALUE_ERR_INDEX_SHIFT 0
 
-#define GET_CERT_ALT_NAME_ENTRY_ERR_INDEX(X) (((X) >> CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT) & CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK)
-#define GET_CERT_ALT_NAME_VALUE_ERR_INDEX(X) ((X) & CERT_ALT_NAME_VALUE_ERR_INDEX_MASK)
+#define GET_CERT_ALT_NAME_ENTRY_ERR_INDEX(X) ((X >> CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT) &CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK)
+#define GET_CERT_ALT_NAME_VALUE_ERR_INDEX(X) (X &CERT_ALT_NAME_VALUE_ERR_INDEX_MASK)
 
   typedef struct _CERT_BASIC_CONSTRAINTS_INFO {
     CRYPT_BIT_BLOB SubjectType;
@@ -1639,7 +1859,6 @@
   typedef struct _CERT_AUTHORITY_KEY_ID2_INFO {
     CRYPT_DATA_BLOB KeyId;
     CERT_ALT_NAME_INFO AuthorityCertIssuer;
-
     CRYPT_INTEGER_BLOB AuthorityCertSerialNumber;
   } CERT_AUTHORITY_KEY_ID2_INFO,*PCERT_AUTHORITY_KEY_ID2_INFO;
 
@@ -1653,9 +1872,13 @@
     PCERT_ACCESS_DESCRIPTION rgAccDescr;
   } CERT_AUTHORITY_INFO_ACCESS,*PCERT_AUTHORITY_INFO_ACCESS;
 
+  typedef CERT_AUTHORITY_INFO_ACCESS CERT_SUBJECT_INFO_ACCESS,*PCERT_SUBJECT_INFO_ACCESS;
+
 #define szOID_PKIX_ACC_DESCR "1.3.6.1.5.5.7.48"
 #define szOID_PKIX_OCSP "1.3.6.1.5.5.7.48.1"
 #define szOID_PKIX_CA_ISSUERS "1.3.6.1.5.5.7.48.2"
+#define szOID_PKIX_TIME_STAMPING "1.3.6.1.5.5.7.48.3"
+#define szOID_PKIX_CA_REPOSITORY "1.3.6.1.5.5.7.48.5"
 
 #define CRL_REASON_UNSPECIFIED 0
 #define CRL_REASON_KEY_COMPROMISE 1
@@ -1687,21 +1910,21 @@
 #define CRL_REASON_KEY_COMPROMISE_FLAG 0x40
 #define CRL_REASON_CA_COMPROMISE_FLAG 0x20
 #define CRL_REASON_AFFILIATION_CHANGED_FLAG 0x10
-#define CRL_REASON_SUPERSEDED_FLAG 0x8
-#define CRL_REASON_CESSATION_OF_OPERATION_FLAG 0x4
-#define CRL_REASON_CERTIFICATE_HOLD_FLAG 0x2
+#define CRL_REASON_SUPERSEDED_FLAG 0x08
+#define CRL_REASON_CESSATION_OF_OPERATION_FLAG 0x04
+#define CRL_REASON_CERTIFICATE_HOLD_FLAG 0x02
 
   typedef struct _CRL_DIST_POINTS_INFO {
     DWORD cDistPoint;
     PCRL_DIST_POINT rgDistPoint;
   } CRL_DIST_POINTS_INFO,*PCRL_DIST_POINTS_INFO;
 
-#define CRL_DIST_POINT_ERR_INDEX_MASK 0x7F
+#define CRL_DIST_POINT_ERR_INDEX_MASK 0x7f
 #define CRL_DIST_POINT_ERR_INDEX_SHIFT 24
-#define GET_CRL_DIST_POINT_ERR_INDEX(X) ((X >> CRL_DIST_POINT_ERR_INDEX_SHIFT) & CRL_DIST_POINT_ERR_INDEX_MASK)
+#define GET_CRL_DIST_POINT_ERR_INDEX(X) ((X >> CRL_DIST_POINT_ERR_INDEX_SHIFT) &CRL_DIST_POINT_ERR_INDEX_MASK)
 
 #define CRL_DIST_POINT_ERR_CRL_ISSUER_BIT __MSABI_LONG(0x80000000)
-#define IS_CRL_DIST_POINT_ERR_CRL_ISSUER(X) (0!=(X & CRL_DIST_POINT_ERR_CRL_ISSUER_BIT))
+#define IS_CRL_DIST_POINT_ERR_CRL_ISSUER(X) (0 != (X & CRL_DIST_POINT_ERR_CRL_ISSUER_BIT))
 
   typedef struct _CROSS_CERT_DIST_POINTS_INFO {
     DWORD dwSyncDeltaTime;
@@ -1709,9 +1932,9 @@
     PCERT_ALT_NAME_INFO rgDistPoint;
   } CROSS_CERT_DIST_POINTS_INFO,*PCROSS_CERT_DIST_POINTS_INFO;
 
-#define CROSS_CERT_DIST_POINT_ERR_INDEX_MASK 0xFF
+#define CROSS_CERT_DIST_POINT_ERR_INDEX_MASK 0xff
 #define CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT 24
-#define GET_CROSS_CERT_DIST_POINT_ERR_INDEX(X) ((X >> CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT) & CROSS_CERT_DIST_POINT_ERR_INDEX_MASK)
+#define GET_CROSS_CERT_DIST_POINT_ERR_INDEX(X) ((X >> CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT) &CROSS_CERT_DIST_POINT_ERR_INDEX_MASK)
 
   typedef struct _CERT_PAIR {
     CERT_BLOB Forward;
@@ -1743,10 +1966,10 @@
 #define CERT_EXCLUDED_SUBTREE_BIT __MSABI_LONG(0x80000000)
 #define IS_CERT_EXCLUDED_SUBTREE(X) (0!=(X & CERT_EXCLUDED_SUBTREE_BIT))
 
-#define SORTED_CTL_EXT_FLAGS_OFFSET (0*4)
-#define SORTED_CTL_EXT_COUNT_OFFSET (1*4)
-#define SORTED_CTL_EXT_MAX_COLLISION_OFFSET (2*4)
-#define SORTED_CTL_EXT_HASH_BUCKET_OFFSET (3*4)
+#define SORTED_CTL_EXT_FLAGS_OFFSET (0)
+#define SORTED_CTL_EXT_COUNT_OFFSET (4)
+#define SORTED_CTL_EXT_MAX_COLLISION_OFFSET (8)
+#define SORTED_CTL_EXT_HASH_BUCKET_OFFSET (12)
 
 #define SORTED_CTL_EXT_HASHED_SUBJECT_IDENTIFIER_FLAG 0x1
 
@@ -1760,13 +1983,18 @@
 #define CERT_DSS_S_LEN 20
 #define CERT_DSS_SIGNATURE_LEN (CERT_DSS_R_LEN + CERT_DSS_S_LEN)
 
-#define CERT_MAX_ASN_ENCODED_DSS_SIGNATURE_LEN (2 + 2*(2 + 20 +1))
+#define CERT_MAX_ASN_ENCODED_DSS_SIGNATURE_LEN (48)
 
   typedef struct _CERT_DH_PARAMETERS {
     CRYPT_UINT_BLOB p;
     CRYPT_UINT_BLOB g;
   } CERT_DH_PARAMETERS,*PCERT_DH_PARAMETERS;
 
+  typedef struct _CERT_ECC_SIGNATURE {
+    CRYPT_UINT_BLOB r;
+    CRYPT_UINT_BLOB s;
+  } CERT_ECC_SIGNATURE,*PCERT_ECC_SIGNATURE;
+
   typedef struct _CERT_X942_DH_VALIDATION_PARAMS {
     CRYPT_BIT_BLOB seed;
     DWORD pgenCounter;
@@ -1783,6 +2011,7 @@
 #define CRYPT_X942_COUNTER_BYTE_LENGTH 4
 #define CRYPT_X942_KEY_LENGTH_BYTE_LENGTH 4
 #define CRYPT_X942_PUB_INFO_BYTE_LENGTH (512/8)
+
   typedef struct _CRYPT_X942_OTHER_INFO {
     LPSTR pszContentEncryptionObjId;
     BYTE rgbCounter[CRYPT_X942_COUNTER_BYTE_LENGTH];
@@ -1790,6 +2019,14 @@
     CRYPT_DATA_BLOB PubInfo;
   } CRYPT_X942_OTHER_INFO,*PCRYPT_X942_OTHER_INFO;
 
+#define CRYPT_ECC_CMS_SHARED_INFO_SUPPPUBINFO_BYTE_LENGTH 4
+
+  typedef struct _CRYPT_ECC_CMS_SHARED_INFO {
+    CRYPT_ALGORITHM_IDENTIFIER Algorithm;
+    CRYPT_DATA_BLOB EntityUInfo;
+    BYTE rgbSuppPubInfo[CRYPT_ECC_CMS_SHARED_INFO_SUPPPUBINFO_BYTE_LENGTH];
+  } CRYPT_ECC_CMS_SHARED_INFO,*PCRYPT_ECC_CMS_SHARED_INFO;
+
   typedef struct _CRYPT_RC2_CBC_PARAMETERS {
     DWORD dwVersion;
     WINBOOL fIV;
@@ -1811,10 +2048,50 @@
     PCRYPT_SMIME_CAPABILITY rgCapability;
   } CRYPT_SMIME_CAPABILITIES,*PCRYPT_SMIME_CAPABILITIES;
 
+  typedef struct _CERT_QC_STATEMENT {
+    LPSTR pszStatementId;
+    CRYPT_OBJID_BLOB StatementInfo;
+  } CERT_QC_STATEMENT,*PCERT_QC_STATEMENT;
+
+  typedef struct _CERT_QC_STATEMENTS_EXT_INFO {
+    DWORD cStatement;
+    PCERT_QC_STATEMENT rgStatement;
+  } CERT_QC_STATEMENTS_EXT_INFO,*PCERT_QC_STATEMENTS_EXT_INFO;
+
+#define szOID_QC_EU_COMPLIANCE "0.4.0.1862.1.1"
+#define szOID_QC_SSCD "0.4.0.1862.1.4"
+
+  typedef struct _CRYPT_MASK_GEN_ALGORITHM {
+    LPSTR pszObjId;
+    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+  } CRYPT_MASK_GEN_ALGORITHM,*PCRYPT_MASK_GEN_ALGORITHM;
+
+  typedef struct _CRYPT_RSA_SSA_PSS_PARAMETERS {
+    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+    CRYPT_MASK_GEN_ALGORITHM MaskGenAlgorithm;
+    DWORD dwSaltLength;
+    DWORD dwTrailerField;
+  } CRYPT_RSA_SSA_PSS_PARAMETERS,*PCRYPT_RSA_SSA_PSS_PARAMETERS;
+
+#define PKCS_RSA_SSA_PSS_TRAILER_FIELD_BC 1
+
+  typedef struct _CRYPT_PSOURCE_ALGORITHM {
+    LPSTR pszObjId;
+    CRYPT_DATA_BLOB EncodingParameters;
+  } CRYPT_PSOURCE_ALGORITHM,*PCRYPT_PSOURCE_ALGORITHM;
+
+  typedef struct _CRYPT_RSAES_OAEP_PARAMETERS {
+    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+    CRYPT_MASK_GEN_ALGORITHM MaskGenAlgorithm;
+    CRYPT_PSOURCE_ALGORITHM PSourceAlgorithm;
+  } CRYPT_RSAES_OAEP_PARAMETERS,*PCRYPT_RSAES_OAEP_PARAMETERS;
+
 #define szOID_VERISIGN_PRIVATE_6_9 "2.16.840.1.113733.1.6.9"
 #define szOID_VERISIGN_ONSITE_JURISDICTION_HASH "2.16.840.1.113733.1.6.11"
 #define szOID_VERISIGN_BITSTRING_6_13 "2.16.840.1.113733.1.6.13"
+
 #define szOID_VERISIGN_ISS_STRONG_CRYPTO "2.16.840.1.113733.1.8.1"
+
 #define szOID_NETSCAPE "2.16.840.1.113730"
 #define szOID_NETSCAPE_CERT_EXTENSION "2.16.840.1.113730.1"
 #define szOID_NETSCAPE_CERT_TYPE "2.16.840.1.113730.1.1"
@@ -1825,20 +2102,23 @@
 #define szOID_NETSCAPE_CA_POLICY_URL "2.16.840.1.113730.1.8"
 #define szOID_NETSCAPE_SSL_SERVER_NAME "2.16.840.1.113730.1.12"
 #define szOID_NETSCAPE_COMMENT "2.16.840.1.113730.1.13"
+
 #define szOID_NETSCAPE_DATA_TYPE "2.16.840.1.113730.2"
 #define szOID_NETSCAPE_CERT_SEQUENCE "2.16.840.1.113730.2.5"
 
-#define NETSCAPE_SSL_CLIENT_AUTH_CERT_TYPE 0x80
-#define NETSCAPE_SSL_SERVER_AUTH_CERT_TYPE 0x40
-#define NETSCAPE_SMIME_CERT_TYPE 0x20
+#define NETSCAPE_SIGN_CA_CERT_TYPE 0x01
+#define NETSCAPE_SMIME_CA_CERT_TYPE 0x02
+#define NETSCAPE_SSL_CA_CERT_TYPE 0x04
 #define NETSCAPE_SIGN_CERT_TYPE 0x10
-#define NETSCAPE_SSL_CA_CERT_TYPE 0x4
-#define NETSCAPE_SMIME_CA_CERT_TYPE 0x2
-#define NETSCAPE_SIGN_CA_CERT_TYPE 0x1
+#define NETSCAPE_SMIME_CERT_TYPE 0x20
+#define NETSCAPE_SSL_SERVER_AUTH_CERT_TYPE 0x40
+#define NETSCAPE_SSL_CLIENT_AUTH_CERT_TYPE 0x80
 
 #define szOID_CT_PKI_DATA "1.3.6.1.5.5.7.12.2"
 #define szOID_CT_PKI_RESPONSE "1.3.6.1.5.5.7.12.3"
+
 #define szOID_PKIX_NO_SIGNATURE "1.3.6.1.5.5.7.6.2"
+
 #define szOID_CMC "1.3.6.1.5.5.7.7"
 #define szOID_CMC_STATUS_INFO "1.3.6.1.5.5.7.7.1"
 #define szOID_CMC_IDENTIFICATION "1.3.6.1.5.5.7.7.2"
@@ -1939,6 +2219,7 @@
 #define CMC_STATUS_PENDING 3
 #define CMC_STATUS_NO_SUPPORT 4
 #define CMC_STATUS_CONFIRM_REQUIRED 5
+
 #define CMC_FAIL_BAD_ALG 0
 #define CMC_FAIL_BAD_MESSAGE_CHECK 1
 #define CMC_FAIL_BAD_REQUEST 2
@@ -1976,6 +2257,211 @@
     DWORD dwMinorVersion;
   } CERT_TEMPLATE_EXT,*PCERT_TEMPLATE_EXT;
 
+  typedef struct _CERT_HASHED_URL {
+    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+    CRYPT_HASH_BLOB Hash;
+    LPWSTR pwszUrl;
+  } CERT_HASHED_URL,*PCERT_HASHED_URL;
+
+  typedef struct _CERT_LOGOTYPE_DETAILS {
+    LPWSTR pwszMimeType;
+    DWORD cHashedUrl;
+    PCERT_HASHED_URL rgHashedUrl;
+  } CERT_LOGOTYPE_DETAILS,*PCERT_LOGOTYPE_DETAILS;
+
+  typedef struct _CERT_LOGOTYPE_REFERENCE {
+    DWORD cHashedUrl;
+    PCERT_HASHED_URL rgHashedUrl;
+  } CERT_LOGOTYPE_REFERENCE,*PCERT_LOGOTYPE_REFERENCE;
+
+  typedef struct _CERT_LOGOTYPE_IMAGE_INFO {
+    DWORD dwLogotypeImageInfoChoice;
+    DWORD dwFileSize;
+    DWORD dwXSize;
+    DWORD dwYSize;
+    DWORD dwLogotypeImageResolutionChoice;
+    __C89_NAMELESS union {
+      DWORD dwNumBits;
+      DWORD dwTableSize;
+    };
+    LPWSTR pwszLanguage;
+  } CERT_LOGOTYPE_IMAGE_INFO,*PCERT_LOGOTYPE_IMAGE_INFO;
+
+#define CERT_LOGOTYPE_GRAY_SCALE_IMAGE_INFO_CHOICE 1
+#define CERT_LOGOTYPE_COLOR_IMAGE_INFO_CHOICE 2
+
+#define CERT_LOGOTYPE_NO_IMAGE_RESOLUTION_CHOICE 0
+#define CERT_LOGOTYPE_BITS_IMAGE_RESOLUTION_CHOICE 1
+#define CERT_LOGOTYPE_TABLE_SIZE_IMAGE_RESOLUTION_CHOICE 2
+
+  typedef struct _CERT_LOGOTYPE_IMAGE {
+    CERT_LOGOTYPE_DETAILS LogotypeDetails;
+    PCERT_LOGOTYPE_IMAGE_INFO pLogotypeImageInfo;
+  } CERT_LOGOTYPE_IMAGE,*PCERT_LOGOTYPE_IMAGE;
+
+  typedef struct _CERT_LOGOTYPE_AUDIO_INFO {
+    DWORD dwFileSize;
+    DWORD dwPlayTime;
+    DWORD dwChannels;
+    DWORD dwSampleRate;
+    LPWSTR pwszLanguage;
+  } CERT_LOGOTYPE_AUDIO_INFO,*PCERT_LOGOTYPE_AUDIO_INFO;
+
+  typedef struct _CERT_LOGOTYPE_AUDIO {
+    CERT_LOGOTYPE_DETAILS LogotypeDetails;
+    PCERT_LOGOTYPE_AUDIO_INFO pLogotypeAudioInfo;
+  } CERT_LOGOTYPE_AUDIO,*PCERT_LOGOTYPE_AUDIO;
+
+  typedef struct _CERT_LOGOTYPE_DATA {
+    DWORD cLogotypeImage;
+    PCERT_LOGOTYPE_IMAGE rgLogotypeImage;
+    DWORD cLogotypeAudio;
+    PCERT_LOGOTYPE_AUDIO rgLogotypeAudio;
+  } CERT_LOGOTYPE_DATA,*PCERT_LOGOTYPE_DATA;
+
+  typedef struct _CERT_LOGOTYPE_INFO {
+    DWORD dwLogotypeInfoChoice;
+    __C89_NAMELESS union {
+      PCERT_LOGOTYPE_DATA pLogotypeDirectInfo;
+      PCERT_LOGOTYPE_REFERENCE pLogotypeIndirectInfo;
+    };
+  } CERT_LOGOTYPE_INFO,*PCERT_LOGOTYPE_INFO;
+
+#define CERT_LOGOTYPE_DIRECT_INFO_CHOICE 1
+#define CERT_LOGOTYPE_INDIRECT_INFO_CHOICE 2
+
+  typedef struct _CERT_OTHER_LOGOTYPE_INFO {
+    LPSTR pszObjId;
+    CERT_LOGOTYPE_INFO LogotypeInfo;
+  } CERT_OTHER_LOGOTYPE_INFO,*PCERT_OTHER_LOGOTYPE_INFO;
+
+#define szOID_LOYALTY_OTHER_LOGOTYPE "1.3.6.1.5.5.7.20.1"
+#define szOID_BACKGROUND_OTHER_LOGOTYPE "1.3.6.1.5.5.7.20.2"
+
+  typedef struct _CERT_LOGOTYPE_EXT_INFO {
+    DWORD cCommunityLogo;
+    PCERT_LOGOTYPE_INFO rgCommunityLogo;
+    PCERT_LOGOTYPE_INFO pIssuerLogo;
+    PCERT_LOGOTYPE_INFO pSubjectLogo;
+    DWORD cOtherLogo;
+    PCERT_OTHER_LOGOTYPE_INFO rgOtherLogo;
+  } CERT_LOGOTYPE_EXT_INFO,*PCERT_LOGOTYPE_EXT_INFO;
+
+  typedef struct _CERT_BIOMETRIC_DATA {
+    DWORD dwTypeOfBiometricDataChoice;
+    __C89_NAMELESS union {
+      DWORD dwPredefined;
+      LPSTR pszObjId;
+    };
+    CERT_HASHED_URL HashedUrl;
+  } CERT_BIOMETRIC_DATA,*PCERT_BIOMETRIC_DATA;
+
+#define CERT_BIOMETRIC_PREDEFINED_DATA_CHOICE 1
+#define CERT_BIOMETRIC_OID_DATA_CHOICE 2
+
+#define CERT_BIOMETRIC_PICTURE_TYPE 0
+#define CERT_BIOMETRIC_SIGNATURE_TYPE 1
+
+  typedef struct _CERT_BIOMETRIC_EXT_INFO {
+    DWORD cBiometricData;
+    PCERT_BIOMETRIC_DATA rgBiometricData;
+  } CERT_BIOMETRIC_EXT_INFO,*PCERT_BIOMETRIC_EXT_INFO;
+
+  typedef struct _OCSP_SIGNATURE_INFO {
+    CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
+    CRYPT_BIT_BLOB Signature;
+    DWORD cCertEncoded;
+    PCERT_BLOB rgCertEncoded;
+  } OCSP_SIGNATURE_INFO,*POCSP_SIGNATURE_INFO;
+
+  typedef struct _OCSP_SIGNED_REQUEST_INFO {
+    CRYPT_DER_BLOB ToBeSigned;
+    POCSP_SIGNATURE_INFO pOptionalSignatureInfo;
+  } OCSP_SIGNED_REQUEST_INFO,*POCSP_SIGNED_REQUEST_INFO;
+
+  typedef struct _OCSP_CERT_ID {
+    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+    CRYPT_HASH_BLOB IssuerNameHash;
+    CRYPT_HASH_BLOB IssuerKeyHash;
+    CRYPT_INTEGER_BLOB SerialNumber;
+  } OCSP_CERT_ID,*POCSP_CERT_ID;
+
+  typedef struct _OCSP_REQUEST_ENTRY {
+    OCSP_CERT_ID CertId;
+    DWORD cExtension;
+    PCERT_EXTENSION rgExtension;
+  } OCSP_REQUEST_ENTRY,*POCSP_REQUEST_ENTRY;
+
+  typedef struct _OCSP_REQUEST_INFO {
+    DWORD dwVersion;
+    PCERT_ALT_NAME_ENTRY pRequestorName;
+    DWORD cRequestEntry;
+    POCSP_REQUEST_ENTRY rgRequestEntry;
+    DWORD cExtension;
+    PCERT_EXTENSION rgExtension;
+  } OCSP_REQUEST_INFO,*POCSP_REQUEST_INFO;
+
+#define OCSP_REQUEST_V1 0
+
+  typedef struct _OCSP_RESPONSE_INFO {
+    DWORD dwStatus;
+    LPSTR pszObjId;
+    CRYPT_OBJID_BLOB Value;
+  } OCSP_RESPONSE_INFO,*POCSP_RESPONSE_INFO;
+
+#define OCSP_SUCCESSFUL_RESPONSE 0
+#define OCSP_MALFORMED_REQUEST_RESPONSE 1
+#define OCSP_INTERNAL_ERROR_RESPONSE 2
+#define OCSP_TRY_LATER_RESPONSE 3
+#define OCSP_SIG_REQUIRED_RESPONSE 5
+#define OCSP_UNAUTHORIZED_RESPONSE 6
+
+#define szOID_PKIX_OCSP_BASIC_SIGNED_RESPONSE "1.3.6.1.5.5.7.48.1.1"
+
+  typedef struct _OCSP_BASIC_SIGNED_RESPONSE_INFO {
+    CRYPT_DER_BLOB ToBeSigned;
+    OCSP_SIGNATURE_INFO SignatureInfo;
+  } OCSP_BASIC_SIGNED_RESPONSE_INFO,*POCSP_BASIC_SIGNED_RESPONSE_INFO;
+
+  typedef struct _OCSP_BASIC_REVOKED_INFO {
+    FILETIME RevocationDate;
+    DWORD dwCrlReasonCode;
+  } OCSP_BASIC_REVOKED_INFO,*POCSP_BASIC_REVOKED_INFO;
+
+  typedef struct _OCSP_BASIC_RESPONSE_ENTRY {
+    OCSP_CERT_ID CertId;
+    DWORD dwCertStatus;
+    __C89_NAMELESS union {
+      POCSP_BASIC_REVOKED_INFO pRevokedInfo;
+    };
+    FILETIME ThisUpdate;
+    FILETIME NextUpdate;
+    DWORD cExtension;
+    PCERT_EXTENSION rgExtension;
+  } OCSP_BASIC_RESPONSE_ENTRY,*POCSP_BASIC_RESPONSE_ENTRY;
+
+#define OCSP_BASIC_GOOD_CERT_STATUS 0
+#define OCSP_BASIC_REVOKED_CERT_STATUS 1
+#define OCSP_BASIC_UNKNOWN_CERT_STATUS 2
+
+  typedef struct _OCSP_BASIC_RESPONSE_INFO {
+    DWORD dwVersion;
+    DWORD dwResponderIdChoice;
+    __C89_NAMELESS union {
+      CERT_NAME_BLOB ByNameResponderId;
+      CRYPT_HASH_BLOB ByKeyResponderId;
+    };
+    FILETIME ProducedAt;
+    DWORD cResponseEntry;
+    POCSP_BASIC_RESPONSE_ENTRY rgResponseEntry;
+    DWORD cExtension;
+    PCERT_EXTENSION rgExtension;
+  } OCSP_BASIC_RESPONSE_INFO,*POCSP_BASIC_RESPONSE_INFO;
+
+#define OCSP_BASIC_RESPONSE_V1 0
+#define OCSP_BASIC_BY_NAME_RESPONDER_ID 1
+#define OCSP_BASIC_BY_KEY_RESPONDER_ID 2
+
   typedef void *HCRYPTOIDFUNCSET;
   typedef void *HCRYPTOIDFUNCADDR;
 
@@ -2006,32 +2492,40 @@
   } CRYPT_OID_FUNC_ENTRY,*PCRYPT_OID_FUNC_ENTRY;
 
 #define CRYPT_INSTALL_OID_FUNC_BEFORE_FLAG 1
-
-  WINIMPM WINBOOL WINAPI CryptInstallOIDFunctionAddress(HMODULE hModule,DWORD dwEncodingType,LPCSTR pszFuncName,DWORD cFuncEntry,const CRYPT_OID_FUNC_ENTRY rgFuncEntry[],DWORD dwFlags);
-  WINIMPM HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR pszFuncName,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptGetOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet,DWORD dwEncodingType,LPCSTR pszOID,DWORD dwFlags,void **ppvFuncAddr,HCRYPTOIDFUNCADDR *phFuncAddr);
-
 #define CRYPT_GET_INSTALLED_OID_FUNC_FLAG 0x1
 
-  WINIMPM WINBOOL WINAPI CryptGetDefaultOIDDllList(HCRYPTOIDFUNCSET hFuncSet,DWORD dwEncodingType,LPWSTR pwszDllList,DWORD *pcchDllList);
-  WINIMPM WINBOOL WINAPI CryptGetDefaultOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet,DWORD dwEncodingType,LPCWSTR pwszDll,DWORD dwFlags,void **ppvFuncAddr,HCRYPTOIDFUNCADDR *phFuncAddr);
-  WINIMPM WINBOOL WINAPI CryptFreeOIDFunctionAddress(HCRYPTOIDFUNCADDR hFuncAddr,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptRegisterOIDFunction(DWORD dwEncodingType,LPCSTR pszFuncName,LPCSTR pszOID,LPCWSTR pwszDll,LPCSTR pszOverrideFuncName);
-  WINIMPM WINBOOL WINAPI CryptUnregisterOIDFunction(DWORD dwEncodingType,LPCSTR pszFuncName,LPCSTR pszOID);
-  WINIMPM WINBOOL WINAPI CryptRegisterDefaultOIDFunction(DWORD dwEncodingType,LPCSTR pszFuncName,DWORD dwIndex,LPCWSTR pwszDll);
-
 #define CRYPT_REGISTER_FIRST_INDEX 0
-#define CRYPT_REGISTER_LAST_INDEX 0xFFFFFFFF
+#define CRYPT_REGISTER_LAST_INDEX 0xffffffff
 
-  WINIMPM WINBOOL WINAPI CryptUnregisterDefaultOIDFunction(DWORD dwEncodingType,LPCSTR pszFuncName,LPCWSTR pwszDll);
-  WINIMPM WINBOOL WINAPI CryptSetOIDFunctionValue(DWORD dwEncodingType,LPCSTR pszFuncName,LPCSTR pszOID,LPCWSTR pwszValueName,DWORD dwValueType,const BYTE *pbValueData,DWORD cbValueData);
-  WINIMPM WINBOOL WINAPI CryptGetOIDFunctionValue(DWORD dwEncodingType,LPCSTR pszFuncName,LPCSTR pszOID,LPCWSTR pwszValueName,DWORD *pdwValueType,BYTE *pbValueData,DWORD *pcbValueData);
+  WINIMPM WINBOOL WINAPI CryptInstallOIDFunctionAddress (HMODULE hModule, DWORD dwEncodingType, LPCSTR pszFuncName, DWORD cFuncEntry, const CRYPT_OID_FUNC_ENTRY rgFuncEntry[], DWORD dwFlags);
+  WINIMPM HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet (LPCSTR pszFuncName, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptGetOIDFunctionAddress (HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, LPCSTR pszOID, DWORD dwFlags, void **ppvFuncAddr, HCRYPTOIDFUNCADDR *phFuncAddr);
+  WINIMPM WINBOOL WINAPI CryptGetDefaultOIDDllList (HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, WCHAR *pwszDllList, DWORD *pcchDllList);
+  WINIMPM WINBOOL WINAPI CryptGetDefaultOIDFunctionAddress (HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, LPCWSTR pwszDll, DWORD dwFlags, void **ppvFuncAddr, HCRYPTOIDFUNCADDR *phFuncAddr);
+  WINIMPM WINBOOL WINAPI CryptFreeOIDFunctionAddress (HCRYPTOIDFUNCADDR hFuncAddr, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptRegisterOIDFunction (DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, LPCWSTR pwszDll, LPCSTR pszOverrideFuncName);
+  WINIMPM WINBOOL WINAPI CryptUnregisterOIDFunction (DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID);
+  WINIMPM WINBOOL WINAPI CryptRegisterDefaultOIDFunction (DWORD dwEncodingType, LPCSTR pszFuncName, DWORD dwIndex, LPCWSTR pwszDll);
+  WINIMPM WINBOOL WINAPI CryptUnregisterDefaultOIDFunction (DWORD dwEncodingType, LPCSTR pszFuncName, LPCWSTR pwszDll);
+  WINIMPM WINBOOL WINAPI CryptSetOIDFunctionValue (DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, LPCWSTR pwszValueName, DWORD dwValueType, const BYTE *pbValueData, DWORD cbValueData);
+  WINIMPM WINBOOL WINAPI CryptGetOIDFunctionValue (DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, LPCWSTR pwszValueName, DWORD *pdwValueType, BYTE *pbValueData, DWORD *pcbValueData);
 
-  typedef WINBOOL (WINAPI *PFN_CRYPT_ENUM_OID_FUNC)(DWORD dwEncodingType,LPCSTR pszFuncName,LPCSTR pszOID,DWORD cValue,const DWORD rgdwValueType[],LPCWSTR const rgpwszValueName[],const BYTE *const rgpbValueData[],const DWORD rgcbValueData[],void *pvArg);
+  typedef WINBOOL (WINAPI *PFN_CRYPT_ENUM_OID_FUNC) (DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, DWORD cValue, const DWORD rgdwValueType[], LPCWSTR const rgpwszValueName[], const BYTE *const rgpbValueData[], const DWORD rgcbValueData[], void *pvArg);
 
-  WINIMPM WINBOOL WINAPI CryptEnumOIDFunction(DWORD dwEncodingType,LPCSTR pszFuncName,LPCSTR pszOID,DWORD dwFlags,void *pvArg,PFN_CRYPT_ENUM_OID_FUNC pfnEnumOIDFunc);
+  WINIMPM WINBOOL WINAPI CryptEnumOIDFunction (DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, DWORD dwFlags, void *pvArg, PFN_CRYPT_ENUM_OID_FUNC pfnEnumOIDFunc);
 
-#define CRYPT_MATCH_ANY_ENCODING_TYPE 0xFFFFFFFF
+#define CRYPT_MATCH_ANY_ENCODING_TYPE 0xffffffff
+#define CALG_OID_INFO_CNG_ONLY 0xffffffff
+#define CALG_OID_INFO_PARAMETERS 0xfffffffe
+#define IS_SPECIAL_OID_INFO_ALGID(Algid) (Algid >= CALG_OID_INFO_PARAMETERS)
+
+#define CRYPT_OID_INFO_HASH_PARAMETERS_ALGORITHM L"CryptOIDInfoHashParameters"
+#define CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM L"CryptOIDInfoECCParameters"
+#define CRYPT_OID_INFO_MGF1_PARAMETERS_ALGORITHM L"CryptOIDInfoMgf1Parameters"
+#define CRYPT_OID_INFO_NO_SIGN_ALGORITHM L"CryptOIDInfoNoSign"
+#define CRYPT_OID_INFO_OAEP_PARAMETERS_ALGORITHM L"CryptOIDInfoOAEPParameters"
+#define CRYPT_OID_INFO_ECC_WRAP_PARAMETERS_ALGORITHM L"CryptOIDInfoECCWrapParameters"
+#define CRYPT_OID_INFO_NO_PARAMETERS_ALGORITHM L"CryptOIDInfoNoParameters"
 
   typedef struct _CRYPT_OID_INFO {
     DWORD cbSize;
@@ -2044,7 +2538,12 @@
       DWORD dwLength;
     };
     CRYPT_DATA_BLOB ExtraInfo;
+#ifdef CRYPT_OID_INFO_HAS_EXTRA_FIELDS
+    LPCWSTR pwszCNGAlgid;
+    LPCWSTR pwszCNGExtraAlgid;
+#endif
   } CRYPT_OID_INFO,*PCRYPT_OID_INFO;
+
   typedef const CRYPT_OID_INFO CCRYPT_OID_INFO,*PCCRYPT_OID_INFO;
 
 #define CRYPT_HASH_ALG_OID_GROUP_ID 1
@@ -2056,7 +2555,9 @@
 #define CRYPT_ENHKEY_USAGE_OID_GROUP_ID 7
 #define CRYPT_POLICY_OID_GROUP_ID 8
 #define CRYPT_TEMPLATE_OID_GROUP_ID 9
-#define CRYPT_LAST_OID_GROUP_ID 9
+#define CRYPT_KDF_OID_GROUP_ID 10
+#define CRYPT_LAST_OID_GROUP_ID 10
+
 #define CRYPT_FIRST_ALG_OID_GROUP_ID CRYPT_HASH_ALG_OID_GROUP_ID
 #define CRYPT_LAST_ALG_OID_GROUP_ID CRYPT_SIGN_ALG_OID_GROUP_ID
 
@@ -2064,27 +2565,84 @@
 #define CRYPT_OID_USE_PUBKEY_PARA_FOR_PKCS7_FLAG 0x2
 #define CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG 0x4
 
-  WINIMPM PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType,void *pvKey,DWORD dwGroupId);
+#define CRYPT_OID_PUBKEY_ENCRYPT_ONLY_FLAG 0x40000000
+#define CRYPT_OID_PUBKEY_SIGN_ONLY_FLAG 0x80000000
+
+  WINIMPM PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo (DWORD dwKeyType, void *pvKey, DWORD dwGroupId);
 
 #define CRYPT_OID_INFO_OID_KEY 1
 #define CRYPT_OID_INFO_NAME_KEY 2
 #define CRYPT_OID_INFO_ALGID_KEY 3
 #define CRYPT_OID_INFO_SIGN_KEY 4
+#define CRYPT_OID_INFO_CNG_ALGID_KEY 5
+#define CRYPT_OID_INFO_CNG_SIGN_KEY 6
 
-  WINIMPM WINBOOL WINAPI CryptRegisterOIDInfo(PCCRYPT_OID_INFO pInfo,DWORD dwFlags);
+#define CRYPT_OID_INFO_OID_KEY_FLAGS_MASK 0xffff0000
+#define CRYPT_OID_INFO_PUBKEY_SIGN_KEY_FLAG 0x80000000
+#define CRYPT_OID_INFO_PUBKEY_ENCRYPT_KEY_FLAG 0x40000000
+
+#define CRYPT_OID_DISABLE_SEARCH_DS_FLAG 0x80000000
+
+#ifdef CRYPT_OID_INFO_HAS_EXTRA_FIELDS
+#define CRYPT_OID_PREFER_CNG_ALGID_FLAG 0x40000000
+#endif
+
+#define CRYPT_OID_INFO_OID_GROUP_BIT_LEN_MASK 0x0fff0000
+#define CRYPT_OID_INFO_OID_GROUP_BIT_LEN_SHIFT 16
 
 #define CRYPT_INSTALL_OID_INFO_BEFORE_FLAG 1
 
-  WINIMPM WINBOOL WINAPI CryptUnregisterOIDInfo(PCCRYPT_OID_INFO pInfo);
+  typedef WINBOOL (WINAPI *PFN_CRYPT_ENUM_OID_INFO) (PCCRYPT_OID_INFO pInfo, void *pvArg);
 
-  typedef WINBOOL (WINAPI *PFN_CRYPT_ENUM_OID_INFO)(PCCRYPT_OID_INFO pInfo,void *pvArg);
-
-  WINIMPM WINBOOL WINAPI CryptEnumOIDInfo(DWORD dwGroupId,DWORD dwFlags,void *pvArg,PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo);
-  WINIMPM LPCWSTR WINAPI CryptFindLocalizedName(LPCWSTR pwszCryptName);
+  WINIMPM WINBOOL WINAPI CryptRegisterOIDInfo (PCCRYPT_OID_INFO pInfo, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CryptUnregisterOIDInfo (PCCRYPT_OID_INFO pInfo);
+  WINIMPM WINBOOL WINAPI CryptEnumOIDInfo (DWORD dwGroupId, DWORD dwFlags, void *pvArg, PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo);
+  WINIMPM LPCWSTR WINAPI CryptFindLocalizedName (LPCWSTR pwszCryptName);
 
 #define CRYPT_LOCALIZED_NAME_ENCODING_TYPE 0
 #define CRYPT_LOCALIZED_NAME_OID "LocalizedNames"
 
+#define CERT_STRONG_SIGN_ECDSA_ALGORITHM L"ECDSA"
+
+  typedef struct _CERT_STRONG_SIGN_SERIALIZED_INFO {
+    DWORD dwFlags;
+    LPWSTR pwszCNGSignHashAlgids;
+    LPWSTR pwszCNGPubKeyMinBitLengths;
+  } CERT_STRONG_SIGN_SERIALIZED_INFO,*PCERT_STRONG_SIGN_SERIALIZED_INFO;
+
+  typedef struct _CERT_STRONG_SIGN_PARA {
+    DWORD cbSize;
+    DWORD dwInfoChoice;
+    __C89_NAMELESS union {
+      void *pvInfo;
+      PCERT_STRONG_SIGN_SERIALIZED_INFO pSerializedInfo;
+      LPSTR pszOID;
+    };
+  } CERT_STRONG_SIGN_PARA,*PCERT_STRONG_SIGN_PARA;
+
+  typedef const CERT_STRONG_SIGN_PARA *PCCERT_STRONG_SIGN_PARA;
+
+#define CERT_STRONG_SIGN_SERIALIZED_INFO_CHOICE 1
+#define CERT_STRONG_SIGN_OID_INFO_CHOICE 2
+
+#define CERT_STRONG_SIGN_ENABLE_CRL_CHECK 0x1
+#define CERT_STRONG_SIGN_ENABLE_OCSP_CHECK 0x2
+
+#define szOID_CERT_STRONG_SIGN_OS_PREFIX "1.3.6.1.4.1.311.72.1."
+
+#define szOID_CERT_STRONG_SIGN_OS_1 "1.3.6.1.4.1.311.72.1.1"
+#define szOID_CERT_STRONG_SIGN_OS_CURRENT szOID_CERT_STRONG_SIGN_OS_1
+
+#define CERT_STRONG_SIGN_PARA_OS_1 { sizeof (CERT_STRONG_SIGN_PARA), CERT_STRONG_SIGN_OID_INFO_CHOICE, szOID_CERT_STRONG_SIGN_OS_1 }
+#define CERT_STRONG_SIGN_PARA_OS_CURRENT { sizeof (CERT_STRONG_SIGN_PARA), CERT_STRONG_SIGN_OID_INFO_CHOICE, szOID_CERT_STRONG_SIGN_OS_CURRENT }
+
+#define szOID_CERT_STRONG_KEY_OS_PREFIX "1.3.6.1.4.1.311.72.2."
+#define szOID_CERT_STRONG_KEY_OS_1 "1.3.6.1.4.1.311.72.2.1"
+#define szOID_CERT_STRONG_KEY_OS_CURRENT szOID_CERT_STRONG_KEY_OS_1
+
+#define CERT_STRONG_KEY_PARA_OS_1 { sizeof (CERT_STRONG_SIGN_PARA), CERT_STRONG_SIGN_OID_INFO_CHOICE, szOID_CERT_STRONG_KEY_OS_1 }
+#define CERT_STRONG_KEY_PARA_OS_CURRENT { sizeof (CERT_STRONG_SIGN_PARA), CERT_STRONG_SIGN_OID_INFO_CHOICE, szOID_CERT_STRONG_KEY_OS_CURRENT }
+
   typedef void *HCRYPTMSG;
 
 #define szOID_PKCS_7_DATA "1.2.840.113549.1.7.1"
@@ -2133,7 +2691,10 @@
   typedef struct _CMSG_SIGNER_ENCODE_INFO {
     DWORD cbSize;
     PCERT_INFO pCertInfo;
-    HCRYPTPROV hCryptProv;
+    __C89_NAMELESS union {
+      HCRYPTPROV hCryptProv;
+      NCRYPT_KEY_HANDLE hNCryptKey;
+    };
     DWORD dwKeySpec;
     CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
     void *pvHashAuxInfo;
@@ -2166,7 +2727,7 @@
 
   typedef struct _CMSG_ENVELOPED_ENCODE_INFO {
     DWORD cbSize;
-    HCRYPTPROV hCryptProv;
+    HCRYPTPROV_LEGACY hCryptProv;
     CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
     void *pvEncryptionAuxInfo;
     DWORD cRecipients;
@@ -2188,7 +2749,7 @@
     DWORD cbSize;
     CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
     void *pvKeyEncryptionAuxInfo;
-    HCRYPTPROV hCryptProv;
+    HCRYPTPROV_LEGACY hCryptProv;
     CRYPT_BIT_BLOB RecipientPublicKey;
     CERT_ID RecipientId;
   } CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO,*PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO;
@@ -2207,7 +2768,7 @@
     void *pvKeyEncryptionAuxInfo;
     CRYPT_ALGORITHM_IDENTIFIER KeyWrapAlgorithm;
     void *pvKeyWrapAuxInfo;
-    HCRYPTPROV hCryptProv;
+    HCRYPTPROV_LEGACY hCryptProv;
     DWORD dwKeySpec;
     DWORD dwKeyChoice;
     __C89_NAMELESS union {
@@ -2229,7 +2790,6 @@
     HCRYPTPROV hCryptProv;
     DWORD dwKeyChoice;
     __C89_NAMELESS union {
-
       HCRYPTKEY hKeyEncryptionKey;
       void *pvKeyEncryptionKey;
     };
@@ -2240,6 +2800,13 @@
 
 #define CMSG_MAIL_LIST_HANDLE_KEY_CHOICE 1
 
+#define CMSG_KEY_TRANS_RECIPIENT 1
+#define CMSG_KEY_AGREE_RECIPIENT 2
+#define CMSG_MAIL_LIST_RECIPIENT 3
+
+#define CMSG_RC4_NO_SALT_FLAG 0x40000000
+#define CMSG_SP3_COMPATIBLE_ENCRYPT_FLAG 0x80000000
+
   struct _CMSG_RECIPIENT_ENCODE_INFO {
     DWORD dwRecipientChoice;
     __C89_NAMELESS union {
@@ -2249,10 +2816,6 @@
     };
   };
 
-#define CMSG_KEY_TRANS_RECIPIENT 1
-#define CMSG_KEY_AGREE_RECIPIENT 2
-#define CMSG_MAIL_LIST_RECIPIENT 3
-
   typedef struct _CMSG_RC2_AUX_INFO {
     DWORD cbSize;
     DWORD dwBitLen;
@@ -2263,15 +2826,11 @@
     DWORD dwFlags;
   } CMSG_SP3_COMPATIBLE_AUX_INFO,*PCMSG_SP3_COMPATIBLE_AUX_INFO;
 
-#define CMSG_SP3_COMPATIBLE_ENCRYPT_FLAG 0x80000000
-
   typedef struct _CMSG_RC4_AUX_INFO {
     DWORD cbSize;
     DWORD dwBitLen;
   } CMSG_RC4_AUX_INFO,*PCMSG_RC4_AUX_INFO;
 
-#define CMSG_RC4_NO_SALT_FLAG 0x40000000
-
   typedef struct _CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO {
     DWORD cbSize;
     CMSG_SIGNED_ENCODE_INFO SignedInfo;
@@ -2280,7 +2839,7 @@
 
   typedef struct _CMSG_HASHED_ENCODE_INFO {
     DWORD cbSize;
-    HCRYPTPROV hCryptProv;
+    HCRYPTPROV_LEGACY hCryptProv;
     CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
     void *pvHashAuxInfo;
   } CMSG_HASHED_ENCODE_INFO,*PCMSG_HASHED_ENCODE_INFO;
@@ -2291,9 +2850,9 @@
     void *pvEncryptionAuxInfo;
   } CMSG_ENCRYPTED_ENCODE_INFO,*PCMSG_ENCRYPTED_ENCODE_INFO;
 
-  typedef WINBOOL (WINAPI *PFN_CMSG_STREAM_OUTPUT)(const void *pvArg,BYTE *pbData,DWORD cbData,WINBOOL fFinal);
+  typedef WINBOOL (WINAPI *PFN_CMSG_STREAM_OUTPUT) (const void *pvArg, BYTE *pbData, DWORD cbData, WINBOOL fFinal);
 
-#define CMSG_INDEFINITE_LENGTH (0xFFFFFFFF)
+#define CMSG_INDEFINITE_LENGTH (0xffffffff)
 
   typedef struct _CMSG_STREAM_INFO {
     DWORD cbContent;
@@ -2307,18 +2866,16 @@
 #define CMSG_AUTHENTICATED_ATTRIBUTES_FLAG 0x8
 #define CMSG_CONTENTS_OCTETS_FLAG 0x10
 #define CMSG_MAX_LENGTH_FLAG 0x20
-
 #define CMSG_CMS_ENCAPSULATED_CONTENT_FLAG 0x40
-
 #define CMSG_CRYPT_RELEASE_CONTEXT_FLAG 0x8000
 
-  WINIMPM HCRYPTMSG WINAPI CryptMsgOpenToEncode(DWORD dwMsgEncodingType,DWORD dwFlags,DWORD dwMsgType,void const *pvMsgEncodeInfo,LPSTR pszInnerContentObjID,PCMSG_STREAM_INFO pStreamInfo);
-  WINIMPM DWORD WINAPI CryptMsgCalculateEncodedLength(DWORD dwMsgEncodingType,DWORD dwFlags,DWORD dwMsgType,void const *pvMsgEncodeInfo,LPSTR pszInnerContentObjID,DWORD cbData);
-  WINIMPM HCRYPTMSG WINAPI CryptMsgOpenToDecode(DWORD dwMsgEncodingType,DWORD dwFlags,DWORD dwMsgType,HCRYPTPROV hCryptProv,PCERT_INFO pRecipientInfo,PCMSG_STREAM_INFO pStreamInfo);
-  WINIMPM HCRYPTMSG WINAPI CryptMsgDuplicate(HCRYPTMSG hCryptMsg);
-  WINIMPM WINBOOL WINAPI CryptMsgClose(HCRYPTMSG hCryptMsg);
-  WINIMPM WINBOOL WINAPI CryptMsgUpdate(HCRYPTMSG hCryptMsg,const BYTE *pbData,DWORD cbData,WINBOOL fFinal);
-  WINIMPM WINBOOL WINAPI CryptMsgGetParam(HCRYPTMSG hCryptMsg,DWORD dwParamType,DWORD dwIndex,void *pvData,DWORD *pcbData);
+  WINIMPM HCRYPTMSG WINAPI CryptMsgOpenToEncode (DWORD dwMsgEncodingType, DWORD dwFlags, DWORD dwMsgType, void const *pvMsgEncodeInfo, LPSTR pszInnerContentObjID, PCMSG_STREAM_INFO pStreamInfo);
+  WINIMPM DWORD WINAPI CryptMsgCalculateEncodedLength (DWORD dwMsgEncodingType, DWORD dwFlags, DWORD dwMsgType, void const *pvMsgEncodeInfo, LPSTR pszInnerContentObjID, DWORD cbData);
+  WINIMPM HCRYPTMSG WINAPI CryptMsgOpenToDecode (DWORD dwMsgEncodingType, DWORD dwFlags, DWORD dwMsgType, HCRYPTPROV_LEGACY hCryptProv, PCERT_INFO pRecipientInfo, PCMSG_STREAM_INFO pStreamInfo);
+  WINIMPM HCRYPTMSG WINAPI CryptMsgDuplicate (HCRYPTMSG hCryptMsg);
+  WINIMPM WINBOOL WINAPI CryptMsgClose (HCRYPTMSG hCryptMsg);
+  WINIMPM WINBOOL WINAPI CryptMsgUpdate (HCRYPTMSG hCryptMsg, const BYTE *pbData, DWORD cbData, WINBOOL fFinal);
+  WINIMPM WINBOOL WINAPI CryptMsgGetParam (HCRYPTMSG hCryptMsg, DWORD dwParamType, DWORD dwIndex, void *pvData, DWORD *pcbData);
 
 #define CMSG_TYPE_PARAM 1
 #define CMSG_CONTENT_PARAM 2
@@ -2457,7 +3014,7 @@
 #define CMSG_KEY_AGREE_VERSION CMSG_ENVELOPED_RECIPIENT_V3
 #define CMSG_MAIL_LIST_VERSION CMSG_ENVELOPED_RECIPIENT_V4
 
-  WINIMPM WINBOOL WINAPI CryptMsgControl(HCRYPTMSG hCryptMsg,DWORD dwFlags,DWORD dwCtrlType,void const *pvCtrlPara);
+  WINIMPM WINBOOL WINAPI CryptMsgControl (HCRYPTMSG hCryptMsg, DWORD dwFlags, DWORD dwCtrlType, void const *pvCtrlPara);
 
 #define CMSG_CTRL_VERIFY_SIGNATURE 1
 #define CMSG_CTRL_DECRYPT 2
@@ -2477,10 +3034,11 @@
 #define CMSG_CTRL_MAIL_LIST_DECRYPT 18
 #define CMSG_CTRL_VERIFY_SIGNATURE_EX 19
 #define CMSG_CTRL_ADD_CMS_SIGNER_INFO 20
+#define CMSG_CTRL_ENABLE_STRONG_SIGNATURE 21
 
   typedef struct _CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA {
     DWORD cbSize;
-    HCRYPTPROV hCryptProv;
+    HCRYPTPROV_LEGACY hCryptProv;
     DWORD dwSignerIndex;
     DWORD dwSignerType;
     void *pvSigner;
@@ -2493,14 +3051,20 @@
 
   typedef struct _CMSG_CTRL_DECRYPT_PARA {
     DWORD cbSize;
-    HCRYPTPROV hCryptProv;
+    __C89_NAMELESS union {
+      HCRYPTPROV hCryptProv;
+      NCRYPT_KEY_HANDLE hNCryptKey;
+    };
     DWORD dwKeySpec;
     DWORD dwRecipientIndex;
   } CMSG_CTRL_DECRYPT_PARA,*PCMSG_CTRL_DECRYPT_PARA;
 
   typedef struct _CMSG_CTRL_KEY_TRANS_DECRYPT_PARA {
     DWORD cbSize;
-    HCRYPTPROV hCryptProv;
+    __C89_NAMELESS union {
+      HCRYPTPROV hCryptProv;
+      NCRYPT_KEY_HANDLE hNCryptKey;
+    };
     DWORD dwKeySpec;
     PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans;
     DWORD dwRecipientIndex;
@@ -2508,7 +3072,10 @@
 
   typedef struct _CMSG_CTRL_KEY_AGREE_DECRYPT_PARA {
     DWORD cbSize;
-    HCRYPTPROV hCryptProv;
+    __C89_NAMELESS union {
+      HCRYPTPROV hCryptProv;
+      NCRYPT_KEY_HANDLE hNCryptKey;
+    };
     DWORD dwKeySpec;
     PCMSG_KEY_AGREE_RECIPIENT_INFO pKeyAgree;
     DWORD dwRecipientIndex;
@@ -2540,28 +3107,29 @@
     DWORD dwUnauthAttrIndex;
   } CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA,*PCMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA;
 
-  WINBOOL WINAPI CryptMsgVerifyCountersignatureEncoded(HCRYPTPROV hCryptProv,DWORD dwEncodingType,PBYTE pbSignerInfo,DWORD cbSignerInfo,PBYTE pbSignerInfoCountersignature,DWORD cbSignerInfoCountersignature,PCERT_INFO pciCountersigner);
-  WINBOOL WINAPI CryptMsgVerifyCountersignatureEncodedEx(HCRYPTPROV hCryptProv,DWORD dwEncodingType,PBYTE pbSignerInfo,DWORD cbSignerInfo,PBYTE pbSignerInfoCountersignature,DWORD cbSignerInfoCountersignature,DWORD dwSignerType,void *pvSigner,DWORD dwFlags,void *pvReserved);
-  WINBOOL WINAPI CryptMsgCountersign(HCRYPTMSG hCryptMsg,DWORD dwIndex,DWORD cCountersigners,PCMSG_SIGNER_ENCODE_INFO rgCountersigners);
-  WINBOOL WINAPI CryptMsgCountersignEncoded(DWORD dwEncodingType,PBYTE pbSignerInfo,DWORD cbSignerInfo,DWORD cCountersigners,PCMSG_SIGNER_ENCODE_INFO rgCountersigners,PBYTE pbCountersignature,PDWORD pcbCountersignature);
+#define CMSG_VERIFY_COUNTER_SIGN_ENABLE_STRONG_FLAG 0x1
 
-  typedef void *(WINAPI *PFN_CMSG_ALLOC)(size_t cb);
-  typedef void (WINAPI *PFN_CMSG_FREE)(void *pv);
+  WINBOOL WINAPI CryptMsgVerifyCountersignatureEncoded (HCRYPTPROV_LEGACY hCryptProv, DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo, PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature, PCERT_INFO pciCountersigner);
+  WINBOOL WINAPI CryptMsgVerifyCountersignatureEncodedEx (HCRYPTPROV_LEGACY hCryptProv, DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo, PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature, DWORD dwSignerType, void *pvSigner, DWORD dwFlags, void *pvExtra);
+  WINBOOL WINAPI CryptMsgCountersign (HCRYPTMSG hCryptMsg, DWORD dwIndex, DWORD cCountersigners, PCMSG_SIGNER_ENCODE_INFO rgCountersigners);
+  WINBOOL WINAPI CryptMsgCountersignEncoded (DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo, DWORD cCountersigners, PCMSG_SIGNER_ENCODE_INFO rgCountersigners, PBYTE pbCountersignature, PDWORD pcbCountersignature);
+
+  typedef void *(WINAPI *PFN_CMSG_ALLOC) (size_t cb);
+  typedef void (WINAPI *PFN_CMSG_FREE) (void *pv);
 
 #define CMSG_OID_GEN_ENCRYPT_KEY_FUNC "CryptMsgDllGenEncryptKey"
-  typedef WINBOOL (WINAPI *PFN_CMSG_GEN_ENCRYPT_KEY)(HCRYPTPROV *phCryptProv,PCRYPT_ALGORITHM_IDENTIFIER paiEncrypt,PVOID pvEncryptAuxInfo,PCERT_PUBLIC_KEY_INFO pPublicKeyInfo,PFN_CMSG_ALLOC pfnAlloc,HCRYPTKEY *phEncryptKey,PBYTE *ppbEncryptParameters,PDWORD pcbEncryptParameters);
-
 #define CMSG_OID_EXPORT_ENCRYPT_KEY_FUNC "CryptMsgDllExportEncryptKey"
-  typedef WINBOOL (WINAPI *PFN_CMSG_EXPORT_ENCRYPT_KEY)(HCRYPTPROV hCryptProv,HCRYPTKEY hEncryptKey,PCERT_PUBLIC_KEY_INFO pPublicKeyInfo,PBYTE pbData,PDWORD pcbData);
-
 #define CMSG_OID_IMPORT_ENCRYPT_KEY_FUNC "CryptMsgDllImportEncryptKey"
-  typedef WINBOOL (WINAPI *PFN_CMSG_IMPORT_ENCRYPT_KEY)(HCRYPTPROV hCryptProv,DWORD dwKeySpec,PCRYPT_ALGORITHM_IDENTIFIER paiEncrypt,PCRYPT_ALGORITHM_IDENTIFIER paiPubKey,PBYTE pbEncodedKey,DWORD cbEncodedKey,HCRYPTKEY *phEncryptKey);
+
+  typedef WINBOOL (WINAPI *PFN_CMSG_GEN_ENCRYPT_KEY) (HCRYPTPROV *phCryptProv, PCRYPT_ALGORITHM_IDENTIFIER paiEncrypt, PVOID pvEncryptAuxInfo, PCERT_PUBLIC_KEY_INFO pPublicKeyInfo, PFN_CMSG_ALLOC pfnAlloc, HCRYPTKEY *phEncryptKey, PBYTE *ppbEncryptParameters, PDWORD pcbEncryptParameters);
+  typedef WINBOOL (WINAPI *PFN_CMSG_EXPORT_ENCRYPT_KEY) (HCRYPTPROV hCryptProv, HCRYPTKEY hEncryptKey, PCERT_PUBLIC_KEY_INFO pPublicKeyInfo, PBYTE pbData, PDWORD pcbData);
+  typedef WINBOOL (WINAPI *PFN_CMSG_IMPORT_ENCRYPT_KEY) (HCRYPTPROV hCryptProv, DWORD dwKeySpec, PCRYPT_ALGORITHM_IDENTIFIER paiEncrypt, PCRYPT_ALGORITHM_IDENTIFIER paiPubKey, PBYTE pbEncodedKey, DWORD cbEncodedKey, HCRYPTKEY *phEncryptKey);
 
 #define CMSG_DEFAULT_INSTALLABLE_FUNC_OID ((LPCSTR) 1)
 
   typedef struct _CMSG_CONTENT_ENCRYPT_INFO {
     DWORD cbSize;
-    HCRYPTPROV hCryptProv;
+    HCRYPTPROV_LEGACY hCryptProv;
     CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
     void *pvEncryptionAuxInfo;
     DWORD cRecipients;
@@ -2569,17 +3137,28 @@
     PFN_CMSG_ALLOC pfnAlloc;
     PFN_CMSG_FREE pfnFree;
     DWORD dwEncryptFlags;
-    HCRYPTKEY hContentEncryptKey;
+    __C89_NAMELESS union {
+      HCRYPTKEY hContentEncryptKey;
+      BCRYPT_KEY_HANDLE hCNGContentEncryptKey;
+    };
     DWORD dwFlags;
+    WINBOOL fCNG;
+    BYTE *pbCNGContentEncryptKeyObject;
+    BYTE *pbContentEncryptKey;
+    DWORD cbContentEncryptKey;
   } CMSG_CONTENT_ENCRYPT_INFO,*PCMSG_CONTENT_ENCRYPT_INFO;
 
 #define CMSG_CONTENT_ENCRYPT_PAD_ENCODED_LEN_FLAG 0x1
 
 #define CMSG_CONTENT_ENCRYPT_FREE_PARA_FLAG 0x1
+#define CMSG_CONTENT_ENCRYPT_FREE_OBJID_FLAG 0x2
 #define CMSG_CONTENT_ENCRYPT_RELEASE_CONTEXT_FLAG 0x8000
 
 #define CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC "CryptMsgDllGenContentEncryptKey"
-  typedef WINBOOL (WINAPI *PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY)(PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,DWORD dwFlags,void *pvReserved);
+#define CMSG_OID_CAPI1_GEN_CONTENT_ENCRYPT_KEY_FUNC CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC
+#define CMSG_OID_CNG_GEN_CONTENT_ENCRYPT_KEY_FUNC "CryptMsgDllCNGGenContentEncryptKey"
+
+  typedef WINBOOL (WINAPI *PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY) (PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, DWORD dwFlags, void *pvReserved);
 
   typedef struct _CMSG_KEY_TRANS_ENCRYPT_INFO {
     DWORD cbSize;
@@ -2590,9 +3169,13 @@
   } CMSG_KEY_TRANS_ENCRYPT_INFO,*PCMSG_KEY_TRANS_ENCRYPT_INFO;
 
 #define CMSG_KEY_TRANS_ENCRYPT_FREE_PARA_FLAG 0x1
+#define CMSG_KEY_TRANS_ENCRYPT_FREE_OBJID_FLAG 0x2
 
 #define CMSG_OID_EXPORT_KEY_TRANS_FUNC "CryptMsgDllExportKeyTrans"
-  typedef WINBOOL (WINAPI *PFN_CMSG_EXPORT_KEY_TRANS)(PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTransEncodeInfo,PCMSG_KEY_TRANS_ENCRYPT_INFO pKeyTransEncryptInfo,DWORD dwFlags,void *pvReserved);
+#define CMSG_OID_CAPI1_EXPORT_KEY_TRANS_FUNC CMSG_OID_EXPORT_KEY_TRANS_FUNC
+#define CMSG_OID_CNG_EXPORT_KEY_TRANS_FUNC "CryptMsgDllCNGExportKeyTrans"
+
+  typedef WINBOOL (WINAPI *PFN_CMSG_EXPORT_KEY_TRANS) (PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTransEncodeInfo, PCMSG_KEY_TRANS_ENCRYPT_INFO pKeyTransEncryptInfo, DWORD dwFlags, void *pvReserved);
 
   typedef struct _CMSG_KEY_AGREE_KEY_ENCRYPT_INFO {
     DWORD cbSize;
@@ -2619,10 +3202,13 @@
 #define CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_ALG_FLAG 0x4
 #define CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_PARA_FLAG 0x8
 #define CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_BITS_FLAG 0x10
+#define CMSG_KEY_AGREE_ENCRYPT_FREE_OBJID_FLAG 0x20
 
 #define CMSG_OID_EXPORT_KEY_AGREE_FUNC "CryptMsgDllExportKeyAgree"
+#define CMSG_OID_CAPI1_EXPORT_KEY_AGREE_FUNC CMSG_OID_EXPORT_KEY_AGREE_FUNC
+#define CMSG_OID_CNG_EXPORT_KEY_AGREE_FUNC "CryptMsgDllCNGExportKeyAgree"
 
-  typedef WINBOOL (WINAPI *PFN_CMSG_EXPORT_KEY_AGREE)(PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO pKeyAgreeEncodeInfo,PCMSG_KEY_AGREE_ENCRYPT_INFO pKeyAgreeEncryptInfo,DWORD dwFlags,void *pvReserved);
+  typedef WINBOOL (WINAPI *PFN_CMSG_EXPORT_KEY_AGREE) (PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO pKeyAgreeEncodeInfo, PCMSG_KEY_AGREE_ENCRYPT_INFO pKeyAgreeEncryptInfo, DWORD dwFlags, void *pvReserved);
 
   typedef struct _CMSG_MAIL_LIST_ENCRYPT_INFO {
     DWORD cbSize;
@@ -2633,19 +3219,44 @@
   } CMSG_MAIL_LIST_ENCRYPT_INFO,*PCMSG_MAIL_LIST_ENCRYPT_INFO;
 
 #define CMSG_MAIL_LIST_ENCRYPT_FREE_PARA_FLAG 0x1
+#define CMSG_MAIL_LIST_ENCRYPT_FREE_OBJID_FLAG 0x2
 
 #define CMSG_OID_EXPORT_MAIL_LIST_FUNC "CryptMsgDllExportMailList"
-  typedef WINBOOL (WINAPI *PFN_CMSG_EXPORT_MAIL_LIST)(PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO pMailListEncodeInfo,PCMSG_MAIL_LIST_ENCRYPT_INFO pMailListEncryptInfo,DWORD dwFlags,void *pvReserved);
-
+#define CMSG_OID_CAPI1_EXPORT_MAIL_LIST_FUNC CMSG_OID_EXPORT_MAIL_LIST_FUNC
 #define CMSG_OID_IMPORT_KEY_TRANS_FUNC "CryptMsgDllImportKeyTrans"
-  typedef WINBOOL (WINAPI *PFN_CMSG_IMPORT_KEY_TRANS)(PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm,PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara,DWORD dwFlags,void *pvReserved,HCRYPTKEY *phContentEncryptKey);
-
+#define CMSG_OID_CAPI1_IMPORT_KEY_TRANS_FUNC CMSG_OID_IMPORT_KEY_TRANS_FUNC
 #define CMSG_OID_IMPORT_KEY_AGREE_FUNC "CryptMsgDllImportKeyAgree"
-  typedef WINBOOL (WINAPI *PFN_CMSG_IMPORT_KEY_AGREE)(PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm,PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA pKeyAgreeDecryptPara,DWORD dwFlags,void *pvReserved,HCRYPTKEY *phContentEncryptKey);
-
+#define CMSG_OID_CAPI1_IMPORT_KEY_AGREE_FUNC CMSG_OID_IMPORT_KEY_AGREE_FUNC
 #define CMSG_OID_IMPORT_MAIL_LIST_FUNC "CryptMsgDllImportMailList"
-  typedef WINBOOL (WINAPI *PFN_CMSG_IMPORT_MAIL_LIST)(PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm,PCMSG_CTRL_MAIL_LIST_DECRYPT_PARA pMailListDecryptPara,DWORD dwFlags,void *pvReserved,HCRYPTKEY *phContentEncryptKey);
+#define CMSG_OID_CAPI1_IMPORT_MAIL_LIST_FUNC CMSG_OID_IMPORT_MAIL_LIST_FUNC
 
+  typedef WINBOOL (WINAPI *PFN_CMSG_EXPORT_MAIL_LIST) (PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO pMailListEncodeInfo, PCMSG_MAIL_LIST_ENCRYPT_INFO pMailListEncryptInfo, DWORD dwFlags, void *pvReserved);
+  typedef WINBOOL (WINAPI *PFN_CMSG_IMPORT_KEY_TRANS) (PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm, PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara, DWORD dwFlags, void *pvReserved, HCRYPTKEY *phContentEncryptKey);
+  typedef WINBOOL (WINAPI *PFN_CMSG_IMPORT_KEY_AGREE) (PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm, PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA pKeyAgreeDecryptPara, DWORD dwFlags, void *pvReserved, HCRYPTKEY *phContentEncryptKey);
+  typedef WINBOOL (WINAPI *PFN_CMSG_IMPORT_MAIL_LIST) (PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm, PCMSG_CTRL_MAIL_LIST_DECRYPT_PARA pMailListDecryptPara, DWORD dwFlags, void *pvReserved, HCRYPTKEY *phContentEncryptKey);
+
+  typedef struct _CMSG_CNG_CONTENT_DECRYPT_INFO {
+    DWORD cbSize;
+    CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
+    PFN_CMSG_ALLOC pfnAlloc;
+    PFN_CMSG_FREE pfnFree;
+    NCRYPT_KEY_HANDLE hNCryptKey;
+    BYTE *pbContentEncryptKey;
+    DWORD cbContentEncryptKey;
+    BCRYPT_KEY_HANDLE hCNGContentEncryptKey;
+    BYTE *pbCNGContentEncryptKeyObject;
+  } CMSG_CNG_CONTENT_DECRYPT_INFO,*PCMSG_CNG_CONTENT_DECRYPT_INFO;
+
+#define CMSG_OID_CNG_IMPORT_KEY_TRANS_FUNC "CryptMsgDllCNGImportKeyTrans"
+#define CMSG_OID_CNG_IMPORT_KEY_AGREE_FUNC "CryptMsgDllCNGImportKeyAgree"
+#define CMSG_OID_CNG_IMPORT_CONTENT_ENCRYPT_KEY_FUNC "CryptMsgDllCNGImportContentEncryptKey"
+
+  typedef WINBOOL (WINAPI *PFN_CMSG_CNG_IMPORT_KEY_TRANS) (PCMSG_CNG_CONTENT_DECRYPT_INFO pCNGContentDecryptInfo, PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara, DWORD dwFlags, void *pvReserved);
+  typedef WINBOOL (WINAPI *PFN_CMSG_CNG_IMPORT_KEY_AGREE) (PCMSG_CNG_CONTENT_DECRYPT_INFO pCNGContentDecryptInfo, PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA pKeyAgreeDecryptPara, DWORD dwFlags, void *pvReserved);
+  typedef WINBOOL (WINAPI *PFN_CMSG_CNG_IMPORT_CONTENT_ENCRYPT_KEY) (PCMSG_CNG_CONTENT_DECRYPT_INFO pCNGContentDecryptInfo, DWORD dwFlags, void *pvReserved);
+#endif
+
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
   typedef void *HCERTSTORE;
 
   typedef struct _CERT_CONTEXT {
@@ -2657,7 +3268,9 @@
   } CERT_CONTEXT,*PCERT_CONTEXT;
 
   typedef const CERT_CONTEXT *PCCERT_CONTEXT;
+#endif
 
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
   typedef struct _CRL_CONTEXT {
     DWORD dwCertEncodingType;
     BYTE *pbCrlEncoded;
@@ -2717,26 +3330,80 @@
 #define CERT_ARCHIVED_KEY_HASH_PROP_ID 65
 #define CERT_AUTO_ENROLL_RETRY_PROP_ID 66
 #define CERT_AIA_URL_RETRIEVED_PROP_ID 67
+#define CERT_AUTHORITY_INFO_ACCESS_PROP_ID 68
+#define CERT_BACKED_UP_PROP_ID 69
+#define CERT_OCSP_RESPONSE_PROP_ID 70
 #define CERT_REQUEST_ORIGINATOR_PROP_ID 71
-#define CERT_FIRST_RESERVED_PROP_ID 72
-#define CERT_LAST_RESERVED_PROP_ID 0x7fff
-#define CERT_FIRST_USER_PROP_ID 0x8000
-#define CERT_LAST_USER_PROP_ID 0xffff
+#define CERT_SOURCE_LOCATION_PROP_ID 72
+#define CERT_SOURCE_URL_PROP_ID 73
+#define CERT_NEW_KEY_PROP_ID 74
+#define CERT_OCSP_CACHE_PREFIX_PROP_ID 75
+#define CERT_SMART_CARD_ROOT_INFO_PROP_ID 76
+#define CERT_NO_AUTO_EXPIRE_CHECK_PROP_ID 77
+#define CERT_NCRYPT_KEY_HANDLE_PROP_ID 78
+#define CERT_HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_PROP_ID 79
+#define CERT_SUBJECT_INFO_ACCESS_PROP_ID 80
+#define CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID 81
+#define CERT_CA_DISABLE_CRL_PROP_ID 82
+#define CERT_ROOT_PROGRAM_CERT_POLICIES_PROP_ID 83
+#define CERT_ROOT_PROGRAM_NAME_CONSTRAINTS_PROP_ID 84
+#define CERT_SUBJECT_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID 85
+#define CERT_SUBJECT_DISABLE_CRL_PROP_ID 86
+#define CERT_CEP_PROP_ID 87
+#define CERT_SIGN_HASH_CNG_ALG_PROP_ID 89
+#define CERT_SCARD_PIN_ID_PROP_ID 90
+#define CERT_SCARD_PIN_INFO_PROP_ID 91
+#define CERT_SUBJECT_PUB_KEY_BIT_LENGTH_PROP_ID 92
+#define CERT_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID 93
+#define CERT_ISSUER_PUB_KEY_BIT_LENGTH_PROP_ID 94
+#define CERT_ISSUER_CHAIN_SIGN_HASH_CNG_ALG_PROP_ID 95
+#define CERT_ISSUER_CHAIN_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID 96
+#define CERT_NO_EXPIRE_NOTIFICATION_PROP_ID 97
+#define CERT_AUTH_ROOT_SHA256_HASH_PROP_ID 98
+#define CERT_NCRYPT_KEY_HANDLE_TRANSFER_PROP_ID 99
+#define CERT_HCRYPTPROV_TRANSFER_PROP_ID 100
+#define CERT_SMART_CARD_READER_PROP_ID 101
+#define CERT_SEND_AS_TRUSTED_ISSUER_PROP_ID 102
+#define CERT_KEY_REPAIR_ATTEMPTED_PROP_ID 103
+#define CERT_DISALLOWED_FILETIME_PROP_ID 104
+#define CERT_ROOT_PROGRAM_CHAIN_POLICIES_PROP_ID 105
+#define CERT_SMART_CARD_READER_NON_REMOVABLE_PROP_ID 106
 
-#define IS_CERT_HASH_PROP_ID(X) (CERT_SHA1_HASH_PROP_ID==(X) || CERT_MD5_HASH_PROP_ID==(X) || CERT_SIGNATURE_HASH_PROP_ID==(X))
-#define IS_PUBKEY_HASH_PROP_ID(X) (CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID==(X) || CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID==(X))
-#define IS_CHAIN_HASH_PROP_ID(X) (CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID==(X) || CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID==(X) || CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID==(X) || CERT_SUBJECT_NAME_MD5_HASH_PROP_ID==(X))
+#define CERT_FIRST_RESERVED_PROP_ID 107
+#define CERT_LAST_RESERVED_PROP_ID 0x00007fff
+#define CERT_FIRST_USER_PROP_ID 0x8000
+#define CERT_LAST_USER_PROP_ID 0x0000ffff
+
+#define IS_CERT_HASH_PROP_ID(X) (CERT_SHA1_HASH_PROP_ID == (X) || CERT_MD5_HASH_PROP_ID == (X) || CERT_SIGNATURE_HASH_PROP_ID == (X))
+#define IS_PUBKEY_HASH_PROP_ID(X) (CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID == (X) || CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID == (X))
+#define IS_CHAIN_HASH_PROP_ID(X) (CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID == (X) || CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID == (X) || CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID == (X) || CERT_SUBJECT_NAME_MD5_HASH_PROP_ID == (X))
+#define IS_STRONG_SIGN_PROP_ID(X) (CERT_SIGN_HASH_CNG_ALG_PROP_ID == (X) || CERT_SUBJECT_PUB_KEY_BIT_LENGTH_PROP_ID == (X) || CERT_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID == (X))
 
 #define szOID_CERT_PROP_ID_PREFIX "1.3.6.1.4.1.311.10.11."
+#define _szPROP_ID(PropId) #PropId
+#define szOID_CERT_PROP_ID(PropId) szOID_CERT_PROP_ID_PREFIX _szPROP_ID (PropId)
+
+#define __CRYPT32WTEXT(quote) L##quote
+#define _CRYPT32WTEXT(quote) __CRYPT32WTEXT (quote)
+#define wszOID_CERT_PROP_ID(PropId) _CRYPT32WTEXT (szOID_CERT_PROP_ID_PREFIX) _CRYPT32WTEXT (_szPROP_ID (PropId))
+
 #define szOID_CERT_KEY_IDENTIFIER_PROP_ID "1.3.6.1.4.1.311.10.11.20"
 #define szOID_CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID "1.3.6.1.4.1.311.10.11.28"
 #define szOID_CERT_SUBJECT_NAME_MD5_HASH_PROP_ID "1.3.6.1.4.1.311.10.11.29"
+#define szOID_CERT_MD5_HASH_PROP_ID "1.3.6.1.4.1.311.10.11.4"
+#define szOID_CERT_SIGNATURE_HASH_PROP_ID "1.3.6.1.4.1.311.10.11.15"
+#define szOID_DISALLOWED_HASH szOID_CERT_SIGNATURE_HASH_PROP_ID
+#define szOID_CERT_DISALLOWED_FILETIME_PROP_ID "1.3.6.1.4.1.311.10.11.104"
 
 #define CERT_ACCESS_STATE_WRITE_PERSIST_FLAG 0x1
-
 #define CERT_ACCESS_STATE_SYSTEM_STORE_FLAG 0x2
-
 #define CERT_ACCESS_STATE_LM_SYSTEM_STORE_FLAG 0x4
+#define CERT_ACCESS_STATE_GP_SYSTEM_STORE_FLAG 0x8
+#define CERT_ACCESS_STATE_SHARED_USER_FLAG 0x10
+
+#define szOID_ROOT_PROGRAM_AUTO_UPDATE_CA_REVOCATION "1.3.6.1.4.1.311.60.3.1"
+#define szOID_ROOT_PROGRAM_AUTO_UPDATE_END_REVOCATION "1.3.6.1.4.1.311.60.3.2"
+#define szOID_ROOT_PROGRAM_NO_OCSP_FAILOVER_TO_CRL "1.3.6.1.4.1.311.60.3.3"
 
   typedef struct _CRYPT_KEY_PROV_PARAM {
     DWORD dwParam;
@@ -2758,17 +3425,31 @@
 #define CERT_SET_KEY_PROV_HANDLE_PROP_ID 0x1
 #define CERT_SET_KEY_CONTEXT_PROP_ID 0x1
 
+#define CERT_NCRYPT_KEY_SPEC 0xffffffff
+
   typedef struct _CERT_KEY_CONTEXT {
     DWORD cbSize;
-    HCRYPTPROV hCryptProv;
+    __C89_NAMELESS union {
+      HCRYPTPROV hCryptProv;
+      NCRYPT_KEY_HANDLE hNCryptKey;
+    };
     DWORD dwKeySpec;
   } CERT_KEY_CONTEXT,*PCERT_KEY_CONTEXT;
 
+  typedef struct _ROOT_INFO_LUID {
+    DWORD LowPart;
+    LONG HighPart;
+  } ROOT_INFO_LUID,*PROOT_INFO_LUID;
+
+  typedef struct _CRYPT_SMART_CARD_ROOT_INFO {
+    BYTE rgbCardID [16];
+    ROOT_INFO_LUID luid;
+  } CRYPT_SMART_CARD_ROOT_INFO,*PCRYPT_SMART_CARD_ROOT_INFO;
+
 #define CERT_STORE_PROV_MSG ((LPCSTR) 1)
 #define CERT_STORE_PROV_MEMORY ((LPCSTR) 2)
 #define CERT_STORE_PROV_FILE ((LPCSTR) 3)
 #define CERT_STORE_PROV_REG ((LPCSTR) 4)
-
 #define CERT_STORE_PROV_PKCS7 ((LPCSTR) 5)
 #define CERT_STORE_PROV_SERIALIZED ((LPCSTR) 6)
 #define CERT_STORE_PROV_FILENAME_A ((LPCSTR) 7)
@@ -2777,7 +3458,6 @@
 #define CERT_STORE_PROV_SYSTEM_A ((LPCSTR) 9)
 #define CERT_STORE_PROV_SYSTEM_W ((LPCSTR) 10)
 #define CERT_STORE_PROV_SYSTEM CERT_STORE_PROV_SYSTEM_W
-
 #define CERT_STORE_PROV_COLLECTION ((LPCSTR) 11)
 #define CERT_STORE_PROV_SYSTEM_REGISTRY_A ((LPCSTR) 12)
 #define CERT_STORE_PROV_SYSTEM_REGISTRY_W ((LPCSTR) 13)
@@ -2788,29 +3468,38 @@
 #define CERT_STORE_PROV_SMART_CARD CERT_STORE_PROV_SMART_CARD_W
 #define CERT_STORE_PROV_LDAP_W ((LPCSTR) 16)
 #define CERT_STORE_PROV_LDAP CERT_STORE_PROV_LDAP_W
+#define CERT_STORE_PROV_PKCS12 ((LPCSTR) 17)
+
 #define sz_CERT_STORE_PROV_MEMORY "Memory"
 #define sz_CERT_STORE_PROV_FILENAME_W "File"
 #define sz_CERT_STORE_PROV_FILENAME sz_CERT_STORE_PROV_FILENAME_W
 #define sz_CERT_STORE_PROV_SYSTEM_W "System"
 #define sz_CERT_STORE_PROV_SYSTEM sz_CERT_STORE_PROV_SYSTEM_W
 #define sz_CERT_STORE_PROV_PKCS7 "PKCS7"
+#define sz_CERT_STORE_PROV_PKCS12 "PKCS12"
 #define sz_CERT_STORE_PROV_SERIALIZED "Serialized"
+
 #define sz_CERT_STORE_PROV_COLLECTION "Collection"
 #define sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W "SystemRegistry"
 #define sz_CERT_STORE_PROV_SYSTEM_REGISTRY sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W
 #define sz_CERT_STORE_PROV_PHYSICAL_W "Physical"
 #define sz_CERT_STORE_PROV_PHYSICAL sz_CERT_STORE_PROV_PHYSICAL_W
+
 #define sz_CERT_STORE_PROV_SMART_CARD_W "SmartCard"
 #define sz_CERT_STORE_PROV_SMART_CARD sz_CERT_STORE_PROV_SMART_CARD_W
+
 #define sz_CERT_STORE_PROV_LDAP_W "Ldap"
 #define sz_CERT_STORE_PROV_LDAP sz_CERT_STORE_PROV_LDAP_W
+
 #define CERT_STORE_SIGNATURE_FLAG 0x1
 #define CERT_STORE_TIME_VALIDITY_FLAG 0x2
 #define CERT_STORE_REVOCATION_FLAG 0x4
 #define CERT_STORE_NO_CRL_FLAG 0x10000
 #define CERT_STORE_NO_ISSUER_FLAG 0x20000
+
 #define CERT_STORE_BASE_CRL_FLAG 0x100
 #define CERT_STORE_DELTA_CRL_FLAG 0x200
+
 #define CERT_STORE_NO_CRYPT_RELEASE_FLAG 0x1
 #define CERT_STORE_SET_LOCALIZED_NAME_FLAG 0x2
 #define CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG 0x4
@@ -2827,7 +3516,8 @@
 #define CERT_STORE_CREATE_NEW_FLAG 0x2000
 #define CERT_STORE_MAXIMUM_ALLOWED_FLAG 0x1000
 
-#define CERT_SYSTEM_STORE_MASK 0xFFFF0000
+#define CERT_SYSTEM_STORE_MASK 0xffff0000
+
 #define CERT_SYSTEM_STORE_RELOCATE_FLAG 0x80000000
 
   typedef struct _CERT_SYSTEM_STORE_RELOCATE_PARA {
@@ -2842,9 +3532,12 @@
     };
   } CERT_SYSTEM_STORE_RELOCATE_PARA,*PCERT_SYSTEM_STORE_RELOCATE_PARA;
 
+#define CERT_SYSTEM_STORE_DEFER_READ_FLAG 0x20000000
 #define CERT_SYSTEM_STORE_UNPROTECTED_FLAG 0x40000000
-#define CERT_SYSTEM_STORE_LOCATION_MASK 0xff0000
+
+#define CERT_SYSTEM_STORE_LOCATION_MASK 0x00ff0000
 #define CERT_SYSTEM_STORE_LOCATION_SHIFT 16
+
 #define CERT_SYSTEM_STORE_CURRENT_USER_ID 1
 #define CERT_SYSTEM_STORE_LOCAL_MACHINE_ID 2
 #define CERT_SYSTEM_STORE_CURRENT_SERVICE_ID 4
@@ -2853,6 +3546,7 @@
 #define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID 7
 #define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID 8
 #define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID 9
+
 #define CERT_SYSTEM_STORE_CURRENT_USER (CERT_SYSTEM_STORE_CURRENT_USER_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
 #define CERT_SYSTEM_STORE_LOCAL_MACHINE (CERT_SYSTEM_STORE_LOCAL_MACHINE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
 #define CERT_SYSTEM_STORE_CURRENT_SERVICE (CERT_SYSTEM_STORE_CURRENT_SERVICE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
@@ -2876,11 +3570,16 @@
 #define CERT_PROT_ROOT_ONLY_LM_GPT_FLAG 0x8
 #define CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG 0x10
 #define CERT_PROT_ROOT_DISABLE_NOT_DEFINED_NAME_CONSTRAINT_FLAG 0x20
+#define CERT_PROT_ROOT_DISABLE_PEER_TRUST 0x10000
+#define CERT_PROT_ROOT_PEER_USAGES_VALUE_NAME L"PeerUsages"
+#define CERT_PROT_ROOT_PEER_USAGES_VALUE_NAME_A "PeerUsages"
+#define CERT_PROT_ROOT_PEER_USAGES_DEFAULT_A szOID_PKIX_KP_CLIENT_AUTH "\0" szOID_PKIX_KP_EMAIL_PROTECTION "\0" szOID_KP_EFS "\0"
 
 #define CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer"
 #define CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH L"Software\\Microsoft\\SystemCertificates"
 #define CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer"
 #define CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME L"AuthenticodeFlags"
+
 #define CERT_TRUST_PUB_ALLOW_TRUST_MASK 0x3
 #define CERT_TRUST_PUB_ALLOW_END_USER_TRUST 0x0
 #define CERT_TRUST_PUB_ALLOW_MACHINE_ADMIN_TRUST 0x1
@@ -2891,18 +3590,35 @@
 #define CERT_OCM_SUBCOMPONENTS_LOCAL_MACHINE_REGPATH L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup\\OC Manager\\Subcomponents"
 #define CERT_OCM_SUBCOMPONENTS_ROOT_AUTO_UPDATE_VALUE_NAME L"RootAutoUpdate"
 
-#define CERT_AUTH_ROOT_AUTO_UPDATE_LOCAL_MACHINE_REGPATH CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH L"\\AuthRoot\\AutoUpdate"
-#define CERT_AUTH_ROOT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME L"RootDirUrl"
+#define CERT_DISABLE_ROOT_AUTO_UPDATE_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\AuthRoot"
+#define CERT_DISABLE_ROOT_AUTO_UPDATE_VALUE_NAME L"DisableRootAutoUpdate"
+
+#define CERT_AUTO_UPDATE_LOCAL_MACHINE_REGPATH CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH L"\\AuthRoot\\AutoUpdate"
+#define CERT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME L"RootDirUrl"
+
+#define CERT_AUTH_ROOT_AUTO_UPDATE_LOCAL_MACHINE_REGPATH CERT_AUTO_UPDATE_LOCAL_MACHINE_REGPATH
+#define CERT_AUTH_ROOT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME CERT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME
 #define CERT_AUTH_ROOT_AUTO_UPDATE_SYNC_DELTA_TIME_VALUE_NAME L"SyncDeltaTime"
 #define CERT_AUTH_ROOT_AUTO_UPDATE_FLAGS_VALUE_NAME L"Flags"
 #define CERT_AUTH_ROOT_AUTO_UPDATE_DISABLE_UNTRUSTED_ROOT_LOGGING_FLAG 0x1
 #define CERT_AUTH_ROOT_AUTO_UPDATE_DISABLE_PARTIAL_CHAIN_LOGGING_FLAG 0x2
+#define CERT_AUTO_UPDATE_DISABLE_RANDOM_QUERY_STRING_FLAG 0x4
+#define CERT_AUTH_ROOT_AUTO_UPDATE_LAST_SYNC_TIME_VALUE_NAME L"LastSyncTime"
+#define CERT_AUTH_ROOT_AUTO_UPDATE_ENCODED_CTL_VALUE_NAME L"EncodedCtl"
 #define CERT_AUTH_ROOT_CTL_FILENAME L"authroot.stl"
 #define CERT_AUTH_ROOT_CTL_FILENAME_A "authroot.stl"
 #define CERT_AUTH_ROOT_CAB_FILENAME L"authrootstl.cab"
 #define CERT_AUTH_ROOT_SEQ_FILENAME L"authrootseq.txt"
 #define CERT_AUTH_ROOT_CERT_EXT L".crt"
 
+#define CERT_DISALLOWED_CERT_AUTO_UPDATE_SYNC_DELTA_TIME_VALUE_NAME L"DisallowedCertSyncDeltaTime"
+#define CERT_DISALLOWED_CERT_AUTO_UPDATE_LAST_SYNC_TIME_VALUE_NAME L"DisallowedCertLastSyncTime"
+#define CERT_DISALLOWED_CERT_AUTO_UPDATE_ENCODED_CTL_VALUE_NAME L"DisallowedCertEncodedCtl"
+#define CERT_DISALLOWED_CERT_CTL_FILENAME L"disallowedcert.stl"
+#define CERT_DISALLOWED_CERT_CTL_FILENAME_A "disallowedcert.stl"
+#define CERT_DISALLOWED_CERT_CAB_FILENAME L"disallowedcertstl.cab"
+#define CERT_DISALLOWED_CERT_AUTO_UPDATE_LIST_IDENTIFIER L"DisallowedCert_AutoUpdate_1"
+
 #define CERT_REGISTRY_STORE_REMOTE_FLAG 0x10000
 #define CERT_REGISTRY_STORE_SERIALIZED_FLAG 0x20000
 #define CERT_REGISTRY_STORE_CLIENT_GPT_FLAG 0x80000000
@@ -2921,7 +3637,10 @@
   } CERT_REGISTRY_STORE_ROAMING_PARA,*PCERT_REGISTRY_STORE_ROAMING_PARA;
 
 #define CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG 0x80000
+#define CERT_REGISTRY_STORE_EXTERNAL_FLAG 0x100000
+
 #define CERT_IE_DIRTY_FLAGS_REGPATH L"Software\\Microsoft\\Cryptography\\IEDirtyFlags"
+
 #define CERT_FILE_STORE_COMMIT_ENABLE_FLAG 0x10000
 #define CERT_LDAP_STORE_SIGN_FLAG 0x10000
 #define CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG 0x20000
@@ -2934,7 +3653,7 @@
 
 #define CERT_LDAP_STORE_UNBIND_FLAG 0x80000
 
-  WINIMPM HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider,DWORD dwEncodingType,HCRYPTPROV hCryptProv,DWORD dwFlags,const void *pvPara);
+  WINIMPM HCERTSTORE WINAPI CertOpenStore (LPCSTR lpszStoreProvider, DWORD dwEncodingType, HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const void *pvPara);
 
   typedef void *HCERTSTOREPROV;
 
@@ -2949,13 +3668,16 @@
     HCRYPTOIDFUNCADDR hStoreProvFuncAddr2;
   } CERT_STORE_PROV_INFO,*PCERT_STORE_PROV_INFO;
 
-  typedef WINBOOL (WINAPI *PFN_CERT_DLL_OPEN_STORE_PROV_FUNC)(LPCSTR lpszStoreProvider,DWORD dwEncodingType,HCRYPTPROV hCryptProv,DWORD dwFlags,const void *pvPara,HCERTSTORE hCertStore,PCERT_STORE_PROV_INFO pStoreProvInfo);
+  typedef WINBOOL (WINAPI *PFN_CERT_DLL_OPEN_STORE_PROV_FUNC) (LPCSTR lpszStoreProvider, DWORD dwEncodingType, HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const void *pvPara, HCERTSTORE hCertStore, PCERT_STORE_PROV_INFO pStoreProvInfo);
 
 #define CERT_STORE_PROV_EXTERNAL_FLAG 0x1
 #define CERT_STORE_PROV_DELETED_FLAG 0x2
 #define CERT_STORE_PROV_NO_PERSIST_FLAG 0x4
 #define CERT_STORE_PROV_SYSTEM_STORE_FLAG 0x8
 #define CERT_STORE_PROV_LM_SYSTEM_STORE_FLAG 0x10
+#define CERT_STORE_PROV_GP_SYSTEM_STORE_FLAG 0x20
+#define CERT_STORE_PROV_SHARED_USER_FLAG 0x40
+
 #define CERT_STORE_PROV_CLOSE_FUNC 0
 #define CERT_STORE_PROV_READ_CERT_FUNC 1
 #define CERT_STORE_PROV_WRITE_CERT_FUNC 2
@@ -2980,23 +3702,22 @@
 #define CERT_STORE_PROV_FREE_FIND_CTL_FUNC 21
 #define CERT_STORE_PROV_GET_CTL_PROPERTY_FUNC 22
 
-  typedef void (WINAPI *PFN_CERT_STORE_PROV_CLOSE)(HCERTSTOREPROV hStoreProv,DWORD dwFlags);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CERT)(HCERTSTOREPROV hStoreProv,PCCERT_CONTEXT pStoreCertContext,DWORD dwFlags,PCCERT_CONTEXT *ppProvCertContext);
-
 #define CERT_STORE_PROV_WRITE_ADD_FLAG 0x1
 
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CERT)(HCERTSTOREPROV hStoreProv,PCCERT_CONTEXT pCertContext,DWORD dwFlags);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CERT)(HCERTSTOREPROV hStoreProv,PCCERT_CONTEXT pCertContext,DWORD dwFlags);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CERT_PROPERTY)(HCERTSTOREPROV hStoreProv,PCCERT_CONTEXT pCertContext,DWORD dwPropId,DWORD dwFlags,const void *pvData);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CRL)(HCERTSTOREPROV hStoreProv,PCCRL_CONTEXT pStoreCrlContext,DWORD dwFlags,PCCRL_CONTEXT *ppProvCrlContext);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CRL)(HCERTSTOREPROV hStoreProv,PCCRL_CONTEXT pCrlContext,DWORD dwFlags);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CRL)(HCERTSTOREPROV hStoreProv,PCCRL_CONTEXT pCrlContext,DWORD dwFlags);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CRL_PROPERTY)(HCERTSTOREPROV hStoreProv,PCCRL_CONTEXT pCrlContext,DWORD dwPropId,DWORD dwFlags,const void *pvData);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CTL)(HCERTSTOREPROV hStoreProv,PCCTL_CONTEXT pStoreCtlContext,DWORD dwFlags,PCCTL_CONTEXT *ppProvCtlContext);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CTL)(HCERTSTOREPROV hStoreProv,PCCTL_CONTEXT pCtlContext,DWORD dwFlags);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CTL)(HCERTSTOREPROV hStoreProv,PCCTL_CONTEXT pCtlContext,DWORD dwFlags);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CTL_PROPERTY)(HCERTSTOREPROV hStoreProv,PCCTL_CONTEXT pCtlContext,DWORD dwPropId,DWORD dwFlags,const void *pvData);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_CONTROL)(HCERTSTOREPROV hStoreProv,DWORD dwFlags,DWORD dwCtrlType,void const *pvCtrlPara);
+  typedef void (WINAPI *PFN_CERT_STORE_PROV_CLOSE) (HCERTSTOREPROV hStoreProv, DWORD dwFlags);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CERT) (HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pStoreCertContext, DWORD dwFlags, PCCERT_CONTEXT *ppProvCertContext);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CERT) (HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwFlags);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CERT) (HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwFlags);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CERT_PROPERTY) (HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId, DWORD dwFlags, const void *pvData);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CRL) (HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pStoreCrlContext, DWORD dwFlags, PCCRL_CONTEXT *ppProvCrlContext);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CRL) (HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwFlags);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CRL) (HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwFlags);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CRL_PROPERTY) (HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId, DWORD dwFlags, const void *pvData);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CTL) (HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pStoreCtlContext, DWORD dwFlags, PCCTL_CONTEXT *ppProvCtlContext);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CTL) (HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwFlags);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CTL) (HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwFlags);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CTL_PROPERTY) (HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId, DWORD dwFlags, const void *pvData);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_CONTROL) (HCERTSTOREPROV hStoreProv, DWORD dwFlags, DWORD dwCtrlType, void const *pvCtrlPara);
 
   typedef struct _CERT_STORE_PROV_FIND_INFO {
     DWORD cbSize;
@@ -3007,37 +3728,39 @@
   } CERT_STORE_PROV_FIND_INFO,*PCERT_STORE_PROV_FIND_INFO;
 
   typedef const CERT_STORE_PROV_FIND_INFO CCERT_STORE_PROV_FIND_INFO,*PCCERT_STORE_PROV_FIND_INFO;
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CERT)(HCERTSTOREPROV hStoreProv,PCCERT_STORE_PROV_FIND_INFO pFindInfo,PCCERT_CONTEXT pPrevCertContext,DWORD dwFlags,void **ppvStoreProvFindInfo,PCCERT_CONTEXT *ppProvCertContext);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CERT)(HCERTSTOREPROV hStoreProv,PCCERT_CONTEXT pCertContext,void *pvStoreProvFindInfo,DWORD dwFlags);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CERT_PROPERTY)(HCERTSTOREPROV hStoreProv,PCCERT_CONTEXT pCertContext,DWORD dwPropId,DWORD dwFlags,void *pvData,DWORD *pcbData);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CRL)(HCERTSTOREPROV hStoreProv,PCCERT_STORE_PROV_FIND_INFO pFindInfo,PCCRL_CONTEXT pPrevCrlContext,DWORD dwFlags,void **ppvStoreProvFindInfo,PCCRL_CONTEXT *ppProvCrlContext);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CRL)(HCERTSTOREPROV hStoreProv,PCCRL_CONTEXT pCrlContext,void *pvStoreProvFindInfo,DWORD dwFlags);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CRL_PROPERTY)(HCERTSTOREPROV hStoreProv,PCCRL_CONTEXT pCrlContext,DWORD dwPropId,DWORD dwFlags,void *pvData,DWORD *pcbData);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CTL)(HCERTSTOREPROV hStoreProv,PCCERT_STORE_PROV_FIND_INFO pFindInfo,PCCTL_CONTEXT pPrevCtlContext,DWORD dwFlags,void **ppvStoreProvFindInfo,PCCTL_CONTEXT *ppProvCtlContext);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CTL)(HCERTSTOREPROV hStoreProv,PCCTL_CONTEXT pCtlContext,void *pvStoreProvFindInfo,DWORD dwFlags);
-  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CTL_PROPERTY)(HCERTSTOREPROV hStoreProv,PCCTL_CONTEXT pCtlContext,DWORD dwPropId,DWORD dwFlags,void *pvData,DWORD *pcbData);
 
-  WINIMPM HCERTSTORE WINAPI CertDuplicateStore(HCERTSTORE hCertStore);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CERT) (HCERTSTOREPROV hStoreProv, PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCERT_CONTEXT pPrevCertContext, DWORD dwFlags, void **ppvStoreProvFindInfo, PCCERT_CONTEXT *ppProvCertContext);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CERT) (HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, void *pvStoreProvFindInfo, DWORD dwFlags);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CERT_PROPERTY) (HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId, DWORD dwFlags, void *pvData, DWORD *pcbData);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CRL) (HCERTSTOREPROV hStoreProv, PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCRL_CONTEXT pPrevCrlContext, DWORD dwFlags, void **ppvStoreProvFindInfo, PCCRL_CONTEXT *ppProvCrlContext);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CRL) (HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, void *pvStoreProvFindInfo, DWORD dwFlags);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CRL_PROPERTY) (HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId, DWORD dwFlags, void *pvData, DWORD *pcbData);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CTL) (HCERTSTOREPROV hStoreProv, PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCTL_CONTEXT pPrevCtlContext, DWORD dwFlags, void **ppvStoreProvFindInfo, PCCTL_CONTEXT *ppProvCtlContext);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CTL) (HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, void *pvStoreProvFindInfo, DWORD dwFlags);
+  typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CTL_PROPERTY) (HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId, DWORD dwFlags, void *pvData, DWORD *pcbData);
+
+  WINIMPM HCERTSTORE WINAPI CertDuplicateStore (HCERTSTORE hCertStore);
 
 #define CERT_STORE_SAVE_AS_STORE 1
 #define CERT_STORE_SAVE_AS_PKCS7 2
+#define CERT_STORE_SAVE_AS_PKCS12 3
+
 #define CERT_STORE_SAVE_TO_FILE 1
 #define CERT_STORE_SAVE_TO_MEMORY 2
 #define CERT_STORE_SAVE_TO_FILENAME_A 3
 #define CERT_STORE_SAVE_TO_FILENAME_W 4
 #define CERT_STORE_SAVE_TO_FILENAME CERT_STORE_SAVE_TO_FILENAME_W
 
-  WINIMPM WINBOOL WINAPI CertSaveStore(HCERTSTORE hCertStore,DWORD dwEncodingType,DWORD dwSaveAs,DWORD dwSaveTo,void *pvSaveToPara,DWORD dwFlags);
-
 #define CERT_CLOSE_STORE_FORCE_FLAG 0x1
 #define CERT_CLOSE_STORE_CHECK_FLAG 0x2
 
-  WINIMPM WINBOOL WINAPI CertCloseStore(HCERTSTORE hCertStore,DWORD dwFlags);
-  WINIMPM PCCERT_CONTEXT WINAPI CertGetSubjectCertificateFromStore(HCERTSTORE hCertStore,DWORD dwCertEncodingType,PCERT_INFO pCertId);
-  WINIMPM PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore,PCCERT_CONTEXT pPrevCertContext);
-  WINIMPM PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE hCertStore,DWORD dwCertEncodingType,DWORD dwFindFlags,DWORD dwFindType,const void *pvFindPara,PCCERT_CONTEXT pPrevCertContext);
+  WINIMPM WINBOOL WINAPI CertSaveStore (HCERTSTORE hCertStore, DWORD dwEncodingType, DWORD dwSaveAs, DWORD dwSaveTo, void *pvSaveToPara, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CertCloseStore (HCERTSTORE hCertStore, DWORD dwFlags);
+  WINIMPM PCCERT_CONTEXT WINAPI CertGetSubjectCertificateFromStore (HCERTSTORE hCertStore, DWORD dwCertEncodingType, PCERT_INFO pCertId);
+  WINIMPM PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore (HCERTSTORE hCertStore, PCCERT_CONTEXT pPrevCertContext);
+  WINIMPM PCCERT_CONTEXT WINAPI CertFindCertificateInStore (HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCERT_CONTEXT pPrevCertContext);
 
-#define CERT_COMPARE_MASK 0xFFFF
+#define CERT_COMPARE_MASK 0xffff
 #define CERT_COMPARE_SHIFT 16
 #define CERT_COMPARE_ANY 0
 #define CERT_COMPARE_SHA1_HASH 1
@@ -3060,6 +3783,9 @@
 #define CERT_COMPARE_CERT_ID 16
 #define CERT_COMPARE_CROSS_CERT_DIST_POINTS 17
 #define CERT_COMPARE_PUBKEY_MD5_HASH 18
+#define CERT_COMPARE_SUBJECT_INFO_ACCESS 19
+#define CERT_COMPARE_HASH_STR 20
+#define CERT_COMPARE_HAS_PRIVATE_KEY 21
 
 #define CERT_FIND_ANY (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT)
 #define CERT_FIND_SHA1_HASH (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT)
@@ -3088,12 +3814,17 @@
 #define CERT_FIND_CERT_ID (CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT)
 #define CERT_FIND_CROSS_CERT_DIST_POINTS (CERT_COMPARE_CROSS_CERT_DIST_POINTS << CERT_COMPARE_SHIFT)
 #define CERT_FIND_PUBKEY_MD5_HASH (CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT)
+#define CERT_FIND_SUBJECT_INFO_ACCESS (CERT_COMPARE_SUBJECT_INFO_ACCESS << CERT_COMPARE_SHIFT)
+#define CERT_FIND_HASH_STR (CERT_COMPARE_HASH_STR << CERT_COMPARE_SHIFT)
+#define CERT_FIND_HAS_PRIVATE_KEY (CERT_COMPARE_HAS_PRIVATE_KEY << CERT_COMPARE_SHIFT)
+
 #define CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG 0x1
 #define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG 0x2
 #define CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG 0x4
 #define CERT_FIND_NO_ENHKEY_USAGE_FLAG 0x8
 #define CERT_FIND_OR_ENHKEY_USAGE_FLAG 0x10
 #define CERT_FIND_VALID_ENHKEY_USAGE_FLAG 0x20
+
 #define CERT_FIND_OPTIONAL_CTL_USAGE_FLAG CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG
 #define CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG
 #define CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG
@@ -3101,49 +3832,38 @@
 #define CERT_FIND_OR_CTL_USAGE_FLAG CERT_FIND_OR_ENHKEY_USAGE_FLAG
 #define CERT_FIND_VALID_CTL_USAGE_FLAG CERT_FIND_VALID_ENHKEY_USAGE_FLAG
 
-  WINIMPM PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore(HCERTSTORE hCertStore,PCCERT_CONTEXT pSubjectContext,PCCERT_CONTEXT pPrevIssuerContext,DWORD *pdwFlags);
-  WINIMPM WINBOOL WINAPI CertVerifySubjectCertificateContext(PCCERT_CONTEXT pSubject,PCCERT_CONTEXT pIssuer,DWORD *pdwFlags);
-  WINIMPM PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext(PCCERT_CONTEXT pCertContext);
-  WINIMPM PCCERT_CONTEXT WINAPI CertCreateCertificateContext(DWORD dwCertEncodingType,const BYTE *pbCertEncoded,DWORD cbCertEncoded);
-  WINIMPM WINBOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT pCertContext);
-  WINIMPM WINBOOL WINAPI CertSetCertificateContextProperty(PCCERT_CONTEXT pCertContext,DWORD dwPropId,DWORD dwFlags,const void *pvData);
-
-#define CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG 0x80000000
-#define CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG 0x40000000
-
-  WINIMPM WINBOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext,DWORD dwPropId,void *pvData,DWORD *pcbData);
-  WINIMPM DWORD WINAPI CertEnumCertificateContextProperties(PCCERT_CONTEXT pCertContext,DWORD dwPropId);
-  WINIMPM WINBOOL WINAPI CertCreateCTLEntryFromCertificateContextProperties(PCCERT_CONTEXT pCertContext,DWORD cOptAttr,PCRYPT_ATTRIBUTE rgOptAttr,DWORD dwFlags,void *pvReserved,PCTL_ENTRY pCtlEntry,DWORD *pcbCtlEntry);
-
-#define CTL_ENTRY_FROM_PROP_CHAIN_FLAG 0x1
-
-  WINIMPM WINBOOL WINAPI CertSetCertificateContextPropertiesFromCTLEntry(PCCERT_CONTEXT pCertContext,PCTL_ENTRY pCtlEntry,DWORD dwFlags);
-  WINIMPM PCCRL_CONTEXT WINAPI CertGetCRLFromStore(HCERTSTORE hCertStore,PCCERT_CONTEXT pIssuerContext,PCCRL_CONTEXT pPrevCrlContext,DWORD *pdwFlags);
-  WINIMPM PCCRL_CONTEXT WINAPI CertEnumCRLsInStore(HCERTSTORE hCertStore,PCCRL_CONTEXT pPrevCrlContext);
-  WINIMPM PCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore,DWORD dwCertEncodingType,DWORD dwFindFlags,DWORD dwFindType,const void *pvFindPara,PCCRL_CONTEXT pPrevCrlContext);
-
-#define CRL_FIND_ANY 0
-#define CRL_FIND_ISSUED_BY 1
-#define CRL_FIND_EXISTING 2
-#define CRL_FIND_ISSUED_FOR 3
-#define CRL_FIND_ISSUED_BY_AKI_FLAG 0x1
-#define CRL_FIND_ISSUED_BY_SIGNATURE_FLAG 0x2
-#define CRL_FIND_ISSUED_BY_DELTA_FLAG 0x4
-#define CRL_FIND_ISSUED_BY_BASE_FLAG 0x8
+  WINIMPM PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore (HCERTSTORE hCertStore, PCCERT_CONTEXT pSubjectContext, PCCERT_CONTEXT pPrevIssuerContext, DWORD *pdwFlags);
+  WINIMPM WINBOOL WINAPI CertVerifySubjectCertificateContext (PCCERT_CONTEXT pSubject, PCCERT_CONTEXT pIssuer, DWORD *pdwFlags);
+  WINIMPM PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext (PCCERT_CONTEXT pCertContext);
+  WINIMPM PCCERT_CONTEXT WINAPI CertCreateCertificateContext (DWORD dwCertEncodingType, const BYTE *pbCertEncoded, DWORD cbCertEncoded);
+  WINIMPM WINBOOL WINAPI CertFreeCertificateContext (PCCERT_CONTEXT pCertContext);
+  WINIMPM WINBOOL WINAPI CertSetCertificateContextProperty (PCCERT_CONTEXT pCertContext, DWORD dwPropId, DWORD dwFlags, const void *pvData);
 
   typedef struct _CRL_FIND_ISSUED_FOR_PARA {
     PCCERT_CONTEXT pSubjectCert;
     PCCERT_CONTEXT pIssuerCert;
   } CRL_FIND_ISSUED_FOR_PARA,*PCRL_FIND_ISSUED_FOR_PARA;
 
-  WINIMPM PCCRL_CONTEXT WINAPI CertDuplicateCRLContext(PCCRL_CONTEXT pCrlContext);
-  WINIMPM PCCRL_CONTEXT WINAPI CertCreateCRLContext(DWORD dwCertEncodingType,const BYTE *pbCrlEncoded,DWORD cbCrlEncoded);
-  WINIMPM WINBOOL WINAPI CertFreeCRLContext(PCCRL_CONTEXT pCrlContext);
-  WINIMPM WINBOOL WINAPI CertSetCRLContextProperty(PCCRL_CONTEXT pCrlContext,DWORD dwPropId,DWORD dwFlags,const void *pvData);
-  WINIMPM WINBOOL WINAPI CertGetCRLContextProperty(PCCRL_CONTEXT pCrlContext,DWORD dwPropId,void *pvData,DWORD *pcbData);
-  WINIMPM DWORD WINAPI CertEnumCRLContextProperties(PCCRL_CONTEXT pCrlContext,DWORD dwPropId);
-  WINIMPM WINBOOL WINAPI CertFindCertificateInCRL(PCCERT_CONTEXT pCert,PCCRL_CONTEXT pCrlContext,DWORD dwFlags,void *pvReserved,PCRL_ENTRY *ppCrlEntry);
-  WINIMPM WINBOOL WINAPI CertIsValidCRLForCertificate(PCCERT_CONTEXT pCert,PCCRL_CONTEXT pCrl,DWORD dwFlags,void *pvReserved);
+  typedef struct _CTL_ANY_SUBJECT_INFO {
+    CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;
+    CRYPT_DATA_BLOB SubjectIdentifier;
+  } CTL_ANY_SUBJECT_INFO,*PCTL_ANY_SUBJECT_INFO;
+
+#define CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG 0x40000000
+#define CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG 0x80000000
+
+#define CTL_ENTRY_FROM_PROP_CHAIN_FLAG 0x1
+
+#define CRL_FIND_ANY 0
+#define CRL_FIND_ISSUED_BY 1
+#define CRL_FIND_EXISTING 2
+#define CRL_FIND_ISSUED_FOR 3
+
+#define CRL_FIND_ISSUED_BY_AKI_FLAG 0x1
+#define CRL_FIND_ISSUED_BY_SIGNATURE_FLAG 0x2
+#define CRL_FIND_ISSUED_BY_DELTA_FLAG 0x4
+#define CRL_FIND_ISSUED_BY_BASE_FLAG 0x8
+#define CRL_FIND_ISSUED_FOR_SET_STRONG_PROPERTIES_FLAG 0x10
 
 #define CERT_STORE_ADD_NEW 1
 #define CERT_STORE_ADD_USE_EXISTING 2
@@ -3153,42 +3873,51 @@
 #define CERT_STORE_ADD_NEWER 6
 #define CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES 7
 
-  WINIMPM WINBOOL WINAPI CertAddEncodedCertificateToStore(HCERTSTORE hCertStore,DWORD dwCertEncodingType,const BYTE *pbCertEncoded,DWORD cbCertEncoded,DWORD dwAddDisposition,PCCERT_CONTEXT *ppCertContext);
-  WINIMPM WINBOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore,PCCERT_CONTEXT pCertContext,DWORD dwAddDisposition,PCCERT_CONTEXT *ppStoreContext);
-
 #define CERT_STORE_CERTIFICATE_CONTEXT 1
 #define CERT_STORE_CRL_CONTEXT 2
 #define CERT_STORE_CTL_CONTEXT 3
+
 #define CERT_STORE_ALL_CONTEXT_FLAG (~__MSABI_LONG(0U))
 #define CERT_STORE_CERTIFICATE_CONTEXT_FLAG (1 << CERT_STORE_CERTIFICATE_CONTEXT)
 #define CERT_STORE_CRL_CONTEXT_FLAG (1 << CERT_STORE_CRL_CONTEXT)
 #define CERT_STORE_CTL_CONTEXT_FLAG (1 << CERT_STORE_CTL_CONTEXT)
 
-  WINIMPM WINBOOL WINAPI CertAddSerializedElementToStore(HCERTSTORE hCertStore,const BYTE *pbElement,DWORD cbElement,DWORD dwAddDisposition,DWORD dwFlags,DWORD dwContextTypeFlags,DWORD *pdwContextType,const void **ppvContext);
-  WINIMPM WINBOOL WINAPI CertDeleteCertificateFromStore(PCCERT_CONTEXT pCertContext);
-  WINIMPM WINBOOL WINAPI CertAddEncodedCRLToStore(HCERTSTORE hCertStore,DWORD dwCertEncodingType,const BYTE *pbCrlEncoded,DWORD cbCrlEncoded,DWORD dwAddDisposition,PCCRL_CONTEXT *ppCrlContext);
-  WINIMPM WINBOOL WINAPI CertAddCRLContextToStore(HCERTSTORE hCertStore,PCCRL_CONTEXT pCrlContext,DWORD dwAddDisposition,PCCRL_CONTEXT *ppStoreContext);
-  WINIMPM WINBOOL WINAPI CertDeleteCRLFromStore(PCCRL_CONTEXT pCrlContext);
-  WINIMPM WINBOOL WINAPI CertSerializeCertificateStoreElement(PCCERT_CONTEXT pCertContext,DWORD dwFlags,BYTE *pbElement,DWORD *pcbElement);
-  WINIMPM WINBOOL WINAPI CertSerializeCRLStoreElement(PCCRL_CONTEXT pCrlContext,DWORD dwFlags,BYTE *pbElement,DWORD *pcbElement);
-  WINIMPM PCCTL_CONTEXT WINAPI CertDuplicateCTLContext(PCCTL_CONTEXT pCtlContext);
-  WINIMPM PCCTL_CONTEXT WINAPI CertCreateCTLContext(DWORD dwMsgAndCertEncodingType,const BYTE *pbCtlEncoded,DWORD cbCtlEncoded);
-  WINIMPM WINBOOL WINAPI CertFreeCTLContext(PCCTL_CONTEXT pCtlContext);
-  WINIMPM WINBOOL WINAPI CertSetCTLContextProperty(PCCTL_CONTEXT pCtlContext,DWORD dwPropId,DWORD dwFlags,const void *pvData);
-  WINIMPM WINBOOL WINAPI CertGetCTLContextProperty(PCCTL_CONTEXT pCtlContext,DWORD dwPropId,void *pvData,DWORD *pcbData);
-  WINIMPM DWORD WINAPI CertEnumCTLContextProperties(PCCTL_CONTEXT pCtlContext,DWORD dwPropId);
-  WINIMPM PCCTL_CONTEXT WINAPI CertEnumCTLsInStore(HCERTSTORE hCertStore,PCCTL_CONTEXT pPrevCtlContext);
-  WINIMPM PCTL_ENTRY WINAPI CertFindSubjectInCTL(DWORD dwEncodingType,DWORD dwSubjectType,void *pvSubject,PCCTL_CONTEXT pCtlContext,DWORD dwFlags);
-
 #define CTL_ANY_SUBJECT_TYPE 1
 #define CTL_CERT_SUBJECT_TYPE 2
 
-  typedef struct _CTL_ANY_SUBJECT_INFO {
-    CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;
-    CRYPT_DATA_BLOB SubjectIdentifier;
-  } CTL_ANY_SUBJECT_INFO,*PCTL_ANY_SUBJECT_INFO;
-
-  WINIMPM PCCTL_CONTEXT WINAPI CertFindCTLInStore(HCERTSTORE hCertStore,DWORD dwMsgAndCertEncodingType,DWORD dwFindFlags,DWORD dwFindType,const void *pvFindPara,PCCTL_CONTEXT pPrevCtlContext);
+  WINIMPM WINBOOL WINAPI CertGetCertificateContextProperty (PCCERT_CONTEXT pCertContext, DWORD dwPropId, void *pvData, DWORD *pcbData);
+  WINIMPM DWORD WINAPI CertEnumCertificateContextProperties (PCCERT_CONTEXT pCertContext, DWORD dwPropId);
+  WINIMPM WINBOOL WINAPI CertCreateCTLEntryFromCertificateContextProperties (PCCERT_CONTEXT pCertContext, DWORD cOptAttr, PCRYPT_ATTRIBUTE rgOptAttr, DWORD dwFlags, void *pvReserved, PCTL_ENTRY pCtlEntry, DWORD *pcbCtlEntry);
+  WINIMPM WINBOOL WINAPI CertSetCertificateContextPropertiesFromCTLEntry (PCCERT_CONTEXT pCertContext, PCTL_ENTRY pCtlEntry, DWORD dwFlags);
+  WINIMPM PCCRL_CONTEXT WINAPI CertGetCRLFromStore (HCERTSTORE hCertStore, PCCERT_CONTEXT pIssuerContext, PCCRL_CONTEXT pPrevCrlContext, DWORD *pdwFlags);
+  WINIMPM PCCRL_CONTEXT WINAPI CertEnumCRLsInStore (HCERTSTORE hCertStore, PCCRL_CONTEXT pPrevCrlContext);
+  WINIMPM PCCRL_CONTEXT WINAPI CertFindCRLInStore (HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext);
+  WINIMPM PCCRL_CONTEXT WINAPI CertDuplicateCRLContext (PCCRL_CONTEXT pCrlContext);
+  WINIMPM PCCRL_CONTEXT WINAPI CertCreateCRLContext (DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded);
+  WINIMPM WINBOOL WINAPI CertFreeCRLContext (PCCRL_CONTEXT pCrlContext);
+  WINIMPM WINBOOL WINAPI CertSetCRLContextProperty (PCCRL_CONTEXT pCrlContext, DWORD dwPropId, DWORD dwFlags, const void *pvData);
+  WINIMPM WINBOOL WINAPI CertGetCRLContextProperty (PCCRL_CONTEXT pCrlContext, DWORD dwPropId, void *pvData, DWORD *pcbData);
+  WINIMPM DWORD WINAPI CertEnumCRLContextProperties (PCCRL_CONTEXT pCrlContext, DWORD dwPropId);
+  WINIMPM WINBOOL WINAPI CertFindCertificateInCRL (PCCERT_CONTEXT pCert, PCCRL_CONTEXT pCrlContext, DWORD dwFlags, void *pvReserved, PCRL_ENTRY *ppCrlEntry);
+  WINIMPM WINBOOL WINAPI CertIsValidCRLForCertificate (PCCERT_CONTEXT pCert, PCCRL_CONTEXT pCrl, DWORD dwFlags, void *pvReserved);
+  WINIMPM WINBOOL WINAPI CertAddEncodedCertificateToStore (HCERTSTORE hCertStore, DWORD dwCertEncodingType, const BYTE *pbCertEncoded, DWORD cbCertEncoded, DWORD dwAddDisposition, PCCERT_CONTEXT *ppCertContext);
+  WINIMPM WINBOOL WINAPI CertAddCertificateContextToStore (HCERTSTORE hCertStore, PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, PCCERT_CONTEXT *ppStoreContext);
+  WINIMPM WINBOOL WINAPI CertAddSerializedElementToStore (HCERTSTORE hCertStore, const BYTE *pbElement, DWORD cbElement, DWORD dwAddDisposition, DWORD dwFlags, DWORD dwContextTypeFlags, DWORD *pdwContextType, const void **ppvContext);
+  WINIMPM WINBOOL WINAPI CertDeleteCertificateFromStore (PCCERT_CONTEXT pCertContext);
+  WINIMPM WINBOOL WINAPI CertAddEncodedCRLToStore (HCERTSTORE hCertStore, DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded, DWORD dwAddDisposition, PCCRL_CONTEXT *ppCrlContext);
+  WINIMPM WINBOOL WINAPI CertAddCRLContextToStore (HCERTSTORE hCertStore, PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition, PCCRL_CONTEXT *ppStoreContext);
+  WINIMPM WINBOOL WINAPI CertDeleteCRLFromStore (PCCRL_CONTEXT pCrlContext);
+  WINIMPM WINBOOL WINAPI CertSerializeCertificateStoreElement (PCCERT_CONTEXT pCertContext, DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
+  WINIMPM WINBOOL WINAPI CertSerializeCRLStoreElement (PCCRL_CONTEXT pCrlContext, DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
+  WINIMPM PCCTL_CONTEXT WINAPI CertDuplicateCTLContext (PCCTL_CONTEXT pCtlContext);
+  WINIMPM PCCTL_CONTEXT WINAPI CertCreateCTLContext (DWORD dwMsgAndCertEncodingType, const BYTE *pbCtlEncoded, DWORD cbCtlEncoded);
+  WINIMPM WINBOOL WINAPI CertFreeCTLContext (PCCTL_CONTEXT pCtlContext);
+  WINIMPM WINBOOL WINAPI CertSetCTLContextProperty (PCCTL_CONTEXT pCtlContext, DWORD dwPropId, DWORD dwFlags, const void *pvData);
+  WINIMPM WINBOOL WINAPI CertGetCTLContextProperty (PCCTL_CONTEXT pCtlContext, DWORD dwPropId, void *pvData, DWORD *pcbData);
+  WINIMPM DWORD WINAPI CertEnumCTLContextProperties (PCCTL_CONTEXT pCtlContext, DWORD dwPropId);
+  WINIMPM PCCTL_CONTEXT WINAPI CertEnumCTLsInStore (HCERTSTORE hCertStore, PCCTL_CONTEXT pPrevCtlContext);
+  WINIMPM PCTL_ENTRY WINAPI CertFindSubjectInCTL (DWORD dwEncodingType, DWORD dwSubjectType, void *pvSubject, PCCTL_CONTEXT pCtlContext, DWORD dwFlags);
+  WINIMPM PCCTL_CONTEXT WINAPI CertFindCTLInStore (HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCTL_CONTEXT pPrevCtlContext);
 
 #define CTL_FIND_ANY 0
 #define CTL_FIND_SHA1_HASH 1
@@ -3197,6 +3926,34 @@
 #define CTL_FIND_SUBJECT 4
 #define CTL_FIND_EXISTING 5
 
+#define CTL_FIND_SAME_USAGE_FLAG 0x1
+
+#define CTL_FIND_NO_LIST_ID_CBDATA 0xffffffff
+#define CTL_FIND_NO_SIGNER_PTR ((PCERT_INFO) -1)
+
+#define CERT_STORE_CTRL_RESYNC 1
+#define CERT_STORE_CTRL_NOTIFY_CHANGE 2
+#define CERT_STORE_CTRL_COMMIT 3
+#define CERT_STORE_CTRL_AUTO_RESYNC 4
+#define CERT_STORE_CTRL_CANCEL_NOTIFY 5
+
+#define CERT_STORE_CTRL_INHIBIT_DUPLICATE_HANDLE_FLAG 0x1
+
+#define CERT_STORE_CTRL_COMMIT_FORCE_FLAG 0x1
+#define CERT_STORE_CTRL_COMMIT_CLEAR_FLAG 0x2
+
+#define CERT_STORE_LOCALIZED_NAME_PROP_ID 0x1000
+
+#define CERT_CREATE_CONTEXT_NOCOPY_FLAG 0x1
+#define CERT_CREATE_CONTEXT_SORTED_FLAG 0x2
+#define CERT_CREATE_CONTEXT_NO_HCRYPTMSG_FLAG 0x4
+#define CERT_CREATE_CONTEXT_NO_ENTRY_FLAG 0x8
+
+#define CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG 0x1
+#define CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG 0x2
+#define CERT_PHYSICAL_STORE_REMOTE_OPEN_DISABLE_FLAG 0x4
+#define CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG 0x8
+
   typedef struct _CTL_FIND_USAGE_PARA {
     DWORD cbSize;
     CTL_USAGE SubjectUsage;
@@ -3204,11 +3961,6 @@
     PCERT_INFO pSigner;
   } CTL_FIND_USAGE_PARA,*PCTL_FIND_USAGE_PARA;
 
-#define CTL_FIND_NO_LIST_ID_CBDATA 0xFFFFFFFF
-#define CTL_FIND_NO_SIGNER_PTR ((PCERT_INFO) -1)
-
-#define CTL_FIND_SAME_USAGE_FLAG 0x1
-
   typedef struct _CTL_FIND_SUBJECT_PARA {
     DWORD cbSize;
     PCTL_FIND_USAGE_PARA pUsagePara;
@@ -3216,43 +3968,16 @@
     void *pvSubject;
   } CTL_FIND_SUBJECT_PARA,*PCTL_FIND_SUBJECT_PARA;
 
-  WINIMPM WINBOOL WINAPI CertAddEncodedCTLToStore(HCERTSTORE hCertStore,DWORD dwMsgAndCertEncodingType,const BYTE *pbCtlEncoded,DWORD cbCtlEncoded,DWORD dwAddDisposition,PCCTL_CONTEXT *ppCtlContext);
-  WINIMPM WINBOOL WINAPI CertAddCTLContextToStore(HCERTSTORE hCertStore,PCCTL_CONTEXT pCtlContext,DWORD dwAddDisposition,PCCTL_CONTEXT *ppStoreContext);
-  WINIMPM WINBOOL WINAPI CertSerializeCTLStoreElement(PCCTL_CONTEXT pCtlContext,DWORD dwFlags,BYTE *pbElement,DWORD *pcbElement);
-  WINIMPM WINBOOL WINAPI CertDeleteCTLFromStore(PCCTL_CONTEXT pCtlContext);
-  WINIMPM WINBOOL WINAPI CertAddCertificateLinkToStore(HCERTSTORE hCertStore,PCCERT_CONTEXT pCertContext,DWORD dwAddDisposition,PCCERT_CONTEXT *ppStoreContext);
-  WINIMPM WINBOOL WINAPI CertAddCRLLinkToStore(HCERTSTORE hCertStore,PCCRL_CONTEXT pCrlContext,DWORD dwAddDisposition,PCCRL_CONTEXT *ppStoreContext);
-  WINIMPM WINBOOL WINAPI CertAddCTLLinkToStore(HCERTSTORE hCertStore,PCCTL_CONTEXT pCtlContext,DWORD dwAddDisposition,PCCTL_CONTEXT *ppStoreContext);
-  WINIMPM WINBOOL WINAPI CertAddStoreToCollection(HCERTSTORE hCollectionStore,HCERTSTORE hSiblingStore,DWORD dwUpdateFlags,DWORD dwPriority);
-  WINIMPM void WINAPI CertRemoveStoreFromCollection(HCERTSTORE hCollectionStore,HCERTSTORE hSiblingStore);
-  WINIMPM WINBOOL WINAPI CertControlStore(HCERTSTORE hCertStore,DWORD dwFlags,DWORD dwCtrlType,void const *pvCtrlPara);
-
-#define CERT_STORE_CTRL_RESYNC 1
-#define CERT_STORE_CTRL_NOTIFY_CHANGE 2
-#define CERT_STORE_CTRL_COMMIT 3
-#define CERT_STORE_CTRL_AUTO_RESYNC 4
-#define CERT_STORE_CTRL_CANCEL_NOTIFY 5
-#define CERT_STORE_CTRL_INHIBIT_DUPLICATE_HANDLE_FLAG 0x1
-#define CERT_STORE_CTRL_COMMIT_FORCE_FLAG 0x1
-#define CERT_STORE_CTRL_COMMIT_CLEAR_FLAG 0x2
-#define CERT_STORE_LOCALIZED_NAME_PROP_ID 0x1000
-
-  WINIMPM WINBOOL WINAPI CertSetStoreProperty(HCERTSTORE hCertStore,DWORD dwPropId,DWORD dwFlags,const void *pvData);
-  WINIMPM WINBOOL WINAPI CertGetStoreProperty(HCERTSTORE hCertStore,DWORD dwPropId,void *pvData,DWORD *pcbData);
+  typedef WINBOOL (WINAPI *PFN_CERT_CREATE_CONTEXT_SORT_FUNC) (DWORD cbTotalEncoded, DWORD cbRemainEncoded, DWORD cEntry, void *pvSort);
 
   typedef struct _CERT_CREATE_CONTEXT_PARA {
     DWORD cbSize;
     PFN_CRYPT_FREE pfnFree;
     void *pvFree;
+    PFN_CERT_CREATE_CONTEXT_SORT_FUNC pfnSort;
+    void *pvSort;
   } CERT_CREATE_CONTEXT_PARA,*PCERT_CREATE_CONTEXT_PARA;
 
-  WINIMPM const void *WINAPI CertCreateContext(DWORD dwContextType,DWORD dwEncodingType,const BYTE *pbEncoded,DWORD cbEncoded,DWORD dwFlags,PCERT_CREATE_CONTEXT_PARA pCreatePara);
-
-#define CERT_CREATE_CONTEXT_NOCOPY_FLAG 0x1
-#define CERT_CREATE_CONTEXT_SORTED_FLAG 0x2
-#define CERT_CREATE_CONTEXT_NO_HCRYPTMSG_FLAG 0x4
-#define CERT_CREATE_CONTEXT_NO_ENTRY_FLAG 0x8
-
   typedef struct _CERT_SYSTEM_STORE_INFO {
     DWORD cbSize;
   } CERT_SYSTEM_STORE_INFO,*PCERT_SYSTEM_STORE_INFO;
@@ -3267,21 +3992,30 @@
     DWORD dwPriority;
   } CERT_PHYSICAL_STORE_INFO,*PCERT_PHYSICAL_STORE_INFO;
 
-#define CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG 0x1
-#define CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG 0x2
-#define CERT_PHYSICAL_STORE_REMOTE_OPEN_DISABLE_FLAG 0x4
-#define CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG 0x8
+  WINIMPM WINBOOL WINAPI CertAddEncodedCTLToStore (HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType, const BYTE *pbCtlEncoded, DWORD cbCtlEncoded, DWORD dwAddDisposition, PCCTL_CONTEXT *ppCtlContext);
+  WINIMPM WINBOOL WINAPI CertAddCTLContextToStore (HCERTSTORE hCertStore, PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition, PCCTL_CONTEXT *ppStoreContext);
+  WINIMPM WINBOOL WINAPI CertSerializeCTLStoreElement (PCCTL_CONTEXT pCtlContext, DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
+  WINIMPM WINBOOL WINAPI CertDeleteCTLFromStore (PCCTL_CONTEXT pCtlContext);
+  WINIMPM WINBOOL WINAPI CertAddCertificateLinkToStore (HCERTSTORE hCertStore, PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, PCCERT_CONTEXT *ppStoreContext);
+  WINIMPM WINBOOL WINAPI CertAddCRLLinkToStore (HCERTSTORE hCertStore, PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition, PCCRL_CONTEXT *ppStoreContext);
+  WINIMPM WINBOOL WINAPI CertAddCTLLinkToStore (HCERTSTORE hCertStore, PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition, PCCTL_CONTEXT *ppStoreContext);
+  WINIMPM WINBOOL WINAPI CertAddStoreToCollection (HCERTSTORE hCollectionStore, HCERTSTORE hSiblingStore, DWORD dwUpdateFlags, DWORD dwPriority);
+  WINIMPM void WINAPI CertRemoveStoreFromCollection (HCERTSTORE hCollectionStore, HCERTSTORE hSiblingStore);
+  WINIMPM WINBOOL WINAPI CertControlStore (HCERTSTORE hCertStore, DWORD dwFlags, DWORD dwCtrlType, void const *pvCtrlPara);
+  WINIMPM WINBOOL WINAPI CertSetStoreProperty (HCERTSTORE hCertStore, DWORD dwPropId, DWORD dwFlags, const void *pvData);
+  WINIMPM WINBOOL WINAPI CertGetStoreProperty (HCERTSTORE hCertStore, DWORD dwPropId, void *pvData, DWORD *pcbData);
+  WINIMPM const void *WINAPI CertCreateContext (DWORD dwContextType, DWORD dwEncodingType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCERT_CREATE_CONTEXT_PARA pCreatePara);
+  WINIMPM WINBOOL WINAPI CertRegisterSystemStore (const void *pvSystemStore, DWORD dwFlags, PCERT_SYSTEM_STORE_INFO pStoreInfo, void *pvReserved);
+  WINIMPM WINBOOL WINAPI CertRegisterPhysicalStore (const void *pvSystemStore, DWORD dwFlags, LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo, void *pvReserved);
+  WINIMPM WINBOOL WINAPI CertUnregisterSystemStore (const void *pvSystemStore, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI CertUnregisterPhysicalStore (const void *pvSystemStore, DWORD dwFlags, LPCWSTR pwszStoreName);
 
-  WINIMPM WINBOOL WINAPI CertRegisterSystemStore(const void *pvSystemStore,DWORD dwFlags,PCERT_SYSTEM_STORE_INFO pStoreInfo,void *pvReserved);
-  WINIMPM WINBOOL WINAPI CertRegisterPhysicalStore(const void *pvSystemStore,DWORD dwFlags,LPCWSTR pwszStoreName,PCERT_PHYSICAL_STORE_INFO pStoreInfo,void *pvReserved);
-  WINIMPM WINBOOL WINAPI CertUnregisterSystemStore(const void *pvSystemStore,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CertUnregisterPhysicalStore(const void *pvSystemStore,DWORD dwFlags,LPCWSTR pwszStoreName);
-
-  typedef WINBOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE_LOCATION)(LPCWSTR pwszStoreLocation,DWORD dwFlags,void *pvReserved,void *pvArg);
-  typedef WINBOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE)(const void *pvSystemStore,DWORD dwFlags,PCERT_SYSTEM_STORE_INFO pStoreInfo,void *pvReserved,void *pvArg);
-  typedef WINBOOL (WINAPI *PFN_CERT_ENUM_PHYSICAL_STORE)(const void *pvSystemStore,DWORD dwFlags,LPCWSTR pwszStoreName,PCERT_PHYSICAL_STORE_INFO pStoreInfo,void *pvReserved,void *pvArg);
+  typedef WINBOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE_LOCATION) (LPCWSTR pwszStoreLocation, DWORD dwFlags, void *pvReserved, void *pvArg);
+  typedef WINBOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE) (const void *pvSystemStore, DWORD dwFlags, PCERT_SYSTEM_STORE_INFO pStoreInfo, void *pvReserved, void *pvArg);
+  typedef WINBOOL (WINAPI *PFN_CERT_ENUM_PHYSICAL_STORE) (const void *pvSystemStore, DWORD dwFlags, LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo, void *pvReserved, void *pvArg);
 
 #define CERT_PHYSICAL_STORE_PREDEFINED_ENUM_FLAG 0x1
+
 #define CERT_PHYSICAL_STORE_DEFAULT_NAME L".Default"
 #define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME L".GroupPolicy"
 #define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME L".LocalMachine"
@@ -3289,10 +4023,11 @@
 #define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME L".LocalMachineGroupPolicy"
 #define CERT_PHYSICAL_STORE_ENTERPRISE_NAME L".Enterprise"
 #define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME L".AuthRoot"
+#define CERT_PHYSICAL_STORE_SMART_CARD_NAME L".SmartCard"
 
-  WINIMPM WINBOOL WINAPI CertEnumSystemStoreLocation(DWORD dwFlags,void *pvArg,PFN_CERT_ENUM_SYSTEM_STORE_LOCATION pfnEnum);
-  WINIMPM WINBOOL WINAPI CertEnumSystemStore(DWORD dwFlags,void *pvSystemStoreLocationPara,void *pvArg,PFN_CERT_ENUM_SYSTEM_STORE pfnEnum);
-  WINIMPM WINBOOL WINAPI CertEnumPhysicalStore(const void *pvSystemStore,DWORD dwFlags,void *pvArg,PFN_CERT_ENUM_PHYSICAL_STORE pfnEnum);
+  WINIMPM WINBOOL WINAPI CertEnumSystemStoreLocation (DWORD dwFlags, void *pvArg, PFN_CERT_ENUM_SYSTEM_STORE_LOCATION pfnEnum);
+  WINIMPM WINBOOL WINAPI CertEnumSystemStore (DWORD dwFlags, void *pvSystemStoreLocationPara, void *pvArg, PFN_CERT_ENUM_SYSTEM_STORE pfnEnum);
+  WINIMPM WINBOOL WINAPI CertEnumPhysicalStore (const void *pvSystemStore, DWORD dwFlags, void *pvArg, PFN_CERT_ENUM_PHYSICAL_STORE pfnEnum);
 
 #define CRYPT_OID_OPEN_SYSTEM_STORE_PROV_FUNC "CertDllOpenSystemStoreProv"
 #define CRYPT_OID_REGISTER_SYSTEM_STORE_FUNC "CertDllRegisterSystemStore"
@@ -3303,29 +4038,24 @@
 #define CRYPT_OID_ENUM_PHYSICAL_STORE_FUNC "CertDllEnumPhysicalStore"
 #define CRYPT_OID_SYSTEM_STORE_LOCATION_VALUE_NAME L"SystemStoreLocation"
 
-  WINIMPM WINBOOL WINAPI CertGetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext,DWORD dwFlags,PCERT_ENHKEY_USAGE pUsage,DWORD *pcbUsage);
-  WINIMPM WINBOOL WINAPI CertSetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext,PCERT_ENHKEY_USAGE pUsage);
-  WINIMPM WINBOOL WINAPI CertAddEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext,LPCSTR pszUsageIdentifier);
-  WINIMPM WINBOOL WINAPI CertRemoveEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext,LPCSTR pszUsageIdentifier);
-  WINIMPM WINBOOL WINAPI CertGetValidUsages(DWORD cCerts,PCCERT_CONTEXT *rghCerts,int *cNumOIDs,LPSTR *rghOIDs,DWORD *pcbOIDs);
-  WINIMPM WINBOOL WINAPI CryptMsgGetAndVerifySigner(HCRYPTMSG hCryptMsg,DWORD cSignerStore,HCERTSTORE *rghSignerStore,DWORD dwFlags,PCCERT_CONTEXT *ppSigner,DWORD *pdwSignerIndex);
-
 #define CMSG_TRUSTED_SIGNER_FLAG 0x1
 #define CMSG_SIGNER_ONLY_FLAG 0x2
 #define CMSG_USE_SIGNER_INDEX_FLAG 0x4
-
-  WINIMPM WINBOOL WINAPI CryptMsgSignCTL(DWORD dwMsgEncodingType,BYTE *pbCtlContent,DWORD cbCtlContent,PCMSG_SIGNED_ENCODE_INFO pSignInfo,DWORD dwFlags,BYTE *pbEncoded,DWORD *pcbEncoded);
-
 #define CMSG_CMS_ENCAPSULATED_CTL_FLAG 0x8000
 
-  WINIMPM WINBOOL WINAPI CryptMsgEncodeAndSignCTL(DWORD dwMsgEncodingType,PCTL_INFO pCtlInfo,PCMSG_SIGNED_ENCODE_INFO pSignInfo,DWORD dwFlags,BYTE *pbEncoded,DWORD *pcbEncoded);
-
 #define CMSG_ENCODE_SORTED_CTL_FLAG 0x1
-
 #define CMSG_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x2
 
-  WINIMPM WINBOOL WINAPI CertFindSubjectInSortedCTL(PCRYPT_DATA_BLOB pSubjectIdentifier,PCCTL_CONTEXT pCtlContext,DWORD dwFlags,void *pvReserved,PCRYPT_DER_BLOB pEncodedAttributes);
-  WINIMPM WINBOOL WINAPI CertEnumSubjectInSortedCTL(PCCTL_CONTEXT pCtlContext,void **ppvNextSubject,PCRYPT_DER_BLOB pSubjectIdentifier,PCRYPT_DER_BLOB pEncodedAttributes);
+  WINIMPM WINBOOL WINAPI CertGetEnhancedKeyUsage (PCCERT_CONTEXT pCertContext, DWORD dwFlags, PCERT_ENHKEY_USAGE pUsage, DWORD *pcbUsage);
+  WINIMPM WINBOOL WINAPI CertSetEnhancedKeyUsage (PCCERT_CONTEXT pCertContext, PCERT_ENHKEY_USAGE pUsage);
+  WINIMPM WINBOOL WINAPI CertAddEnhancedKeyUsageIdentifier (PCCERT_CONTEXT pCertContext, LPCSTR pszUsageIdentifier);
+  WINIMPM WINBOOL WINAPI CertRemoveEnhancedKeyUsageIdentifier (PCCERT_CONTEXT pCertContext, LPCSTR pszUsageIdentifier);
+  WINIMPM WINBOOL WINAPI CertGetValidUsages (DWORD cCerts, PCCERT_CONTEXT *rghCerts, int *cNumOIDs, LPSTR *rghOIDs, DWORD *pcbOIDs);
+  WINIMPM WINBOOL WINAPI CryptMsgGetAndVerifySigner (HCRYPTMSG hCryptMsg, DWORD cSignerStore, HCERTSTORE *rghSignerStore, DWORD dwFlags, PCCERT_CONTEXT *ppSigner, DWORD *pdwSignerIndex);
+  WINIMPM WINBOOL WINAPI CryptMsgSignCTL (DWORD dwMsgEncodingType, BYTE *pbCtlContent, DWORD cbCtlContent, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags, BYTE *pbEncoded, DWORD *pcbEncoded);
+  WINIMPM WINBOOL WINAPI CryptMsgEncodeAndSignCTL (DWORD dwMsgEncodingType, PCTL_INFO pCtlInfo, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags, BYTE *pbEncoded, DWORD *pcbEncoded);
+  WINIMPM WINBOOL WINAPI CertFindSubjectInSortedCTL (PCRYPT_DATA_BLOB pSubjectIdentifier, PCCTL_CONTEXT pCtlContext, DWORD dwFlags, void *pvReserved, PCRYPT_DER_BLOB pEncodedAttributes);
+  WINIMPM WINBOOL WINAPI CertEnumSubjectInSortedCTL (PCCTL_CONTEXT pCtlContext, void **ppvNextSubject, PCRYPT_DER_BLOB pSubjectIdentifier, PCRYPT_DER_BLOB pEncodedAttributes);
 
   typedef struct _CTL_VERIFY_USAGE_PARA {
     DWORD cbSize;
@@ -3353,7 +4083,7 @@
 
 #define CERT_VERIFY_UPDATED_CTL_FLAG 0x1
 
-  WINIMPM WINBOOL WINAPI CertVerifyCTLUsage(DWORD dwEncodingType,DWORD dwSubjectType,void *pvSubject,PCTL_USAGE pSubjectUsage,DWORD dwFlags,PCTL_VERIFY_USAGE_PARA pVerifyUsagePara,PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus);
+  WINIMPM WINBOOL WINAPI CertVerifyCTLUsage (DWORD dwEncodingType, DWORD dwSubjectType, void *pvSubject, PCTL_USAGE pSubjectUsage, DWORD dwFlags, PCTL_VERIFY_USAGE_PARA pVerifyUsagePara, PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus);
 
   typedef struct _CERT_REVOCATION_CRL_INFO {
     DWORD cbSize;
@@ -3363,6 +4093,8 @@
     WINBOOL fDeltaCrlEntry;
   } CERT_REVOCATION_CRL_INFO,*PCERT_REVOCATION_CRL_INFO;
 
+  typedef struct _CERT_REVOCATION_CHAIN_PARA CERT_REVOCATION_CHAIN_PARA,*PCERT_REVOCATION_CHAIN_PARA;
+
   typedef struct _CERT_REVOCATION_PARA {
     DWORD cbSize;
     PCCERT_CONTEXT pIssuerCert;
@@ -3376,6 +4108,8 @@
     DWORD dwFreshnessTime;
     LPFILETIME pftCurrentTime;
     PCERT_REVOCATION_CRL_INFO pCrlInfo;
+    LPFILETIME pftCacheResync;
+    PCERT_REVOCATION_CHAIN_PARA pChainPara;
 #endif
   } CERT_REVOCATION_PARA,*PCERT_REVOCATION_PARA;
 
@@ -3388,52 +4122,34 @@
     DWORD dwFreshnessTime;
   } CERT_REVOCATION_STATUS,*PCERT_REVOCATION_STATUS;
 
-  WINIMPM WINBOOL WINAPI CertVerifyRevocation(DWORD dwEncodingType,DWORD dwRevType,DWORD cContext,PVOID rgpvContext[],DWORD dwFlags,PCERT_REVOCATION_PARA pRevPara,PCERT_REVOCATION_STATUS pRevStatus);
-
 #define CERT_CONTEXT_REVOCATION_TYPE 1
+
 #define CERT_VERIFY_REV_CHAIN_FLAG 0x1
 #define CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION 0x2
 #define CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG 0x4
-
-  WINBOOL WINAPI CertCompareIntegerBlob(PCRYPT_INTEGER_BLOB pInt1,PCRYPT_INTEGER_BLOB pInt2);
-  WINIMPM WINBOOL WINAPI CertCompareCertificate(DWORD dwCertEncodingType,PCERT_INFO pCertId1,PCERT_INFO pCertId2);
-  WINIMPM WINBOOL WINAPI CertCompareCertificateName(DWORD dwCertEncodingType,PCERT_NAME_BLOB pCertName1,PCERT_NAME_BLOB pCertName2);
-  WINIMPM WINBOOL WINAPI CertIsRDNAttrsInCertificateName(DWORD dwCertEncodingType,DWORD dwFlags,PCERT_NAME_BLOB pCertName,PCERT_RDN pRDN);
+#define CERT_VERIFY_REV_SERVER_OCSP_FLAG 0x8
+#define CERT_VERIFY_REV_NO_OCSP_FAILOVER_TO_CRL_FLAG 0x10
 
 #define CERT_UNICODE_IS_RDN_ATTRS_FLAG 0x1
 #define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG 0x2
 
-  WINIMPM WINBOOL WINAPI CertComparePublicKeyInfo(DWORD dwCertEncodingType,PCERT_PUBLIC_KEY_INFO pPublicKey1,PCERT_PUBLIC_KEY_INFO pPublicKey2);
-  WINIMPM DWORD WINAPI CertGetPublicKeyLength(DWORD dwCertEncodingType,PCERT_PUBLIC_KEY_INFO pPublicKey);
-  WINIMPM WINBOOL WINAPI CryptVerifyCertificateSignature(HCRYPTPROV hCryptProv,DWORD dwCertEncodingType,const BYTE *pbEncoded,DWORD cbEncoded,PCERT_PUBLIC_KEY_INFO pPublicKey);
-  WINIMPM WINBOOL WINAPI CryptVerifyCertificateSignatureEx(HCRYPTPROV hCryptProv,DWORD dwCertEncodingType,DWORD dwSubjectType,void *pvSubject,DWORD dwIssuerType,void *pvIssuer,DWORD dwFlags,void *pvReserved);
-
 #define CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB 1
 #define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT 2
 #define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL 3
+#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE 4
+
 #define CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY 1
 #define CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT 2
 #define CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN 3
 #define CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL 4
 
-  WINIMPM WINBOOL WINAPI CryptHashToBeSigned(HCRYPTPROV hCryptProv,DWORD dwCertEncodingType,const BYTE *pbEncoded,DWORD cbEncoded,BYTE *pbComputedHash,DWORD *pcbComputedHash);
-  WINIMPM WINBOOL WINAPI CryptHashCertificate(HCRYPTPROV hCryptProv,ALG_ID Algid,DWORD dwFlags,const BYTE *pbEncoded,DWORD cbEncoded,BYTE *pbComputedHash,DWORD *pcbComputedHash);
-  WINIMPM WINBOOL WINAPI CryptSignCertificate(HCRYPTPROV hCryptProv,DWORD dwKeySpec,DWORD dwCertEncodingType,const BYTE *pbEncodedToBeSigned,DWORD cbEncodedToBeSigned,PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,const void *pvHashAuxInfo,BYTE *pbSignature,DWORD *pcbSignature);
-  WINIMPM WINBOOL WINAPI CryptSignAndEncodeCertificate(HCRYPTPROV hCryptProv,DWORD dwKeySpec,DWORD dwCertEncodingType,LPCSTR lpszStructType,const void *pvStructInfo,PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,const void *pvHashAuxInfo,PBYTE pbEncoded,DWORD *pcbEncoded);
-  WINIMPM LONG WINAPI CertVerifyTimeValidity(LPFILETIME pTimeToVerify,PCERT_INFO pCertInfo);
-  WINIMPM LONG WINAPI CertVerifyCRLTimeValidity(LPFILETIME pTimeToVerify,PCRL_INFO pCrlInfo);
-  WINIMPM WINBOOL WINAPI CertVerifyValidityNesting(PCERT_INFO pSubjectInfo,PCERT_INFO pIssuerInfo);
-  WINIMPM WINBOOL WINAPI CertVerifyCRLRevocation(DWORD dwCertEncodingType,PCERT_INFO pCertId,DWORD cCrlInfo,PCRL_INFO rgpCrlInfo[]);
-  WINIMPM LPCSTR WINAPI CertAlgIdToOID(DWORD dwAlgId);
-  WINIMPM DWORD WINAPI CertOIDToAlgId(LPCSTR pszObjId);
-  WINIMPM PCERT_EXTENSION WINAPI CertFindExtension(LPCSTR pszObjId,DWORD cExtensions,CERT_EXTENSION rgExtensions[]);
-  WINIMPM PCRYPT_ATTRIBUTE WINAPI CertFindAttribute(LPCSTR pszObjId,DWORD cAttr,CRYPT_ATTRIBUTE rgAttr[]);
-  WINIMPM PCERT_RDN_ATTR WINAPI CertFindRDNAttr(LPCSTR pszObjId,PCERT_NAME_INFO pName);
-  WINIMPM WINBOOL WINAPI CertGetIntendedKeyUsage(DWORD dwCertEncodingType,PCERT_INFO pCertInfo,BYTE *pbKeyUsage,DWORD cbKeyUsage);
+#define CRYPT_VERIFY_CERT_SIGN_DISABLE_MD2_MD4_FLAG 0x1
+#define CRYPT_VERIFY_CERT_SIGN_SET_STRONG_PROPERTIES_FLAG 0x2
+#define CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG 0x4
 
-  typedef void *HCRYPTDEFAULTCONTEXT;
-
-  WINIMPM WINBOOL WINAPI CryptInstallDefaultContext(HCRYPTPROV hCryptProv,DWORD dwDefaultType,const void *pvDefaultPara,DWORD dwFlags,void *pvReserved,HCRYPTDEFAULTCONTEXT *phDefaultContext);
+#define CRYPT_OID_EXTRACT_ENCODED_SIGNATURE_PARAMETERS_FUNC "CryptDllExtractEncodedSignatureParameters"
+#define CRYPT_OID_SIGN_AND_ENCODE_HASH_FUNC "CryptDllSignAndEncodeHash"
+#define CRYPT_OID_VERIFY_ENCODED_SIGNATURE_FUNC "CryptDllVerifyEncodedSignature"
 
 #define CRYPT_DEFAULT_CONTEXT_AUTO_RELEASE_FLAG 0x1
 #define CRYPT_DEFAULT_CONTEXT_PROCESS_FLAG 0x2
@@ -3441,80 +4157,143 @@
 #define CRYPT_DEFAULT_CONTEXT_CERT_SIGN_OID 1
 #define CRYPT_DEFAULT_CONTEXT_MULTI_CERT_SIGN_OID 2
 
+  typedef struct _CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO {
+    CRYPT_DATA_BLOB CertSignHashCNGAlgPropData;
+    CRYPT_DATA_BLOB CertIssuerPubKeyBitLengthPropData;
+  } CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO, *PCRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO;
+
+  typedef WINBOOL (WINAPI *PFN_CRYPT_EXTRACT_ENCODED_SIGNATURE_PARAMETERS_FUNC) (DWORD dwCertEncodingType, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, void **ppvDecodedSignPara, LPWSTR *ppwszCNGHashAlgid);
+  typedef WINBOOL (WINAPI *PFN_CRYPT_SIGN_AND_ENCODE_HASH_FUNC) (NCRYPT_KEY_HANDLE hKey, DWORD dwCertEncodingType, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, void *pvDecodedSignPara, LPCWSTR pwszCNGPubKeyAlgid, LPCWSTR pwszCNGHashAlgid, BYTE *pbComputedHash, DWORD cbComputedHash, BYTE *pbSignature, DWORD *pcbSignature);
+  typedef WINBOOL (WINAPI *PFN_CRYPT_VERIFY_ENCODED_SIGNATURE_FUNC) (DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pPubKeyInfo, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, void *pvDecodedSignPara, LPCWSTR pwszCNGPubKeyAlgid, LPCWSTR pwszCNGHashAlgid, BYTE *pbComputedHash, DWORD cbComputedHash, BYTE *pbSignature, DWORD cbSignature);
+
+  typedef void *HCRYPTDEFAULTCONTEXT;
+
   typedef struct _CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA {
     DWORD cOID;
     LPSTR *rgpszOID;
   } CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA,*PCRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA;
 
-  WINIMPM WINBOOL WINAPI CryptUninstallDefaultContext(HCRYPTDEFAULTCONTEXT hDefaultContext,DWORD dwFlags,void *pvReserved);
-  WINIMPM WINBOOL WINAPI CryptExportPublicKeyInfo(HCRYPTPROV hCryptProv,DWORD dwKeySpec,DWORD dwCertEncodingType,PCERT_PUBLIC_KEY_INFO pInfo,DWORD *pcbInfo);
+  WINIMPM WINBOOL WINAPI CertVerifyRevocation (DWORD dwEncodingType, DWORD dwRevType, DWORD cContext, PVOID rgpvContext[], DWORD dwFlags, PCERT_REVOCATION_PARA pRevPara, PCERT_REVOCATION_STATUS pRevStatus);
+  WINBOOL WINAPI CertCompareIntegerBlob (PCRYPT_INTEGER_BLOB pInt1, PCRYPT_INTEGER_BLOB pInt2);
+  WINIMPM WINBOOL WINAPI CertCompareCertificate (DWORD dwCertEncodingType, PCERT_INFO pCertId1, PCERT_INFO pCertId2);
+  WINIMPM WINBOOL WINAPI CertCompareCertificateName (DWORD dwCertEncodingType, PCERT_NAME_BLOB pCertName1, PCERT_NAME_BLOB pCertName2);
+  WINIMPM WINBOOL WINAPI CertIsRDNAttrsInCertificateName (DWORD dwCertEncodingType, DWORD dwFlags, PCERT_NAME_BLOB pCertName, PCERT_RDN pRDN);
+  WINIMPM WINBOOL WINAPI CertComparePublicKeyInfo (DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pPublicKey1, PCERT_PUBLIC_KEY_INFO pPublicKey2);
+  WINIMPM DWORD WINAPI CertGetPublicKeyLength (DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pPublicKey);
+  WINIMPM WINBOOL WINAPI CryptVerifyCertificateSignature (HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, const BYTE *pbEncoded, DWORD cbEncoded, PCERT_PUBLIC_KEY_INFO pPublicKey);
+  WINIMPM WINBOOL WINAPI CryptVerifyCertificateSignatureEx (HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, DWORD dwSubjectType, void *pvSubject, DWORD dwIssuerType, void *pvIssuer, DWORD dwFlags, void *pvExtra);
+  WINIMPM WINBOOL WINAPI CertIsStrongHashToSign (PCCERT_STRONG_SIGN_PARA pStrongSignPara, LPCWSTR pwszCNGHashAlgid, PCCERT_CONTEXT pSigningCert);
+  WINIMPM WINBOOL WINAPI CryptHashToBeSigned (HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, DWORD *pcbComputedHash);
+  WINIMPM WINBOOL WINAPI CryptHashCertificate (HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid, DWORD dwFlags, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, DWORD *pcbComputedHash);
+#if NTDDI_VERSION >= 0x06000000
+  WINIMPM WINBOOL WINAPI CryptHashCertificate2 (LPCWSTR pwszCNGHashAlgid, DWORD dwFlags, void *pvReserved, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, DWORD *pcbComputedHash);
+#endif
+  WINIMPM WINBOOL WINAPI CryptSignCertificate (HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey, DWORD dwKeySpec, DWORD dwCertEncodingType, const BYTE *pbEncodedToBeSigned, DWORD cbEncodedToBeSigned, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, const void *pvHashAuxInfo, BYTE *pbSignature, DWORD *pcbSignature);
+  WINIMPM WINBOOL WINAPI CryptSignAndEncodeCertificate (HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey, DWORD dwKeySpec, DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, const void *pvHashAuxInfo, BYTE *pbEncoded, DWORD *pcbEncoded);
+  WINIMPM LONG WINAPI CertVerifyTimeValidity (LPFILETIME pTimeToVerify, PCERT_INFO pCertInfo);
+  WINIMPM LONG WINAPI CertVerifyCRLTimeValidity (LPFILETIME pTimeToVerify, PCRL_INFO pCrlInfo);
+  WINIMPM WINBOOL WINAPI CertVerifyValidityNesting (PCERT_INFO pSubjectInfo, PCERT_INFO pIssuerInfo);
+  WINIMPM WINBOOL WINAPI CertVerifyCRLRevocation (DWORD dwCertEncodingType, PCERT_INFO pCertId, DWORD cCrlInfo, PCRL_INFO rgpCrlInfo[]);
+  WINIMPM LPCSTR WINAPI CertAlgIdToOID (DWORD dwAlgId);
+  WINIMPM DWORD WINAPI CertOIDToAlgId (LPCSTR pszObjId);
+  WINIMPM PCERT_EXTENSION WINAPI CertFindExtension (LPCSTR pszObjId, DWORD cExtensions, CERT_EXTENSION rgExtensions[]);
+  WINIMPM PCRYPT_ATTRIBUTE WINAPI CertFindAttribute (LPCSTR pszObjId, DWORD cAttr, CRYPT_ATTRIBUTE rgAttr[]);
+  WINIMPM PCERT_RDN_ATTR WINAPI CertFindRDNAttr (LPCSTR pszObjId, PCERT_NAME_INFO pName);
+  WINIMPM WINBOOL WINAPI CertGetIntendedKeyUsage (DWORD dwCertEncodingType, PCERT_INFO pCertInfo, BYTE *pbKeyUsage, DWORD cbKeyUsage);
+  WINIMPM WINBOOL WINAPI CryptInstallDefaultContext (HCRYPTPROV hCryptProv, DWORD dwDefaultType, const void *pvDefaultPara, DWORD dwFlags, void *pvReserved, HCRYPTDEFAULTCONTEXT *phDefaultContext);
+  WINIMPM WINBOOL WINAPI CryptUninstallDefaultContext (HCRYPTDEFAULTCONTEXT hDefaultContext, DWORD dwFlags, void *pvReserved);
+  WINIMPM WINBOOL WINAPI CryptExportPublicKeyInfo (HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey, DWORD dwKeySpec, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
+  WINIMPM WINBOOL WINAPI CryptExportPublicKeyInfoEx (HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey, DWORD dwKeySpec, DWORD dwCertEncodingType, LPSTR pszPublicKeyObjId, DWORD dwFlags, void *pvAuxInfo, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
 
 #define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC "CryptDllExportPublicKeyInfoEx"
+#define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_EX2_FUNC "CryptDllExportPublicKeyInfoEx2"
 
-  WINIMPM WINBOOL WINAPI CryptExportPublicKeyInfoEx(HCRYPTPROV hCryptProv,DWORD dwKeySpec,DWORD dwCertEncodingType,LPSTR pszPublicKeyObjId,DWORD dwFlags,void *pvAuxInfo,PCERT_PUBLIC_KEY_INFO pInfo,DWORD *pcbInfo);
-  WINIMPM WINBOOL WINAPI CryptImportPublicKeyInfo(HCRYPTPROV hCryptProv,DWORD dwCertEncodingType,PCERT_PUBLIC_KEY_INFO pInfo,HCRYPTKEY *phKey);
+  typedef WINBOOL (WINAPI *PFN_CRYPT_EXPORT_PUBLIC_KEY_INFO_EX2_FUNC) (NCRYPT_KEY_HANDLE hNCryptKey, DWORD dwCertEncodingType, LPSTR pszPublicKeyObjId, DWORD dwFlags, void *pvAuxInfo, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
+
+#if NTDDI_VERSION >= 0x06010000
+#define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FROM_BCRYPT_HANDLE_FUNC "CryptDllExportPublicKeyInfoFromBCryptKeyHandle"
+
+  typedef WINBOOL (WINAPI *PFN_CRYPT_EXPORT_PUBLIC_KEY_INFO_FROM_BCRYPT_HANDLE_FUNC) (BCRYPT_KEY_HANDLE hBCryptKey, DWORD dwCertEncodingType, LPSTR pszPublicKeyObjId, DWORD dwFlags, void *pvAuxInfo, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
+
+  WINIMPM WINBOOL WINAPI CryptExportPublicKeyInfoFromBCryptKeyHandle (BCRYPT_KEY_HANDLE hBCryptKey, DWORD dwCertEncodingType, LPSTR pszPublicKeyObjId, DWORD dwFlags, void *pvAuxInfo, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
+#endif
 
 #define CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_FUNC "CryptDllImportPublicKeyInfoEx"
-
-  WINIMPM WINBOOL WINAPI CryptImportPublicKeyInfoEx(HCRYPTPROV hCryptProv,DWORD dwCertEncodingType,PCERT_PUBLIC_KEY_INFO pInfo,ALG_ID aiKeyAlg,DWORD dwFlags,void *pvAuxInfo,HCRYPTKEY *phKey);
-  WINIMPM WINBOOL WINAPI CryptAcquireCertificatePrivateKey(PCCERT_CONTEXT pCert,DWORD dwFlags,void *pvReserved,HCRYPTPROV *phCryptProv,DWORD *pdwKeySpec,WINBOOL *pfCallerFreeProv);
+#define CRYPT_OID_IMPORT_PRIVATE_KEY_INFO_FUNC "CryptDllImportPrivateKeyInfoEx"
+#define CRYPT_OID_EXPORT_PRIVATE_KEY_INFO_FUNC "CryptDllExportPrivateKeyInfoEx"
 
 #define CRYPT_ACQUIRE_CACHE_FLAG 0x1
 #define CRYPT_ACQUIRE_USE_PROV_INFO_FLAG 0x2
 #define CRYPT_ACQUIRE_COMPARE_KEY_FLAG 0x4
+#define CRYPT_ACQUIRE_NO_HEALING 0x8
 #define CRYPT_ACQUIRE_SILENT_FLAG 0x40
+#define CRYPT_ACQUIRE_WINDOW_HANDLE_FLAG 0x80
 
-  WINIMPM WINBOOL WINAPI CryptFindCertificateKeyProvInfo(PCCERT_CONTEXT pCert,DWORD dwFlags,void *pvReserved);
+#define CRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_MASK 0x70000
+#define CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG 0x10000
+#define CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG 0x20000
+#define CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG 0x40000
 
 #define CRYPT_FIND_USER_KEYSET_FLAG 0x1
 #define CRYPT_FIND_MACHINE_KEYSET_FLAG 0x2
 #define CRYPT_FIND_SILENT_KEYSET_FLAG 0x40
 
-  typedef WINBOOL (WINAPI *PFN_IMPORT_PRIV_KEY_FUNC)(HCRYPTPROV hCryptProv,CRYPT_PRIVATE_KEY_INFO *pPrivateKeyInfo,DWORD dwFlags,void *pvAuxInfo);
+#define CRYPT_DELETE_KEYSET CRYPT_DELETEKEYSET
 
-#define CRYPT_OID_IMPORT_PRIVATE_KEY_INFO_FUNC "CryptDllImportPrivateKeyInfoEx"
-
-  WINIMPM WINBOOL WINAPI CryptImportPKCS8(CRYPT_PKCS8_IMPORT_PARAMS sImportParams,DWORD dwFlags,HCRYPTPROV *phCryptProv,void *pvAuxInfo);
-
-  typedef WINBOOL (WINAPI *PFN_EXPORT_PRIV_KEY_FUNC)(HCRYPTPROV hCryptProv,DWORD dwKeySpec,LPSTR pszPrivateKeyObjId,DWORD dwFlags,void *pvAuxInfo,CRYPT_PRIVATE_KEY_INFO *pPrivateKeyInfo,DWORD *pcbPrivateKeyBlob);
-
-#define CRYPT_OID_EXPORT_PRIVATE_KEY_INFO_FUNC "CryptDllExportPrivateKeyInfoEx"
-#define CRYPT_DELETE_KEYSET 0x1
+  typedef WINBOOL (WINAPI *PFN_IMPORT_PRIV_KEY_FUNC) (HCRYPTPROV hCryptProv, CRYPT_PRIVATE_KEY_INFO *pPrivateKeyInfo, DWORD dwFlags, void *pvAuxInfo);
+  typedef WINBOOL (WINAPI *PFN_EXPORT_PRIV_KEY_FUNC) (HCRYPTPROV hCryptProv, DWORD dwKeySpec, LPSTR pszPrivateKeyObjId, DWORD dwFlags, void *pvAuxInfo, CRYPT_PRIVATE_KEY_INFO *pPrivateKeyInfo, DWORD *pcbPrivateKeyInfo);
 
 #define CertRDNValueToStr __MINGW_NAME_AW(CertRDNValueToStr)
 #define CertNameToStr __MINGW_NAME_AW(CertNameToStr)
 
-  WINIMPM WINBOOL WINAPI CryptExportPKCS8(HCRYPTPROV hCryptProv,DWORD dwKeySpec,LPSTR pszPrivateKeyObjId,DWORD dwFlags,void *pvAuxInfo,BYTE *pbPrivateKeyBlob,DWORD *pcbPrivateKeyBlob);
-  WINIMPM WINBOOL WINAPI CryptExportPKCS8Ex(CRYPT_PKCS8_EXPORT_PARAMS *psExportParams,DWORD dwFlags,void *pvAuxInfo,BYTE *pbPrivateKeyBlob,DWORD *pcbPrivateKeyBlob);
-  WINIMPM WINBOOL WINAPI CryptHashPublicKeyInfo(HCRYPTPROV hCryptProv,ALG_ID Algid,DWORD dwFlags,DWORD dwCertEncodingType,PCERT_PUBLIC_KEY_INFO pInfo,BYTE *pbComputedHash,DWORD *pcbComputedHash);
-  WINIMPM DWORD WINAPI CertRDNValueToStrA(DWORD dwValueType,PCERT_RDN_VALUE_BLOB pValue,LPSTR psz,DWORD csz);
-  WINIMPM DWORD WINAPI CertRDNValueToStrW(DWORD dwValueType,PCERT_RDN_VALUE_BLOB pValue,LPWSTR psz,DWORD csz);
-  WINIMPM DWORD WINAPI CertNameToStrA(DWORD dwCertEncodingType,PCERT_NAME_BLOB pName,DWORD dwStrType,LPSTR psz,DWORD csz);
-  WINIMPM DWORD WINAPI CertNameToStrW(DWORD dwCertEncodingType,PCERT_NAME_BLOB pName,DWORD dwStrType,LPWSTR psz,DWORD csz);
+  WINIMPM WINBOOL WINAPI CryptImportPublicKeyInfo (HCRYPTPROV hCryptProv, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, HCRYPTKEY *phKey);
+  WINIMPM WINBOOL WINAPI CryptImportPublicKeyInfoEx (HCRYPTPROV hCryptProv, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, ALG_ID aiKeyAlg, DWORD dwFlags, void *pvAuxInfo, HCRYPTKEY *phKey);
+
+#if NTDDI_VERSION >= 0x06000000
+#define CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_EX2_FUNC "CryptDllImportPublicKeyInfoEx2"
+
+  typedef WINBOOL (WINAPI *PFN_IMPORT_PUBLIC_KEY_INFO_EX2_FUNC) (DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, DWORD dwFlags, void *pvAuxInfo, BCRYPT_KEY_HANDLE *phKey);
+
+  WINIMPM WINBOOL WINAPI CryptImportPublicKeyInfoEx2 (DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, DWORD dwFlags, void *pvAuxInfo, BCRYPT_KEY_HANDLE *phKey);
+#endif
+  WINIMPM WINBOOL WINAPI CryptAcquireCertificatePrivateKey (PCCERT_CONTEXT pCert, DWORD dwFlags, void *pvParameters, HCRYPTPROV_OR_NCRYPT_KEY_HANDLE *phCryptProvOrNCryptKey, DWORD *pdwKeySpec, WINBOOL *pfCallerFreeProvOrNCryptKey);
+  WINIMPM WINBOOL WINAPI CryptFindCertificateKeyProvInfo (PCCERT_CONTEXT pCert, DWORD dwFlags, void *pvReserved);
+  WINIMPM WINBOOL WINAPI CryptImportPKCS8 (CRYPT_PKCS8_IMPORT_PARAMS sPrivateKeyAndParams, DWORD dwFlags, HCRYPTPROV *phCryptProv, void *pvAuxInfo);
+  WINIMPM WINBOOL WINAPI CryptExportPKCS8 (HCRYPTPROV hCryptProv, DWORD dwKeySpec, LPSTR pszPrivateKeyObjId, DWORD dwFlags, void *pvAuxInfo, BYTE *pbPrivateKeyBlob, DWORD *pcbPrivateKeyBlob);
+  WINIMPM WINBOOL WINAPI CryptExportPKCS8Ex (CRYPT_PKCS8_EXPORT_PARAMS *psExportParams, DWORD dwFlags, void *pvAuxInfo, BYTE *pbPrivateKeyBlob, DWORD *pcbPrivateKeyBlob);
+  WINIMPM WINBOOL WINAPI CryptHashPublicKeyInfo (HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid, DWORD dwFlags, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, BYTE *pbComputedHash, DWORD *pcbComputedHash);
+  WINIMPM DWORD WINAPI CertRDNValueToStrA (DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue, LPSTR psz, DWORD csz);
+  WINIMPM DWORD WINAPI CertRDNValueToStrW (DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue, LPWSTR psz, DWORD csz);
+  WINIMPM DWORD WINAPI CertNameToStrA (DWORD dwCertEncodingType, PCERT_NAME_BLOB pName, DWORD dwStrType, LPSTR psz, DWORD csz);
+  WINIMPM DWORD WINAPI CertNameToStrW (DWORD dwCertEncodingType, PCERT_NAME_BLOB pName, DWORD dwStrType, LPWSTR psz, DWORD csz);
+
 
 #define CERT_SIMPLE_NAME_STR 1
 #define CERT_OID_NAME_STR 2
 #define CERT_X500_NAME_STR 3
-
-#define CERT_NAME_STR_SEMICOLON_FLAG 0x40000000
-#define CERT_NAME_STR_NO_PLUS_FLAG 0x20000000
-#define CERT_NAME_STR_NO_QUOTING_FLAG 0x10000000
-#define CERT_NAME_STR_CRLF_FLAG 0x8000000
-#define CERT_NAME_STR_COMMA_FLAG 0x4000000
-#define CERT_NAME_STR_REVERSE_FLAG 0x2000000
+#define CERT_XML_NAME_STR 4
 
 #define CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG 0x10000
 #define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG 0x20000
 #define CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG 0x40000
 #define CERT_NAME_STR_FORCE_UTF8_DIR_STR_FLAG 0x80000
+#define CERT_NAME_STR_FORWARD_FLAG 0x1000000
+#define CERT_NAME_STR_REVERSE_FLAG 0x2000000
+#define CERT_NAME_STR_COMMA_FLAG 0x4000000
+#define CERT_NAME_STR_CRLF_FLAG 0x8000000
+#define CERT_NAME_STR_NO_QUOTING_FLAG 0x10000000
+#define CERT_NAME_STR_NO_PLUS_FLAG 0x20000000
+#define CERT_NAME_STR_SEMICOLON_FLAG 0x40000000
+#define CERT_NAME_STR_DISABLE_UTF8_DIR_STR_FLAG 0x100000
+#define CERT_NAME_STR_ENABLE_PUNYCODE_FLAG 0x200000
 
 #define CertStrToName __MINGW_NAME_AW(CertStrToName)
 #define CertGetNameString __MINGW_NAME_AW(CertGetNameString)
 
-  WINIMPM WINBOOL WINAPI CertStrToNameA(DWORD dwCertEncodingType,LPCSTR pszX500,DWORD dwStrType,void *pvReserved,BYTE *pbEncoded,DWORD *pcbEncoded,LPCSTR *ppszError);
-  WINIMPM WINBOOL WINAPI CertStrToNameW(DWORD dwCertEncodingType,LPCWSTR pszX500,DWORD dwStrType,void *pvReserved,BYTE *pbEncoded,DWORD *pcbEncoded,LPCWSTR *ppszError);
-  WINIMPM DWORD WINAPI CertGetNameStringA(PCCERT_CONTEXT pCertContext,DWORD dwType,DWORD dwFlags,void *pvTypePara,LPSTR pszNameString,DWORD cchNameString);
-  WINIMPM DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT pCertContext,DWORD dwType,DWORD dwFlags,void *pvTypePara,LPWSTR pszNameString,DWORD cchNameString);
+  WINIMPM WINBOOL WINAPI CertStrToNameA (DWORD dwCertEncodingType, LPCSTR pszX500, DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded, LPCSTR *ppszError);
+  WINIMPM WINBOOL WINAPI CertStrToNameW (DWORD dwCertEncodingType, LPCWSTR pszX500, DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded, LPCWSTR *ppszError);
+  WINIMPM DWORD WINAPI CertGetNameStringA (PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, void *pvTypePara, LPSTR pszNameString, DWORD cchNameString);
+  WINIMPM DWORD WINAPI CertGetNameStringW (PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, void *pvTypePara, LPWSTR pszNameString, DWORD cchNameString);
 
 #define CERT_NAME_EMAIL_TYPE 1
 #define CERT_NAME_RDN_TYPE 2
@@ -3528,7 +4307,9 @@
 #define CERT_NAME_ISSUER_FLAG 0x1
 #define CERT_NAME_DISABLE_IE4_UTF8_FLAG 0x10000
 
-  typedef PCCERT_CONTEXT (WINAPI *PFN_CRYPT_GET_SIGNER_CERTIFICATE)(void *pvGetArg,DWORD dwCertEncodingType,PCERT_INFO pSignerId,HCERTSTORE hMsgCertStore);
+#define CERT_NAME_SEARCH_ALL_NAMES_FLAG 0x2
+
+  typedef PCCERT_CONTEXT (WINAPI *PFN_CRYPT_GET_SIGNER_CERTIFICATE) (void *pvGetArg, DWORD dwCertEncodingType, PCERT_INFO pSignerId, HCERTSTORE hMsgCertStore);
 
   typedef struct _CRYPT_SIGN_MESSAGE_PARA {
     DWORD cbSize;
@@ -3560,15 +4341,18 @@
   typedef struct _CRYPT_VERIFY_MESSAGE_PARA {
     DWORD cbSize;
     DWORD dwMsgAndCertEncodingType;
-    HCRYPTPROV hCryptProv;
+    HCRYPTPROV_LEGACY hCryptProv;
     PFN_CRYPT_GET_SIGNER_CERTIFICATE pfnGetSignerCertificate;
     void *pvGetArg;
+#ifdef CRYPT_VERIFY_MESSAGE_PARA_HAS_EXTRA_FIELDS
+    PCCERT_STRONG_SIGN_PARA pStrongSignPara;
+#endif
   } CRYPT_VERIFY_MESSAGE_PARA,*PCRYPT_VERIFY_MESSAGE_PARA;
 
   typedef struct _CRYPT_ENCRYPT_MESSAGE_PARA {
     DWORD cbSize;
     DWORD dwMsgEncodingType;
-    HCRYPTPROV hCryptProv;
+    HCRYPTPROV_LEGACY hCryptProv;
     CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
     void *pvEncryptionAuxInfo;
     DWORD dwFlags;
@@ -3582,18 +4366,15 @@
     DWORD dwMsgAndCertEncodingType;
     DWORD cCertStore;
     HCERTSTORE *rghCertStore;
-
 #ifdef CRYPT_DECRYPT_MESSAGE_PARA_HAS_EXTRA_FIELDS
-
     DWORD dwFlags;
 #endif
-
   } CRYPT_DECRYPT_MESSAGE_PARA,*PCRYPT_DECRYPT_MESSAGE_PARA;
 
   typedef struct _CRYPT_HASH_MESSAGE_PARA {
     DWORD cbSize;
     DWORD dwMsgEncodingType;
-    HCRYPTPROV hCryptProv;
+    HCRYPTPROV_LEGACY hCryptProv;
     CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
     void *pvHashAuxInfo;
   } CRYPT_HASH_MESSAGE_PARA,*PCRYPT_HASH_MESSAGE_PARA;
@@ -3601,7 +4382,10 @@
   typedef struct _CRYPT_KEY_SIGN_MESSAGE_PARA {
     DWORD cbSize;
     DWORD dwMsgAndCertEncodingType;
-    HCRYPTPROV hCryptProv;
+    __C89_NAMELESS union {
+      HCRYPTPROV hCryptProv;
+      NCRYPT_KEY_HANDLE hNCryptKey;
+    };
     DWORD dwKeySpec;
     CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
     void *pvHashAuxInfo;
@@ -3611,43 +4395,43 @@
   typedef struct _CRYPT_KEY_VERIFY_MESSAGE_PARA {
     DWORD cbSize;
     DWORD dwMsgEncodingType;
-    HCRYPTPROV hCryptProv;
+    HCRYPTPROV_LEGACY hCryptProv;
   } CRYPT_KEY_VERIFY_MESSAGE_PARA,*PCRYPT_KEY_VERIFY_MESSAGE_PARA;
 
-#define CertOpenSystemStore __MINGW_NAME_AW(CertOpenSystemStore)
-#define CertAddEncodedCertificateToSystemStore __MINGW_NAME_AW(CertAddEncodedCertificateToSystemStore)
-
-  WINIMPM WINBOOL WINAPI CryptSignMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara,WINBOOL fDetachedSignature,DWORD cToBeSigned,const BYTE *rgpbToBeSigned[],DWORD rgcbToBeSigned[],BYTE *pbSignedBlob,DWORD *pcbSignedBlob);
-  WINIMPM WINBOOL WINAPI CryptVerifyMessageSignature(PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,DWORD dwSignerIndex,const BYTE *pbSignedBlob,DWORD cbSignedBlob,BYTE *pbDecoded,DWORD *pcbDecoded,PCCERT_CONTEXT *ppSignerCert);
-  WINIMPM LONG WINAPI CryptGetMessageSignerCount(DWORD dwMsgEncodingType,const BYTE *pbSignedBlob,DWORD cbSignedBlob);
-  WINIMPM HCERTSTORE WINAPI CryptGetMessageCertificates(DWORD dwMsgAndCertEncodingType,HCRYPTPROV hCryptProv,DWORD dwFlags,const BYTE *pbSignedBlob,DWORD cbSignedBlob);
-  WINIMPM WINBOOL WINAPI CryptVerifyDetachedMessageSignature(PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,DWORD dwSignerIndex,const BYTE *pbDetachedSignBlob,DWORD cbDetachedSignBlob,DWORD cToBeSigned,const BYTE *rgpbToBeSigned[],DWORD rgcbToBeSigned[],PCCERT_CONTEXT *ppSignerCert);
-  WINIMPM WINBOOL WINAPI CryptEncryptMessage(PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara,DWORD cRecipientCert,PCCERT_CONTEXT rgpRecipientCert[],const BYTE *pbToBeEncrypted,DWORD cbToBeEncrypted,BYTE *pbEncryptedBlob,DWORD *pcbEncryptedBlob);
-  WINIMPM WINBOOL WINAPI CryptDecryptMessage(PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,const BYTE *pbEncryptedBlob,DWORD cbEncryptedBlob,BYTE *pbDecrypted,DWORD *pcbDecrypted,PCCERT_CONTEXT *ppXchgCert);
-  WINIMPM WINBOOL WINAPI CryptSignAndEncryptMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara,PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara,DWORD cRecipientCert,PCCERT_CONTEXT rgpRecipientCert[],const BYTE *pbToBeSignedAndEncrypted,DWORD cbToBeSignedAndEncrypted,BYTE *pbSignedAndEncryptedBlob,DWORD *pcbSignedAndEncryptedBlob);
-  WINIMPM WINBOOL WINAPI CryptDecryptAndVerifyMessageSignature(PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,DWORD dwSignerIndex,const BYTE *pbEncryptedBlob,DWORD cbEncryptedBlob,BYTE *pbDecrypted,DWORD *pcbDecrypted,PCCERT_CONTEXT *ppXchgCert,PCCERT_CONTEXT *ppSignerCert);
-  WINIMPM WINBOOL WINAPI CryptDecodeMessage(DWORD dwMsgTypeFlags,PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,DWORD dwSignerIndex,const BYTE *pbEncodedBlob,DWORD cbEncodedBlob,DWORD dwPrevInnerContentType,DWORD *pdwMsgType,DWORD *pdwInnerContentType,BYTE *pbDecoded,DWORD *pcbDecoded,PCCERT_CONTEXT *ppXchgCert,PCCERT_CONTEXT *ppSignerCert);
-  WINIMPM WINBOOL WINAPI CryptHashMessage(PCRYPT_HASH_MESSAGE_PARA pHashPara,WINBOOL fDetachedHash,DWORD cToBeHashed,const BYTE *rgpbToBeHashed[],DWORD rgcbToBeHashed[],BYTE *pbHashedBlob,DWORD *pcbHashedBlob,BYTE *pbComputedHash,DWORD *pcbComputedHash);
-  WINIMPM WINBOOL WINAPI CryptVerifyMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara,BYTE *pbHashedBlob,DWORD cbHashedBlob,BYTE *pbToBeHashed,DWORD *pcbToBeHashed,BYTE *pbComputedHash,DWORD *pcbComputedHash);
-  WINIMPM WINBOOL WINAPI CryptVerifyDetachedMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara,BYTE *pbDetachedHashBlob,DWORD cbDetachedHashBlob,DWORD cToBeHashed,const BYTE *rgpbToBeHashed[],DWORD rgcbToBeHashed[],BYTE *pbComputedHash,DWORD *pcbComputedHash);
-  WINIMPM WINBOOL WINAPI CryptSignMessageWithKey(PCRYPT_KEY_SIGN_MESSAGE_PARA pSignPara,const BYTE *pbToBeSigned,DWORD cbToBeSigned,BYTE *pbSignedBlob,DWORD *pcbSignedBlob);
-  WINIMPM WINBOOL WINAPI CryptVerifyMessageSignatureWithKey(PCRYPT_KEY_VERIFY_MESSAGE_PARA pVerifyPara,PCERT_PUBLIC_KEY_INFO pPublicKeyInfo,const BYTE *pbSignedBlob,DWORD cbSignedBlob,BYTE *pbDecoded,DWORD *pcbDecoded);
-  WINIMPM HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV hProv,LPCSTR szSubsystemProtocol);
-  WINIMPM HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV hProv,LPCWSTR szSubsystemProtocol);
-  WINIMPM WINBOOL WINAPI CertAddEncodedCertificateToSystemStoreA(LPCSTR szCertStoreName,const BYTE *pbCertEncoded,DWORD cbCertEncoded);
-  WINIMPM WINBOOL WINAPI CertAddEncodedCertificateToSystemStoreW(LPCWSTR szCertStoreName,const BYTE *pbCertEncoded,DWORD cbCertEncoded);
-
   typedef struct _CERT_CHAIN {
     DWORD cCerts;
     PCERT_BLOB certs;
     CRYPT_KEY_PROV_INFO keyLocatorInfo;
   } CERT_CHAIN,*PCERT_CHAIN;
 
-  HRESULT WINAPI FindCertsByIssuer(PCERT_CHAIN pCertChains,DWORD *pcbCertChains,DWORD *pcCertChains,BYTE *pbEncodedIssuerName,DWORD cbEncodedIssuerName,LPCWSTR pwszPurpose,DWORD dwKeySpec);
-  WINIMPM WINBOOL WINAPI CryptQueryObject(DWORD dwObjectType,const void *pvObject,DWORD dwExpectedContentTypeFlags,DWORD dwExpectedFormatTypeFlags,DWORD dwFlags,DWORD *pdwMsgAndCertEncodingType,DWORD *pdwContentType,DWORD *pdwFormatType,HCERTSTORE *phCertStore,HCRYPTMSG *phMsg,const void **ppvContext);
+#define CertOpenSystemStore __MINGW_NAME_AW(CertOpenSystemStore)
+#define CertAddEncodedCertificateToSystemStore __MINGW_NAME_AW(CertAddEncodedCertificateToSystemStore)
+
+  WINIMPM WINBOOL WINAPI CryptSignMessage (PCRYPT_SIGN_MESSAGE_PARA pSignPara, WINBOOL fDetachedSignature, DWORD cToBeSigned, const BYTE *rgpbToBeSigned[], DWORD rgcbToBeSigned[], BYTE *pbSignedBlob, DWORD *pcbSignedBlob);
+  WINIMPM WINBOOL WINAPI CryptVerifyMessageSignature (PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex, const BYTE *pbSignedBlob, DWORD cbSignedBlob, BYTE *pbDecoded, DWORD *pcbDecoded, PCCERT_CONTEXT *ppSignerCert);
+  WINIMPM LONG WINAPI CryptGetMessageSignerCount (DWORD dwMsgEncodingType, const BYTE *pbSignedBlob, DWORD cbSignedBlob);
+  WINIMPM HCERTSTORE WINAPI CryptGetMessageCertificates (DWORD dwMsgAndCertEncodingType, HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const BYTE *pbSignedBlob, DWORD cbSignedBlob);
+  WINIMPM WINBOOL WINAPI CryptVerifyDetachedMessageSignature (PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex, const BYTE *pbDetachedSignBlob, DWORD cbDetachedSignBlob, DWORD cToBeSigned, const BYTE *rgpbToBeSigned[], DWORD rgcbToBeSigned[], PCCERT_CONTEXT *ppSignerCert);
+  WINIMPM WINBOOL WINAPI CryptEncryptMessage (PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara, DWORD cRecipientCert, PCCERT_CONTEXT rgpRecipientCert[], const BYTE *pbToBeEncrypted, DWORD cbToBeEncrypted, BYTE *pbEncryptedBlob, DWORD *pcbEncryptedBlob);
+  WINIMPM WINBOOL WINAPI CryptDecryptMessage (PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara, const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted, DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert);
+  WINIMPM WINBOOL WINAPI CryptSignAndEncryptMessage (PCRYPT_SIGN_MESSAGE_PARA pSignPara, PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara, DWORD cRecipientCert, PCCERT_CONTEXT rgpRecipientCert[], const BYTE *pbToBeSignedAndEncrypted, DWORD cbToBeSignedAndEncrypted, BYTE *pbSignedAndEncryptedBlob, DWORD *pcbSignedAndEncryptedBlob);
+  WINIMPM WINBOOL WINAPI CryptDecryptAndVerifyMessageSignature (PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara, PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex, const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted, DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert);
+  WINIMPM WINBOOL WINAPI CryptDecodeMessage (DWORD dwMsgTypeFlags, PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara, PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex, const BYTE *pbEncodedBlob, DWORD cbEncodedBlob, DWORD dwPrevInnerContentType, DWORD *pdwMsgType, DWORD *pdwInnerContentType, BYTE *pbDecoded, DWORD *pcbDecoded, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert);
+  WINIMPM WINBOOL WINAPI CryptHashMessage (PCRYPT_HASH_MESSAGE_PARA pHashPara, WINBOOL fDetachedHash, DWORD cToBeHashed, const BYTE *rgpbToBeHashed[], DWORD rgcbToBeHashed[], BYTE *pbHashedBlob, DWORD *pcbHashedBlob, BYTE *pbComputedHash, DWORD *pcbComputedHash);
+  WINIMPM WINBOOL WINAPI CryptVerifyMessageHash (PCRYPT_HASH_MESSAGE_PARA pHashPara, BYTE *pbHashedBlob, DWORD cbHashedBlob, BYTE *pbToBeHashed, DWORD *pcbToBeHashed, BYTE *pbComputedHash, DWORD *pcbComputedHash);
+  WINIMPM WINBOOL WINAPI CryptVerifyDetachedMessageHash (PCRYPT_HASH_MESSAGE_PARA pHashPara, BYTE *pbDetachedHashBlob, DWORD cbDetachedHashBlob, DWORD cToBeHashed, const BYTE *rgpbToBeHashed[], DWORD rgcbToBeHashed[], BYTE *pbComputedHash, DWORD *pcbComputedHash);
+  WINIMPM WINBOOL WINAPI CryptSignMessageWithKey (PCRYPT_KEY_SIGN_MESSAGE_PARA pSignPara, const BYTE *pbToBeSigned, DWORD cbToBeSigned, BYTE *pbSignedBlob, DWORD *pcbSignedBlob);
+  WINIMPM WINBOOL WINAPI CryptVerifyMessageSignatureWithKey (PCRYPT_KEY_VERIFY_MESSAGE_PARA pVerifyPara, PCERT_PUBLIC_KEY_INFO pPublicKeyInfo, const BYTE *pbSignedBlob, DWORD cbSignedBlob, BYTE *pbDecoded, DWORD *pcbDecoded);
+  WINIMPM HCERTSTORE WINAPI CertOpenSystemStoreA (HCRYPTPROV_LEGACY hProv, LPCSTR szSubsystemProtocol);
+  WINIMPM HCERTSTORE WINAPI CertOpenSystemStoreW (HCRYPTPROV_LEGACY hProv, LPCWSTR szSubsystemProtocol);
+  WINIMPM WINBOOL WINAPI CertAddEncodedCertificateToSystemStoreA (LPCSTR szCertStoreName, const BYTE *pbCertEncoded, DWORD cbCertEncoded);
+  WINIMPM WINBOOL WINAPI CertAddEncodedCertificateToSystemStoreW (LPCWSTR szCertStoreName, const BYTE *pbCertEncoded, DWORD cbCertEncoded);
+  HRESULT WINAPI FindCertsByIssuer (PCERT_CHAIN pCertChains, DWORD *pcbCertChains, DWORD *pcCertChains, BYTE *pbEncodedIssuerName, DWORD cbEncodedIssuerName, LPCWSTR pwszPurpose, DWORD dwKeySpec);
+  WINIMPM WINBOOL WINAPI CryptQueryObject (DWORD dwObjectType, const void *pvObject, DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags, DWORD dwFlags, DWORD *pdwMsgAndCertEncodingType, DWORD *pdwContentType, DWORD *pdwFormatType, HCERTSTORE *phCertStore, HCRYPTMSG *phMsg, const void **ppvContext);
 
 #define CERT_QUERY_OBJECT_FILE 0x1
 #define CERT_QUERY_OBJECT_BLOB 0x2
+
 #define CERT_QUERY_CONTENT_CERT 1
 #define CERT_QUERY_CONTENT_CTL 2
 #define CERT_QUERY_CONTENT_CRL 3
@@ -3661,6 +4445,8 @@
 #define CERT_QUERY_CONTENT_PKCS10 11
 #define CERT_QUERY_CONTENT_PFX 12
 #define CERT_QUERY_CONTENT_CERT_PAIR 13
+#define CERT_QUERY_CONTENT_PFX_AND_LOAD 14
+
 #define CERT_QUERY_CONTENT_FLAG_CERT (1 << CERT_QUERY_CONTENT_CERT)
 #define CERT_QUERY_CONTENT_FLAG_CTL (1 << CERT_QUERY_CONTENT_CTL)
 #define CERT_QUERY_CONTENT_FLAG_CRL (1 << CERT_QUERY_CONTENT_CRL)
@@ -3674,27 +4460,31 @@
 #define CERT_QUERY_CONTENT_FLAG_PKCS10 (1 << CERT_QUERY_CONTENT_PKCS10)
 #define CERT_QUERY_CONTENT_FLAG_PFX (1 << CERT_QUERY_CONTENT_PFX)
 #define CERT_QUERY_CONTENT_FLAG_CERT_PAIR (1 << CERT_QUERY_CONTENT_CERT_PAIR)
-#define CERT_QUERY_CONTENT_FLAG_ALL CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_CTL | CERT_QUERY_CONTENT_FLAG_CRL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | CERT_QUERY_CONTENT_FLAG_PKCS10 | CERT_QUERY_CONTENT_FLAG_PFX | CERT_QUERY_CONTENT_FLAG_CERT_PAIR
+#define CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD (1 << CERT_QUERY_CONTENT_PFX_AND_LOAD)
+
+#define CERT_QUERY_CONTENT_FLAG_ALL (CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_CTL | CERT_QUERY_CONTENT_FLAG_CRL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | CERT_QUERY_CONTENT_FLAG_PKCS10 | CERT_QUERY_CONTENT_FLAG_PFX | CERT_QUERY_CONTENT_FLAG_CERT_PAIR)
+#define CERT_QUERY_CONTENT_FLAG_ALL_ISSUER_CERT (CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED)
+
 #define CERT_QUERY_FORMAT_BINARY 1
 #define CERT_QUERY_FORMAT_BASE64_ENCODED 2
 #define CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED 3
+
 #define CERT_QUERY_FORMAT_FLAG_BINARY (1 << CERT_QUERY_FORMAT_BINARY)
 #define CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED (1 << CERT_QUERY_FORMAT_BASE64_ENCODED)
 #define CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED (1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED)
-#define CERT_QUERY_FORMAT_FLAG_ALL CERT_QUERY_FORMAT_FLAG_BINARY | CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED
 
-  WINIMPM LPVOID WINAPI CryptMemAlloc(ULONG cbSize);
-  WINIMPM LPVOID WINAPI CryptMemRealloc(LPVOID pv,ULONG cbSize);
-  WINIMPM VOID WINAPI CryptMemFree(LPVOID pv);
+#define CERT_QUERY_FORMAT_FLAG_ALL (CERT_QUERY_FORMAT_FLAG_BINARY | CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED)
 
   typedef HANDLE HCRYPTASYNC,*PHCRYPTASYNC;
+  typedef VOID (WINAPI *PFN_CRYPT_ASYNC_PARAM_FREE_FUNC) (LPSTR pszParamOid, LPVOID pvParam);
 
-  typedef VOID (WINAPI *PFN_CRYPT_ASYNC_PARAM_FREE_FUNC)(LPSTR pszParamOid,LPVOID pvParam);
-
-  WINIMPM WINBOOL WINAPI CryptCreateAsyncHandle(DWORD dwFlags,PHCRYPTASYNC phAsync);
-  WINIMPM WINBOOL WINAPI CryptSetAsyncParam(HCRYPTASYNC hAsync,LPSTR pszParamOid,LPVOID pvParam,PFN_CRYPT_ASYNC_PARAM_FREE_FUNC pfnFree);
-  WINIMPM WINBOOL WINAPI CryptGetAsyncParam(HCRYPTASYNC hAsync,LPSTR pszParamOid,LPVOID *ppvParam,PFN_CRYPT_ASYNC_PARAM_FREE_FUNC *ppfnFree);
-  WINIMPM WINBOOL WINAPI CryptCloseAsyncHandle(HCRYPTASYNC hAsync);
+  WINIMPM LPVOID WINAPI CryptMemAlloc (ULONG cbSize);
+  WINIMPM LPVOID WINAPI CryptMemRealloc (LPVOID pv, ULONG cbSize);
+  WINIMPM VOID WINAPI CryptMemFree (LPVOID pv);
+  WINIMPM WINBOOL WINAPI CryptCreateAsyncHandle (DWORD dwFlags, PHCRYPTASYNC phAsync);
+  WINIMPM WINBOOL WINAPI CryptSetAsyncParam (HCRYPTASYNC hAsync, LPSTR pszParamOid, LPVOID pvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC pfnFree);
+  WINIMPM WINBOOL WINAPI CryptGetAsyncParam (HCRYPTASYNC hAsync, LPSTR pszParamOid, LPVOID *ppvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC *ppfnFree);
+  WINIMPM WINBOOL WINAPI CryptCloseAsyncHandle (HCRYPTASYNC hAsync);
 
   typedef struct _CRYPT_BLOB_ARRAY {
     DWORD cBlob;
@@ -3717,37 +4507,41 @@
     LPSTR pszUsername;
     LPSTR pszPassword;
   } CRYPT_PASSWORD_CREDENTIALSA,*PCRYPT_PASSWORD_CREDENTIALSA;
+
   typedef struct _CRYPT_PASSWORD_CREDENTIALSW {
     DWORD cbSize;
     LPWSTR pszUsername;
     LPWSTR pszPassword;
   } CRYPT_PASSWORD_CREDENTIALSW,*PCRYPT_PASSWORD_CREDENTIALSW;
 
-  __MINGW_TYPEDEF_AW(CRYPT_PASSWORD_CREDENTIALS)
-  __MINGW_TYPEDEF_AW(PCRYPT_PASSWORD_CREDENTIALS)
-
-#define CryptRetrieveObjectByUrl __MINGW_NAME_AW(CryptRetrieveObjectByUrl)
-#define CryptStringToBinary __MINGW_NAME_AW(CryptStringToBinary)
-#define CryptBinaryToString __MINGW_NAME_AW(CryptBinaryToString)
+  typedef __MINGW_NAME_AW(CRYPT_PASSWORD_CREDENTIALS) CRYPT_PASSWORD_CREDENTIALS;
+  typedef __MINGW_NAME_AW(PCRYPT_PASSWORD_CREDENTIALS) PCRYPT_PASSWORD_CREDENTIALS;
 
 #define SCHEME_OID_RETRIEVE_ENCODED_OBJECT_FUNC "SchemeDllRetrieveEncodedObject"
 #define SCHEME_OID_RETRIEVE_ENCODED_OBJECTW_FUNC "SchemeDllRetrieveEncodedObjectW"
-
-  typedef VOID (WINAPI *PFN_FREE_ENCODED_OBJECT_FUNC)(LPCSTR pszObjectOid,PCRYPT_BLOB_ARRAY pObject,LPVOID pvFreeContext);
-
 #define CONTEXT_OID_CREATE_OBJECT_CONTEXT_FUNC "ContextDllCreateObjectContext"
 
+  typedef VOID (WINAPI *PFN_FREE_ENCODED_OBJECT_FUNC) (LPCSTR pszObjectOid, PCRYPT_BLOB_ARRAY pObject, LPVOID pvFreeContext);
+
 #define CONTEXT_OID_CERTIFICATE ((LPCSTR)1)
 #define CONTEXT_OID_CRL ((LPCSTR)2)
 #define CONTEXT_OID_CTL ((LPCSTR)3)
 #define CONTEXT_OID_PKCS7 ((LPCSTR)4)
 #define CONTEXT_OID_CAPI2_ANY ((LPCSTR)5)
+#define CONTEXT_OID_OCSP_RESP ((LPCSTR)6)
 
 #define CRYPT_RETRIEVE_MULTIPLE_OBJECTS 0x1
 #define CRYPT_CACHE_ONLY_RETRIEVAL 0x2
 #define CRYPT_WIRE_ONLY_RETRIEVAL 0x4
 #define CRYPT_DONT_CACHE_RESULT 0x8
 #define CRYPT_ASYNC_RETRIEVAL 0x10
+#define CRYPT_VERIFY_CONTEXT_SIGNATURE 0x20
+#define CRYPT_VERIFY_DATA_HASH 0x40
+#define CRYPT_KEEP_TIME_VALID 0x80
+#define CRYPT_DONT_VERIFY_SIGNATURE 0x100
+#define CRYPT_DONT_CHECK_TIME_VALIDITY 0x200
+#define CRYPT_CHECK_FRESHNESS_TIME_VALIDITY 0x400
+#define CRYPT_ACCUMULATIVE_TIMEOUT 0x800
 #define CRYPT_STICKY_CACHE_RETRIEVAL 0x1000
 #define CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL 0x2000
 #define CRYPT_OFFLINE_CHECK_RETRIEVAL 0x4000
@@ -3756,32 +4550,82 @@
 #define CRYPT_NO_AUTH_RETRIEVAL 0x20000
 #define CRYPT_LDAP_AREC_EXCLUSIVE_RETRIEVAL 0x40000
 #define CRYPT_AIA_RETRIEVAL 0x80000
-#define CRYPT_VERIFY_CONTEXT_SIGNATURE 0x20
-#define CRYPT_VERIFY_DATA_HASH 0x40
-#define CRYPT_KEEP_TIME_VALID 0x80
-#define CRYPT_DONT_VERIFY_SIGNATURE 0x100
-#define CRYPT_DONT_CHECK_TIME_VALIDITY 0x200
-#define CRYPT_CHECK_FRESHNESS_TIME_VALIDITY 0x400
-#define CRYPT_ACCUMULATIVE_TIMEOUT 0x800
+#define CRYPT_HTTP_POST_RETRIEVAL 0x100000
+#define CRYPT_PROXY_CACHE_RETRIEVAL 0x200000
+#define CRYPT_NOT_MODIFIED_RETRIEVAL 0x400000
+#define CRYPT_ENABLE_SSL_REVOCATION_RETRIEVAL 0x800000
+#define CRYPT_OCSP_ONLY_RETRIEVAL 0x1000000
+#define CRYPT_NO_OCSP_FAILOVER_TO_CRL_RETRIEVAL 0x2000000
+#define CRYPT_RANDOM_QUERY_STRING_RETRIEVAL 0x4000000
+
+  typedef struct _CRYPTNET_URL_CACHE_PRE_FETCH_INFO {
+    DWORD cbSize;
+    DWORD dwObjectType;
+    DWORD dwError;
+    DWORD dwReserved;
+    FILETIME ThisUpdateTime;
+    FILETIME NextUpdateTime;
+    FILETIME PublishTime;
+  } CRYPTNET_URL_CACHE_PRE_FETCH_INFO,*PCRYPTNET_URL_CACHE_PRE_FETCH_INFO;
+
+#define CRYPTNET_URL_CACHE_PRE_FETCH_NONE 0
+#define CRYPTNET_URL_CACHE_PRE_FETCH_BLOB 1
+#define CRYPTNET_URL_CACHE_PRE_FETCH_CRL 2
+#define CRYPTNET_URL_CACHE_PRE_FETCH_OCSP 3
+#define CRYPTNET_URL_CACHE_PRE_FETCH_AUTOROOT_CAB 5
+#define CRYPTNET_URL_CACHE_PRE_FETCH_DISALLOWED_CERT_CAB 6
+
+  typedef struct _CRYPTNET_URL_CACHE_FLUSH_INFO {
+    DWORD cbSize;
+    DWORD dwExemptSeconds;
+    FILETIME ExpireTime;
+  } CRYPTNET_URL_CACHE_FLUSH_INFO,*PCRYPTNET_URL_CACHE_FLUSH_INFO;
+
+#define CRYPTNET_URL_CACHE_DEFAULT_FLUSH 0
+#define CRYPTNET_URL_CACHE_DISABLE_FLUSH 0xffffffff
+
+  typedef struct _CRYPTNET_URL_CACHE_RESPONSE_INFO {
+    DWORD cbSize;
+    WORD wResponseType;
+    WORD wResponseFlags;
+    FILETIME LastModifiedTime;
+    DWORD dwMaxAge;
+    LPCWSTR pwszETag;
+    DWORD dwProxyId;
+  } CRYPTNET_URL_CACHE_RESPONSE_INFO,*PCRYPTNET_URL_CACHE_RESPONSE_INFO;
+
+#define CRYPTNET_URL_CACHE_RESPONSE_NONE 0
+#define CRYPTNET_URL_CACHE_RESPONSE_HTTP 1
+
+#define CRYPTNET_URL_CACHE_RESPONSE_VALIDATED 0x8000
 
   typedef struct _CRYPT_RETRIEVE_AUX_INFO {
     DWORD cbSize;
     FILETIME *pLastSyncTime;
     DWORD dwMaxUrlRetrievalByteCount;
+    PCRYPTNET_URL_CACHE_PRE_FETCH_INFO pPreFetchInfo;
+    PCRYPTNET_URL_CACHE_FLUSH_INFO pFlushInfo;
+    PCRYPTNET_URL_CACHE_RESPONSE_INFO *ppResponseInfo;
+    LPWSTR pwszCacheFileNamePrefix;
+    LPFILETIME pftCacheResync;
+    WINBOOL fProxyCacheRetrieval;
+    DWORD dwHttpStatusCode;
   } CRYPT_RETRIEVE_AUX_INFO,*PCRYPT_RETRIEVE_AUX_INFO;
 
-  WINIMPM WINBOOL WINAPI CryptRetrieveObjectByUrlA(LPCSTR pszUrl,LPCSTR pszObjectOid,DWORD dwRetrievalFlags,DWORD dwTimeout,LPVOID *ppvObject,HCRYPTASYNC hAsyncRetrieve,PCRYPT_CREDENTIALS pCredentials,LPVOID pvVerify,PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
-  WINIMPM WINBOOL WINAPI CryptRetrieveObjectByUrlW(LPCWSTR pszUrl,LPCSTR pszObjectOid,DWORD dwRetrievalFlags,DWORD dwTimeout,LPVOID *ppvObject,HCRYPTASYNC hAsyncRetrieve,PCRYPT_CREDENTIALS pCredentials,LPVOID pvVerify,PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
+  WINIMPM WINBOOL WINAPI CryptRetrieveObjectByUrlA (LPCSTR pszUrl, LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject, HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
+  WINIMPM WINBOOL WINAPI CryptRetrieveObjectByUrlW (LPCWSTR pszUrl, LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject, HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
 
-  typedef WINBOOL (WINAPI *PFN_CRYPT_CANCEL_RETRIEVAL)(DWORD dwFlags,void *pvArg);
+#define CryptRetrieveObjectByUrl __MINGW_NAME_AW(CryptRetrieveObjectByUrl)
 
-  WINIMPM WINBOOL WINAPI CryptInstallCancelRetrieval(PFN_CRYPT_CANCEL_RETRIEVAL pfnCancel,const void *pvArg,DWORD dwFlags,void *pvReserved);
-  WINIMPM WINBOOL WINAPI CryptUninstallCancelRetrieval(DWORD dwFlags,void *pvReserved);
-  WINIMPM WINBOOL WINAPI CryptCancelAsyncRetrieval(HCRYPTASYNC hAsyncRetrieval);
+  typedef WINBOOL (WINAPI *PFN_CRYPT_CANCEL_RETRIEVAL) (DWORD dwFlags, void *pvArg);
+
+  WINIMPM WINBOOL WINAPI CryptInstallCancelRetrieval (PFN_CRYPT_CANCEL_RETRIEVAL pfnCancel, const void *pvArg, DWORD dwFlags, void *pvReserved);
+  WINIMPM WINBOOL WINAPI CryptUninstallCancelRetrieval (DWORD dwFlags, void *pvReserved);
+  WINIMPM WINBOOL WINAPI CryptCancelAsyncRetrieval (HCRYPTASYNC hAsyncRetrieval);
 
 #define CRYPT_PARAM_ASYNC_RETRIEVAL_COMPLETION ((LPCSTR)1)
 
-  typedef VOID (WINAPI *PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC)(LPVOID pvCompletion,DWORD dwCompletionCode,LPCSTR pszUrl,LPSTR pszObjectOid,LPVOID pvObject);
+  typedef VOID (WINAPI *PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC) (LPVOID pvCompletion, DWORD dwCompletionCode, LPCSTR pszUrl, LPSTR pszObjectOid, LPVOID pvObject);
 
   typedef struct _CRYPT_ASYNC_RETRIEVAL_COMPLETION {
     PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC pfnCompletion;
@@ -3790,7 +4634,7 @@
 
 #define CRYPT_PARAM_CANCEL_ASYNC_RETRIEVAL ((LPCSTR)2)
 
-  typedef WINBOOL (WINAPI *PFN_CANCEL_ASYNC_RETRIEVAL_FUNC)(HCRYPTASYNC hAsyncRetrieve);
+  typedef WINBOOL (WINAPI *PFN_CANCEL_ASYNC_RETRIEVAL_FUNC) (HCRYPTASYNC hAsyncRetrieve);
 
 #define CRYPT_GET_URL_FROM_PROPERTY 0x1
 #define CRYPT_GET_URL_FROM_EXTENSION 0x2
@@ -3809,28 +4653,45 @@
     DWORD *rgcGroupEntry;
   } CRYPT_URL_INFO,*PCRYPT_URL_INFO;
 
-  WINIMPM WINBOOL WINAPI CryptGetObjectUrl(LPCSTR pszUrlOid,LPVOID pvPara,DWORD dwFlags,PCRYPT_URL_ARRAY pUrlArray,DWORD *pcbUrlArray,PCRYPT_URL_INFO pUrlInfo,DWORD *pcbUrlInfo,LPVOID pvReserved);
+  WINIMPM WINBOOL WINAPI CryptGetObjectUrl (LPCSTR pszUrlOid, LPVOID pvPara, DWORD dwFlags, PCRYPT_URL_ARRAY pUrlArray, DWORD *pcbUrlArray, PCRYPT_URL_INFO pUrlInfo, DWORD *pcbUrlInfo, LPVOID pvReserved);
 
 #define URL_OID_GET_OBJECT_URL_FUNC "UrlDllGetObjectUrl"
 
-#define URL_OID_CERTIFICATE_ISSUER ((LPCSTR)1)
-#define URL_OID_CERTIFICATE_CRL_DIST_POINT ((LPCSTR)2)
-#define URL_OID_CTL_ISSUER ((LPCSTR)3)
-#define URL_OID_CTL_NEXT_UPDATE ((LPCSTR)4)
-#define URL_OID_CRL_ISSUER ((LPCSTR)5)
-#define URL_OID_CERTIFICATE_FRESHEST_CRL ((LPCSTR)6)
-#define URL_OID_CRL_FRESHEST_CRL ((LPCSTR)7)
-#define URL_OID_CROSS_CERT_DIST_POINT ((LPCSTR)8)
+#define URL_OID_CERTIFICATE_ISSUER ((LPCSTR) 1)
+#define URL_OID_CERTIFICATE_CRL_DIST_POINT ((LPCSTR) 2)
+#define URL_OID_CTL_ISSUER ((LPCSTR) 3)
+#define URL_OID_CTL_NEXT_UPDATE ((LPCSTR) 4)
+#define URL_OID_CRL_ISSUER ((LPCSTR) 5)
+#define URL_OID_CERTIFICATE_FRESHEST_CRL ((LPCSTR) 6)
+#define URL_OID_CRL_FRESHEST_CRL ((LPCSTR) 7)
+#define URL_OID_CROSS_CERT_DIST_POINT ((LPCSTR) 8)
+#define URL_OID_CERTIFICATE_OCSP ((LPCSTR) 9)
+#define URL_OID_CERTIFICATE_OCSP_AND_CRL_DIST_POINT ((LPCSTR) 10)
+#define URL_OID_CERTIFICATE_CRL_DIST_POINT_AND_OCSP ((LPCSTR) 11)
+#define URL_OID_CROSS_CERT_SUBJECT_INFO_ACCESS ((LPCSTR) 12)
+#define URL_OID_CERTIFICATE_ONLY_OCSP ((LPCSTR) 13)
 
   typedef struct _CERT_CRL_CONTEXT_PAIR {
     PCCERT_CONTEXT pCertContext;
     PCCRL_CONTEXT pCrlContext;
   } CERT_CRL_CONTEXT_PAIR,*PCERT_CRL_CONTEXT_PAIR;
+
   typedef const CERT_CRL_CONTEXT_PAIR *PCCERT_CRL_CONTEXT_PAIR;
 
-  WINIMPM WINBOOL WINAPI CryptGetTimeValidObject(LPCSTR pszTimeValidOid,LPVOID pvPara,PCCERT_CONTEXT pIssuer,LPFILETIME pftValidFor,DWORD dwFlags,DWORD dwTimeout,LPVOID *ppvObject,PCRYPT_CREDENTIALS pCredentials,LPVOID pvReserved);
+  typedef struct _CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO {
+    DWORD cbSize;
+    int iDeltaCrlIndicator;
+    LPFILETIME pftCacheResync;
+    LPFILETIME pLastSyncTime;
+    LPFILETIME pMaxAgeTime;
+    PCERT_REVOCATION_CHAIN_PARA pChainPara;
+    PCRYPT_INTEGER_BLOB pDeltaCrlIndicator;
+  } CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO, *PCRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO;
+
+  typedef WINBOOL (WINAPI *PFN_CRYPT_ENUM_KEYID_PROP) (const CRYPT_HASH_BLOB *pKeyIdentifier, DWORD dwFlags, void *pvReserved, void *pvArg, DWORD cProp, DWORD *rgdwPropId, void **rgpvData, DWORD *rgcbData);
 
 #define TIME_VALID_OID_GET_OBJECT_FUNC "TimeValidDllGetObject"
+#define CERT_CHAIN_CONFIG_REGPATH L"Software\\Microsoft\\Cryptography\\OID\\EncodingType 0\\CertDllCreateCertificateChainEngine\\Config"
 
 #define TIME_VALID_OID_GET_CTL ((LPCSTR)1)
 #define TIME_VALID_OID_GET_CRL ((LPCSTR)2)
@@ -3839,84 +4700,119 @@
 #define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CERT ((LPCSTR)4)
 #define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CRL ((LPCSTR)5)
 
-  WINIMPM WINBOOL WINAPI CryptFlushTimeValidObject(LPCSTR pszFlushTimeValidOid,LPVOID pvPara,PCCERT_CONTEXT pIssuer,DWORD dwFlags,LPVOID pvReserved);
-
 #define TIME_VALID_OID_FLUSH_OBJECT_FUNC "TimeValidDllFlushObject"
+
 #define TIME_VALID_OID_FLUSH_CTL ((LPCSTR)1)
 #define TIME_VALID_OID_FLUSH_CRL ((LPCSTR)2)
 #define TIME_VALID_OID_FLUSH_CRL_FROM_CERT ((LPCSTR)3)
-
 #define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CERT ((LPCSTR)4)
 #define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CRL ((LPCSTR)5)
 
-  typedef struct _CRYPTPROTECT_PROMPTSTRUCT {
-    DWORD cbSize;
-    DWORD dwPromptFlags;
-    HWND hwndApp;
-    LPCWSTR szPrompt;
-  } CRYPTPROTECT_PROMPTSTRUCT,*PCRYPTPROTECT_PROMPTSTRUCT;
-
-#define CRYPTPROTECT_DEFAULT_PROVIDER { 0xdf9d8cd0,0x1501,0x11d1,{0x8c,0x7a,0x00,0xc0,0x4f,0xc2,0x97,0xeb} }
-#define CRYPTPROTECT_PROMPT_ON_UNPROTECT 0x1
-
-#define CRYPTPROTECT_PROMPT_ON_PROTECT 0x2
-#define CRYPTPROTECT_PROMPT_RESERVED 0x4
-
-#define CRYPTPROTECT_PROMPT_STRONG 0x8
-#define CRYPTPROTECT_PROMPT_REQUIRE_STRONG 0x10
-#define CRYPTPROTECT_UI_FORBIDDEN 0x1
-#define CRYPTPROTECT_LOCAL_MACHINE 0x4
-#define CRYPTPROTECT_CRED_SYNC 0x8
-#define CRYPTPROTECT_AUDIT 0x10
-#define CRYPTPROTECT_NO_RECOVERY 0x20
-#define CRYPTPROTECT_VERIFY_PROTECTION 0x40
-#define CRYPTPROTECT_CRED_REGENERATE 0x80
-#define CRYPTPROTECT_FIRST_RESERVED_FLAGVAL 0x0FFFFFFF
-#define CRYPTPROTECT_LAST_RESERVED_FLAGVAL 0xFFFFFFFF
-
-  WINIMPM WINBOOL WINAPI CryptProtectData(DATA_BLOB *pDataIn,LPCWSTR szDataDescr,DATA_BLOB *pOptionalEntropy,PVOID pvReserved,CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,DWORD dwFlags,DATA_BLOB *pDataOut);
-  WINIMPM WINBOOL WINAPI CryptUnprotectData(DATA_BLOB *pDataIn,LPWSTR *ppszDataDescr,DATA_BLOB *pOptionalEntropy,PVOID pvReserved,CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,DWORD dwFlags,DATA_BLOB *pDataOut);
-
-#define CRYPTPROTECTMEMORY_BLOCK_SIZE 16
-#define CRYPTPROTECTMEMORY_SAME_PROCESS 0x0
-#define CRYPTPROTECTMEMORY_CROSS_PROCESS 0x1
-#define CRYPTPROTECTMEMORY_SAME_LOGON 0x2
-
-  WINIMPM WINBOOL WINAPI CryptProtectMemory(LPVOID pDataIn,DWORD cbDataIn,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI CryptUnprotectMemory(LPVOID pDataIn,DWORD cbDataIn,DWORD dwFlags);
-  WINIMPM PCCERT_CONTEXT WINAPI CertCreateSelfSignCertificate(HCRYPTPROV hProv,PCERT_NAME_BLOB pSubjectIssuerBlob,DWORD dwFlags,PCRYPT_KEY_PROV_INFO pKeyProvInfo,PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,PSYSTEMTIME pStartTime,PSYSTEMTIME pEndTime,PCERT_EXTENSIONS pExtensions);
-
 #define CERT_CREATE_SELFSIGN_NO_SIGN 1
 #define CERT_CREATE_SELFSIGN_NO_KEY_INFO 2
 
-  WINIMPM WINBOOL WINAPI CryptGetKeyIdentifierProperty(const CRYPT_HASH_BLOB *pKeyIdentifier,DWORD dwPropId,DWORD dwFlags,LPCWSTR pwszComputerName,void *pvReserved,void *pvData,DWORD *pcbData);
-
+#define CRYPT_KEYID_DELETE_FLAG 0x10
 #define CRYPT_KEYID_MACHINE_FLAG 0x20
-
+#define CRYPT_KEYID_SET_NEW_FLAG 0x2000
 #define CRYPT_KEYID_ALLOC_FLAG 0x8000
 
-  WINIMPM WINBOOL WINAPI CryptSetKeyIdentifierProperty(const CRYPT_HASH_BLOB *pKeyIdentifier,DWORD dwPropId,DWORD dwFlags,LPCWSTR pwszComputerName,void *pvReserved,const void *pvData);
+  WINIMPM WINBOOL WINAPI CryptGetTimeValidObject (LPCSTR pszTimeValidOid, LPVOID pvPara, PCCERT_CONTEXT pIssuer, LPFILETIME pftValidFor, DWORD dwFlags, DWORD dwTimeout, LPVOID *ppvObject, PCRYPT_CREDENTIALS pCredentials, PCRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO pExtraInfo);
+  WINIMPM WINBOOL WINAPI CryptFlushTimeValidObject (LPCSTR pszFlushTimeValidOid, LPVOID pvPara, PCCERT_CONTEXT pIssuer, DWORD dwFlags, LPVOID pvReserved);
+  WINIMPM PCCERT_CONTEXT WINAPI CertCreateSelfSignCertificate (HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey, PCERT_NAME_BLOB pSubjectIssuerBlob, DWORD dwFlags, PCRYPT_KEY_PROV_INFO pKeyProvInfo, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, PSYSTEMTIME pStartTime, PSYSTEMTIME pEndTime, PCERT_EXTENSIONS pExtensions);
+  WINIMPM WINBOOL WINAPI CryptGetKeyIdentifierProperty (const CRYPT_HASH_BLOB *pKeyIdentifier, DWORD dwPropId, DWORD dwFlags, LPCWSTR pwszComputerName, void *pvReserved, void *pvData, DWORD *pcbData);
+  WINIMPM WINBOOL WINAPI CryptSetKeyIdentifierProperty (const CRYPT_HASH_BLOB *pKeyIdentifier, DWORD dwPropId, DWORD dwFlags, LPCWSTR pwszComputerName, void *pvReserved, const void *pvData);
+  WINIMPM WINBOOL WINAPI CryptEnumKeyIdentifierProperties (const CRYPT_HASH_BLOB *pKeyIdentifier, DWORD dwPropId, DWORD dwFlags, LPCWSTR pwszComputerName, void *pvReserved, void *pvArg, PFN_CRYPT_ENUM_KEYID_PROP pfnEnum);
+  WINIMPM WINBOOL WINAPI CryptCreateKeyIdentifierFromCSP (DWORD dwCertEncodingType, LPCSTR pszPubKeyOID, const PUBLICKEYSTRUC *pPubKeyStruc, DWORD cbPubKeyStruc, DWORD dwFlags, void *pvReserved, BYTE *pbHash, DWORD *pcbHash);
 
-#define CRYPT_KEYID_DELETE_FLAG 0x10
-#define CRYPT_KEYID_SET_NEW_FLAG 0x2000
-
-  typedef WINBOOL (WINAPI *PFN_CRYPT_ENUM_KEYID_PROP)(const CRYPT_HASH_BLOB *pKeyIdentifier,DWORD dwFlags,void *pvReserved,void *pvArg,DWORD cProp,DWORD *rgdwPropId,void **rgpvData,DWORD *rgcbData);
-
-  WINIMPM WINBOOL WINAPI CryptEnumKeyIdentifierProperties(const CRYPT_HASH_BLOB *pKeyIdentifier,DWORD dwPropId,DWORD dwFlags,LPCWSTR pwszComputerName,void *pvReserved,void *pvArg,PFN_CRYPT_ENUM_KEYID_PROP pfnEnum);
-  WINIMPM WINBOOL WINAPI CryptCreateKeyIdentifierFromCSP(DWORD dwCertEncodingType,LPCSTR pszPubKeyOID,const PUBLICKEYSTRUC *pPubKeyStruc,DWORD cbPubKeyStruc,DWORD dwFlags,void *pvReserved,BYTE *pbHash,DWORD *pcbHash);
-
-#define CERT_CHAIN_CONFIG_REGPATH L"Software\\Microsoft\\Cryptography\\OID\\EncodingType 0\\CertDllCreateCertificateChainEngine\\Config"
-#define CERT_CHAIN_DISABLE_AIA_URL_RETRIEVAL_VALUE_NAME L"DisableAIAUrlRetrieval"
+#define CERT_CHAIN_MAX_URL_RETRIEVAL_BYTE_COUNT_VALUE_NAME L"MaxUrlRetrievalByteCount"
+#define CERT_CHAIN_MAX_URL_RETRIEVAL_BYTE_COUNT_DEFAULT (100 *1024 *1024)
+#define CERT_CHAIN_CACHE_RESYNC_FILETIME_VALUE_NAME L"ChainCacheResyncFiletime"
+#define CERT_CHAIN_DISABLE_MANDATORY_BASIC_CONSTRAINTS_VALUE_NAME L"DisableMandatoryBasicConstraints"
+#define CERT_CHAIN_DISABLE_CA_NAME_CONSTRAINTS_VALUE_NAME L"DisableCANameConstraints"
+#define CERT_CHAIN_DISABLE_UNSUPPORTED_CRITICAL_EXTENSIONS_VALUE_NAME L"DisableUnsupportedCriticalExtensions"
 #define CERT_CHAIN_MAX_AIA_URL_COUNT_IN_CERT_VALUE_NAME L"MaxAIAUrlCountInCert"
 #define CERT_CHAIN_MAX_AIA_URL_COUNT_IN_CERT_DEFAULT 5
 #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_COUNT_PER_CHAIN_VALUE_NAME L"MaxAIAUrlRetrievalCountPerChain"
-#define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_COUNT_PER_CHAIN_DEFAULT 10
+#define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_COUNT_PER_CHAIN_DEFAULT 3
 #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_BYTE_COUNT_VALUE_NAME L"MaxAIAUrlRetrievalByteCount"
 #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_BYTE_COUNT_DEFAULT 100000
 #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_CERT_COUNT_VALUE_NAME L"MaxAIAUrlRetrievalCertCount"
 #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_CERT_COUNT_DEFAULT 10
-
-  typedef HANDLE HCERTCHAINENGINE;
+#define CERT_CHAIN_OCSP_VALIDITY_SECONDS_VALUE_NAME L"OcspValiditySeconds"
+#define CERT_CHAIN_OCSP_VALIDITY_SECONDS_DEFAULT (12 *60 *60)
+#define CERT_CHAIN_ENABLE_WEAK_SIGNATURE_FLAGS_VALUE_NAME L"EnableWeakSignatureFlags"
+#define CERT_CHAIN_ENABLE_MD2_MD4_FLAG 0x1
+#define CERT_CHAIN_ENABLE_WEAK_RSA_ROOT_FLAG 0x2
+#define CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG 0x4
+#define CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG 0x8
+#define CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_VALUE_NAME L"MinRsaPubKeyBitLength"
+#define CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_DEFAULT 1023
+#define CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_DISABLE 0xffffffff
+#define CERT_CHAIN_WEAK_RSA_PUB_KEY_TIME_VALUE_NAME L"WeakRsaPubKeyTime"
+#define CERT_CHAIN_WEAK_RSA_PUB_KEY_TIME_DEFAULT 0x01ca8a755c6e0000ui64U
+#define CERT_CHAIN_WEAK_SIGNATURE_LOG_DIR_VALUE_NAME L"WeakSignatureLogDir"
+#define CERT_SRV_OCSP_RESP_MIN_VALIDITY_SECONDS_VALUE_NAME L"SrvOcspRespMinValiditySeconds"
+#define CERT_SRV_OCSP_RESP_MIN_VALIDITY_SECONDS_DEFAULT (10 *60)
+#define CERT_SRV_OCSP_RESP_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME L"SrvOcspRespUrlRetrievalTimeoutMilliseconds"
+#define CERT_SRV_OCSP_RESP_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_DEFAULT (15 *1000)
+#define CERT_SRV_OCSP_RESP_MAX_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME L"SrvOcspRespMaxBeforeNextUpdateSeconds"
+#define CERT_SRV_OCSP_RESP_MAX_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT (4 *60 *60)
+#define CERT_SRV_OCSP_RESP_MIN_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME L"SrvOcspRespMinBeforeNextUpdateSeconds"
+#define CERT_SRV_OCSP_RESP_MIN_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT (2 *60)
+#define CERT_SRV_OCSP_RESP_MIN_AFTER_NEXT_UPDATE_SECONDS_VALUE_NAME L"SrvOcspRespMinAfterNextUpdateSeconds"
+#define CERT_SRV_OCSP_RESP_MIN_AFTER_NEXT_UPDATE_SECONDS_DEFAULT (1 *60)
+#define CRYPTNET_MAX_CACHED_OCSP_PER_CRL_COUNT_VALUE_NAME L"CryptnetMaxCachedOcspPerCrlCount"
+#define CRYPTNET_MAX_CACHED_OCSP_PER_CRL_COUNT_DEFAULT 500
+#define CRYPTNET_OCSP_AFTER_CRL_DISABLE 0xffffffff
+#define CRYPTNET_URL_CACHE_DEFAULT_FLUSH_EXEMPT_SECONDS_VALUE_NAME L"CryptnetDefaultFlushExemptSeconds"
+#define CRYPTNET_URL_CACHE_DEFAULT_FLUSH_EXEMPT_SECONDS_DEFAULT (28 *24 *60 *60)
+#define CRYPTNET_PRE_FETCH_MIN_MAX_AGE_SECONDS_VALUE_NAME L"CryptnetPreFetchMinMaxAgeSeconds"
+#define CRYPTNET_PRE_FETCH_MIN_MAX_AGE_SECONDS_DEFAULT (1 *60 *60)
+#define CRYPTNET_PRE_FETCH_MAX_MAX_AGE_SECONDS_VALUE_NAME L"CryptnetPreFetchMaxMaxAgeSeconds"
+#define CRYPTNET_PRE_FETCH_MAX_MAX_AGE_SECONDS_DEFAULT (14 *24 *60 *60)
+#define CRYPTNET_PRE_FETCH_MIN_OCSP_VALIDITY_PERIOD_SECONDS_VALUE_NAME L"CryptnetPreFetchMinOcspValidityPeriodSeconds"
+#define CRYPTNET_PRE_FETCH_MIN_OCSP_VALIDITY_PERIOD_SECONDS_DEFAULT (14 *24 *60 *60)
+#define CRYPTNET_PRE_FETCH_AFTER_PUBLISH_PRE_FETCH_DIVISOR_VALUE_NAME L"CryptnetPreFetchAfterPublishPreFetchDivisor"
+#define CRYPTNET_PRE_FETCH_AFTER_PUBLISH_PRE_FETCH_DIVISOR_DEFAULT 10
+#define CRYPTNET_PRE_FETCH_BEFORE_NEXT_UPDATE_PRE_FETCH_DIVISOR_VALUE_NAME L"CryptnetPreFetchBeforeNextUpdatePreFetchDivisor"
+#define CRYPTNET_PRE_FETCH_BEFORE_NEXT_UPDATE_PRE_FETCH_DIVISOR_DEFAULT 20
+#define CRYPTNET_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME L"CryptnetPreFetchMinBeforeNextUpdatePreFetchSeconds"
+#define CRYPTNET_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_DEFAULT (1 *60 *60)
+#define CRYPTNET_PRE_FETCH_VALIDITY_PERIOD_AFTER_NEXT_UPDATE_PRE_FETCH_DIVISOR_VALUE_NAME L"CryptnetPreFetchValidityPeriodAfterNextUpdatePreFetchDivisor"
+#define CRYPTNET_PRE_FETCH_VALIDITY_PERIOD_AFTER_NEXT_UPDATE_PRE_FETCH_DIVISOR_DEFAULT 10
+#define CRYPTNET_PRE_FETCH_MAX_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME L"CryptnetPreFetchMaxAfterNextUpdatePreFetchPeriodSeconds"
+#define CRYPTNET_PRE_FETCH_MAX_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_DEFAULT (4 *60 *60)
+#define CRYPTNET_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME L"CryptnetPreFetchMinAfterNextUpdatePreFetchPeriodSeconds"
+#define CRYPTNET_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_DEFAULT (30 *60)
+#define CRYPTNET_PRE_FETCH_AFTER_CURRENT_TIME_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME L"CryptnetPreFetchAfterCurrentTimePreFetchPeriodSeconds"
+#define CRYPTNET_PRE_FETCH_AFTER_CURRENT_TIME_PRE_FETCH_PERIOD_SECONDS_DEFAULT (30 *60)
+#define CRYPTNET_PRE_FETCH_TRIGGER_PERIOD_SECONDS_VALUE_NAME L"CryptnetPreFetchTriggerPeriodSeconds"
+#define CRYPTNET_PRE_FETCH_TRIGGER_PERIOD_SECONDS_DEFAULT (10 *60)
+#define CRYPTNET_PRE_FETCH_TRIGGER_DISABLE 0xffffffff
+#define CRYPTNET_PRE_FETCH_SCAN_AFTER_TRIGGER_DELAY_SECONDS_VALUE_NAME L"CryptnetPreFetchScanAfterTriggerDelaySeconds"
+#define CRYPTNET_PRE_FETCH_SCAN_AFTER_TRIGGER_DELAY_SECONDS_DEFAULT 30
+#define CRYPTNET_PRE_FETCH_RETRIEVAL_TIMEOUT_SECONDS_VALUE_NAME L"CryptnetPreFetchRetrievalTimeoutSeconds"
+#define CRYPTNET_PRE_FETCH_RETRIEVAL_TIMEOUT_SECONDS_DEFAULT (5 *60)
+#define CERT_GROUP_POLICY_CHAIN_CONFIG_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\ChainEngine\\Config"
+#define CERT_CHAIN_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME L"ChainUrlRetrievalTimeoutMilliseconds"
+#define CERT_CHAIN_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_DEFAULT (15 *1000)
+#define CERT_CHAIN_REV_ACCUMULATIVE_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME L"ChainRevAccumulativeUrlRetrievalTimeoutMilliseconds"
+#define CERT_CHAIN_REV_ACCUMULATIVE_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_DEFAULT (20 *1000)
+#define CERT_RETR_BEHAVIOR_INET_AUTH_VALUE_NAME L"EnableInetUnknownAuth"
+#define CERT_RETR_BEHAVIOR_INET_STATUS_VALUE_NAME L"EnableInetLocal"
+#define CERT_RETR_BEHAVIOR_FILE_VALUE_NAME L"AllowFileUrlScheme"
+#define CERT_RETR_BEHAVIOR_LDAP_VALUE_NAME L"DisableLDAPSignAndEncrypt"
+#define CRYPTNET_CACHED_OCSP_SWITCH_TO_CRL_COUNT_VALUE_NAME L"CryptnetCachedOcspSwitchToCrlCount"
+#define CRYPTNET_CACHED_OCSP_SWITCH_TO_CRL_COUNT_DEFAULT 50
+#define CRYPTNET_CRL_BEFORE_OCSP_ENABLE 0xffffffff
+#define CERT_CHAIN_DISABLE_AIA_URL_RETRIEVAL_VALUE_NAME L"DisableAIAUrlRetrieval"
+#define CERT_CHAIN_OPTIONS_VALUE_NAME L"Options"
+#define CERT_CHAIN_OPTION_DISABLE_AIA_URL_RETRIEVAL 0x2
+#define CERT_CHAIN_OPTION_ENABLE_SIA_URL_RETRIEVAL 0x4
+#define CERT_CHAIN_CROSS_CERT_DOWNLOAD_INTERVAL_HOURS_VALUE_NAME L"CrossCertDownloadIntervalHours"
+#define CERT_CHAIN_CROSS_CERT_DOWNLOAD_INTERVAL_HOURS_DEFAULT (24 *7)
+#define CERT_CHAIN_CRL_VALIDITY_EXT_PERIOD_HOURS_VALUE_NAME L"CRLValidityExtensionPeriod"
+#define CERT_CHAIN_CRL_VALIDITY_EXT_PERIOD_HOURS_DEFAULT 12
 
 #define HCCE_CURRENT_USER ((HCERTCHAINENGINE)NULL)
 #define HCCE_LOCAL_MACHINE ((HCERTCHAINENGINE)0x1)
@@ -3928,6 +4824,8 @@
 #define CERT_CHAIN_ENABLE_CACHE_AUTO_UPDATE 0x10
 #define CERT_CHAIN_ENABLE_SHARE_STORE 0x20
 
+  typedef HANDLE HCERTCHAINENGINE;
+
   typedef struct _CERT_CHAIN_ENGINE_CONFIG {
     DWORD cbSize;
     HCERTSTORE hRestrictedRoot;
@@ -3939,11 +4837,22 @@
     DWORD dwUrlRetrievalTimeout;
     DWORD MaximumCachedCertificates;
     DWORD CycleDetectionModulus;
+#if NTDDI_VERSION >= 0x06010000
+    HCERTSTORE hExclusiveRoot;
+    HCERTSTORE hExclusiveTrustedPeople;
+#endif
+#if NTDDI_VERSION >= 0x06020000
+    DWORD dwExclusiveFlags;
+#endif
   } CERT_CHAIN_ENGINE_CONFIG,*PCERT_CHAIN_ENGINE_CONFIG;
 
-  WINIMPM WINBOOL WINAPI CertCreateCertificateChainEngine(PCERT_CHAIN_ENGINE_CONFIG pConfig,HCERTCHAINENGINE *phChainEngine);
-  WINIMPM VOID WINAPI CertFreeCertificateChainEngine(HCERTCHAINENGINE hChainEngine);
-  WINIMPM WINBOOL WINAPI CertResyncCertificateChainEngine(HCERTCHAINENGINE hChainEngine);
+#if NTDDI_VERSION >= 0x06020000
+#define CERT_CHAIN_EXCLUSIVE_ENABLE_CA_FLAG 0x1
+#endif
+
+  WINIMPM WINBOOL WINAPI CertCreateCertificateChainEngine (PCERT_CHAIN_ENGINE_CONFIG pConfig, HCERTCHAINENGINE *phChainEngine);
+  WINIMPM VOID WINAPI CertFreeCertificateChainEngine (HCERTCHAINENGINE hChainEngine);
+  WINIMPM WINBOOL WINAPI CertResyncCertificateChainEngine (HCERTCHAINENGINE hChainEngine);
 
   typedef struct _CERT_TRUST_STATUS {
     DWORD dwErrorStatus;
@@ -3959,7 +4868,6 @@
 #define CERT_TRUST_IS_UNTRUSTED_ROOT 0x20
 #define CERT_TRUST_REVOCATION_STATUS_UNKNOWN 0x40
 #define CERT_TRUST_IS_CYCLIC 0x80
-
 #define CERT_TRUST_INVALID_EXTENSION 0x100
 #define CERT_TRUST_INVALID_POLICY_CONSTRAINTS 0x200
 #define CERT_TRUST_INVALID_BASIC_CONSTRAINTS 0x400
@@ -3968,24 +4876,32 @@
 #define CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT 0x2000
 #define CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT 0x4000
 #define CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT 0x8000
-
-#define CERT_TRUST_IS_OFFLINE_REVOCATION 0x1000000
-#define CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY 0x2000000
-
 #define CERT_TRUST_IS_PARTIAL_CHAIN 0x10000
 #define CERT_TRUST_CTL_IS_NOT_TIME_VALID 0x20000
 #define CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID 0x40000
 #define CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE 0x80000
+#define CERT_TRUST_IS_OFFLINE_REVOCATION 0x1000000
+#define CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY 0x2000000
+#define CERT_TRUST_IS_EXPLICIT_DISTRUST 0x4000000
+#define CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT 0x8000000
+#define CERT_TRUST_HAS_WEAK_SIGNATURE 0x100000
 
 #define CERT_TRUST_HAS_EXACT_MATCH_ISSUER 0x1
 #define CERT_TRUST_HAS_KEY_MATCH_ISSUER 0x2
 #define CERT_TRUST_HAS_NAME_MATCH_ISSUER 0x4
 #define CERT_TRUST_IS_SELF_SIGNED 0x8
-
+#define CERT_TRUST_AUTO_UPDATE_CA_REVOCATION 0x10
+#define CERT_TRUST_AUTO_UPDATE_END_REVOCATION 0x20
+#define CERT_TRUST_NO_OCSP_FAILOVER_TO_CRL 0x40
 #define CERT_TRUST_HAS_PREFERRED_ISSUER 0x100
 #define CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY 0x200
 #define CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS 0x400
-
+#define CERT_TRUST_IS_PEER_TRUSTED 0x800
+#define CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED 0x1000
+#define CERT_TRUST_IS_FROM_EXCLUSIVE_TRUST_STORE 0x2000
+#if NTDDI_VERSION >= 0x06020000
+#define CERT_TRUST_IS_CA_TRUSTED 0x4000
+#endif
 #define CERT_TRUST_IS_COMPLEX_CHAIN 0x10000
 
   typedef struct _CERT_REVOCATION_INFO {
@@ -4014,6 +4930,8 @@
     LPCWSTR pwszExtendedErrorInfo;
   } CERT_CHAIN_ELEMENT,*PCERT_CHAIN_ELEMENT;
 
+  typedef const CERT_CHAIN_ELEMENT *PCCERT_CHAIN_ELEMENT;
+
   typedef struct _CERT_SIMPLE_CHAIN {
     DWORD cbSize;
     CERT_TRUST_STATUS TrustStatus;
@@ -4024,6 +4942,8 @@
     DWORD dwRevocationFreshnessTime;
   } CERT_SIMPLE_CHAIN,*PCERT_SIMPLE_CHAIN;
 
+  typedef const CERT_SIMPLE_CHAIN *PCCERT_SIMPLE_CHAIN;
+
   typedef struct _CERT_CHAIN_CONTEXT CERT_CHAIN_CONTEXT,*PCERT_CHAIN_CONTEXT;
   typedef const CERT_CHAIN_CONTEXT *PCCERT_CHAIN_CONTEXT;
 
@@ -4036,6 +4956,8 @@
     PCCERT_CHAIN_CONTEXT *rgpLowerQualityChainContext;
     WINBOOL fHasRevocationFreshnessTime;
     DWORD dwRevocationFreshnessTime;
+    DWORD dwCreateFlags;
+    GUID ChainId;
   };
 
 #define USAGE_MATCH_TYPE_AND 0x0
@@ -4059,26 +4981,41 @@
     DWORD dwUrlRetrievalTimeout;
     WINBOOL fCheckRevocationFreshnessTime;
     DWORD dwRevocationFreshnessTime;
-#if (_WIN32_WINNT >= 0x0600)
-    LPFILETIME       pftCacheResync;
-#endif /*(_WIN32_WINNT >= 0x0600)*/
+    LPFILETIME pftCacheResync;
+    PCCERT_STRONG_SIGN_PARA pStrongSignPara;
+    DWORD dwStrongSignFlags;
 #endif
   } CERT_CHAIN_PARA,*PCERT_CHAIN_PARA;
 
-#define CERT_CHAIN_REVOCATION_CHECK_END_CERT 0x10000000
-#define CERT_CHAIN_REVOCATION_CHECK_CHAIN 0x20000000
-#define CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x40000000
-#define CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY 0x80000000
-
-#define CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT 0x8000000
+#define CERT_CHAIN_STRONG_SIGN_DISABLE_END_CHECK_FLAG 0x1
 #define CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING 0x40
 #define CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS 0x80
 #define CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE 0x100
 #define CERT_CHAIN_TIMESTAMP_TIME 0x200
+#define CERT_CHAIN_ENABLE_PEER_TRUST 0x400
+#define CERT_CHAIN_DISABLE_MY_PEER_TRUST 0x800
+#define CERT_CHAIN_DISABLE_MD2_MD4 0x1000
+#define CERT_CHAIN_REVOCATION_CHECK_END_CERT 0x10000000
+#define CERT_CHAIN_REVOCATION_CHECK_CHAIN 0x20000000
+#define CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x40000000
+#define CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY 0x80000000
+#define CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT 0x8000000
+#define CERT_CHAIN_REVOCATION_CHECK_OCSP_CERT 0x4000000
 
-  WINIMPM WINBOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine,PCCERT_CONTEXT pCertContext,LPFILETIME pTime,HCERTSTORE hAdditionalStore,PCERT_CHAIN_PARA pChainPara,DWORD dwFlags,LPVOID pvReserved,PCCERT_CHAIN_CONTEXT *ppChainContext);
-  WINIMPM VOID WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT pChainContext);
-  WINIMPM PCCERT_CHAIN_CONTEXT WINAPI CertDuplicateCertificateChain(PCCERT_CHAIN_CONTEXT pChainContext);
+  WINIMPM WINBOOL WINAPI CertGetCertificateChain (HCERTCHAINENGINE hChainEngine, PCCERT_CONTEXT pCertContext, LPFILETIME pTime, HCERTSTORE hAdditionalStore, PCERT_CHAIN_PARA pChainPara, DWORD dwFlags, LPVOID pvReserved, PCCERT_CHAIN_CONTEXT *ppChainContext);
+  WINIMPM VOID WINAPI CertFreeCertificateChain (PCCERT_CHAIN_CONTEXT pChainContext);
+  WINIMPM PCCERT_CHAIN_CONTEXT WINAPI CertDuplicateCertificateChain (PCCERT_CHAIN_CONTEXT pChainContext);
+
+  struct _CERT_REVOCATION_CHAIN_PARA {
+    DWORD cbSize;
+    HCERTCHAINENGINE hChainEngine;
+    HCERTSTORE hAdditionalStore;
+    DWORD dwChainFlags;
+    DWORD dwUrlRetrievalTimeout;
+    LPFILETIME pftCurrentTime;
+    LPFILETIME pftCacheResync;
+    DWORD cbMaxUrlRetrievalByteCount;
+  };
 
 #define REVOCATION_OID_CRL_REVOCATION ((LPCSTR)1)
 
@@ -4088,11 +5025,11 @@
     PCCERT_CHAIN_CONTEXT pCrlIssuerChain;
   } CRL_REVOCATION_INFO,*PCRL_REVOCATION_INFO;
 
-  WINIMPM PCCERT_CHAIN_CONTEXT WINAPI CertFindChainInStore(HCERTSTORE hCertStore,DWORD dwCertEncodingType,DWORD dwFindFlags,DWORD dwFindType,const void *pvFindPara,PCCERT_CHAIN_CONTEXT pPrevChainContext);
+  WINIMPM PCCERT_CHAIN_CONTEXT WINAPI CertFindChainInStore (HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCERT_CHAIN_CONTEXT pPrevChainContext);
 
 #define CERT_CHAIN_FIND_BY_ISSUER 1
 
-  typedef WINBOOL (WINAPI *PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK)(PCCERT_CONTEXT pCert,void *pvFindArg);
+  typedef WINBOOL (WINAPI *PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK) (PCCERT_CONTEXT pCert, void *pvFindArg);
 
   typedef struct _CERT_CHAIN_FIND_BY_ISSUER_PARA {
     DWORD cbSize;
@@ -4149,10 +5086,12 @@
 
 #define CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS (CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG | CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG | CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG | CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG)
 
-#define CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG 0x8000
+#define CERT_CHAIN_POLICY_IGNORE_PEER_TRUST_FLAG 0x1000
+#define CERT_CHAIN_POLICY_IGNORE_NOT_SUPPORTED_CRITICAL_EXT_FLAG 0x2000
 #define CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG 0x4000
+#define CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG 0x8000
 
-  WINIMPM WINBOOL WINAPI CertVerifyCertificateChainPolicy(LPCSTR pszPolicyOID,PCCERT_CHAIN_CONTEXT pChainContext,PCERT_CHAIN_POLICY_PARA pPolicyPara,PCERT_CHAIN_POLICY_STATUS pPolicyStatus);
+  WINIMPM WINBOOL WINAPI CertVerifyCertificateChainPolicy (LPCSTR pszPolicyOID, PCCERT_CHAIN_CONTEXT pChainContext, PCERT_CHAIN_POLICY_PARA pPolicyPara, PCERT_CHAIN_POLICY_STATUS pPolicyStatus);
 
 #define CRYPT_OID_VERIFY_CERTIFICATE_CHAIN_POLICY_FUNC "CertDllVerifyCertificateChainPolicy"
 
@@ -4163,20 +5102,18 @@
 #define CERT_CHAIN_POLICY_BASIC_CONSTRAINTS ((LPCSTR) 5)
 #define CERT_CHAIN_POLICY_NT_AUTH ((LPCSTR) 6)
 #define CERT_CHAIN_POLICY_MICROSOFT_ROOT ((LPCSTR) 7)
-#if (_WIN32_WINNT >= 0x0600)
 #define CERT_CHAIN_POLICY_EV ((LPCSTR) 8)
-#endif /*(_WIN32_WINNT >= 0x0600)*/
 
   typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA {
     DWORD cbSize;
     DWORD dwRegPolicySettings;
     PCMSG_SIGNER_INFO pSignerInfo;
-  } AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA,*PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA;
+  } AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA, *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA;
 
   typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS {
     DWORD cbSize;
     WINBOOL fCommercial;
-  } AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS,*PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS;
+  } AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS, *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS;
 
   typedef struct _AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA {
     DWORD cbSize;
@@ -4199,599 +5136,140 @@
 
 #define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_CA_FLAG 0x80000000
 #define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_END_ENTITY_FLAG 0x40000000
-
 #define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG 0x10000
+#define MICROSOFT_ROOT_CERT_CHAIN_POLICY_CHECK_APPLICATION_ROOT_FLAG 0x20000
 
-  WINIMPM WINBOOL WINAPI CryptStringToBinaryA(LPCSTR pszString,DWORD cchString,DWORD dwFlags,BYTE *pbBinary,DWORD *pcbBinary,DWORD *pdwSkip,DWORD *pdwFlags);
-  WINIMPM WINBOOL WINAPI CryptStringToBinaryW(LPCWSTR pszString,DWORD cchString,DWORD dwFlags,BYTE *pbBinary,DWORD *pcbBinary,DWORD *pdwSkip,DWORD *pdwFlags);
-  WINIMPM WINBOOL WINAPI CryptBinaryToStringA(CONST BYTE *pbBinary,DWORD cbBinary,DWORD dwFlags,LPSTR pszString,DWORD *pcchString);
-  WINIMPM WINBOOL WINAPI CryptBinaryToStringW(CONST BYTE *pbBinary,DWORD cbBinary,DWORD dwFlags,LPWSTR pszString,DWORD *pcchString);
+  typedef struct _EV_EXTRA_CERT_CHAIN_POLICY_PARA {
+    DWORD cbSize;
+    DWORD dwRootProgramQualifierFlags;
+  } EV_EXTRA_CERT_CHAIN_POLICY_PARA,*PEV_EXTRA_CERT_CHAIN_POLICY_PARA;
+
+  typedef struct _EV_EXTRA_CERT_CHAIN_POLICY_STATUS {
+    DWORD cbSize;
+    DWORD dwQualifiers;
+    DWORD dwIssuanceUsageIndex;
+  } EV_EXTRA_CERT_CHAIN_POLICY_STATUS,*PEV_EXTRA_CERT_CHAIN_POLICY_STATUS;
+
+#define CryptStringToBinary __MINGW_NAME_AW(CryptStringToBinary)
+#define CryptBinaryToString __MINGW_NAME_AW(CryptBinaryToString)
+
+  WINIMPM WINBOOL WINAPI CryptStringToBinaryA (LPCSTR pszString, DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary, DWORD *pdwSkip, DWORD *pdwFlags);
+  WINIMPM WINBOOL WINAPI CryptStringToBinaryW (LPCWSTR pszString, DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary, DWORD *pdwSkip, DWORD *pdwFlags);
+  WINIMPM WINBOOL WINAPI CryptBinaryToStringA (CONST BYTE *pbBinary, DWORD cbBinary, DWORD dwFlags, LPSTR pszString, DWORD *pcchString);
+  WINIMPM WINBOOL WINAPI CryptBinaryToStringW (CONST BYTE *pbBinary, DWORD cbBinary, DWORD dwFlags, LPWSTR pszString, DWORD *pcchString);
 
 #define CRYPT_STRING_BASE64HEADER 0x0
 #define CRYPT_STRING_BASE64 0x1
 #define CRYPT_STRING_BINARY 0x2
-#define CRYPT_STRING_BASE64REQUESTHEADER 0x3
+#define CRYPT_STRING_BASE64REQUESTHEADER 0x00000003
 #define CRYPT_STRING_HEX 0x4
-#define CRYPT_STRING_HEXASCII 0x5
-#define CRYPT_STRING_BASE64_ANY 0x6
-#define CRYPT_STRING_ANY 0x7
+#define CRYPT_STRING_HEXASCII 0x00000005
+#define CRYPT_STRING_BASE64_ANY 0x00000006
+#define CRYPT_STRING_ANY 0x00000007
 #define CRYPT_STRING_HEX_ANY 0x8
-#define CRYPT_STRING_BASE64X509CRLHEADER 0x9
-#define CRYPT_STRING_HEXADDR 0xa
-#define CRYPT_STRING_HEXASCIIADDR 0xb
+#define CRYPT_STRING_BASE64X509CRLHEADER 0x00000009
+#define CRYPT_STRING_HEXADDR 0x0000000a
+#define CRYPT_STRING_HEXASCIIADDR 0x0000000b
+#define CRYPT_STRING_HEXRAW 0x0000000c
 
+#define CRYPT_STRING_HASHDATA 0x10000000
+#define CRYPT_STRING_STRICT 0x20000000
+#define CRYPT_STRING_NOCRLF 0x40000000
 #define CRYPT_STRING_NOCR 0x80000000
 
-  WINIMPM HCERTSTORE WINAPI PFXImportCertStore(CRYPT_DATA_BLOB *pPFX,LPCWSTR szPassword,DWORD dwFlags);
+#define szOID_PKCS_12_PbeIds "1.2.840.113549.1.12.1"
+#define szOID_PKCS_12_pbeWithSHA1And128BitRC4 "1.2.840.113549.1.12.1.1"
+#define szOID_PKCS_12_pbeWithSHA1And40BitRC4 "1.2.840.113549.1.12.1.2"
+#define szOID_PKCS_12_pbeWithSHA1And3KeyTripleDES "1.2.840.113549.1.12.1.3"
+#define szOID_PKCS_12_pbeWithSHA1And2KeyTripleDES "1.2.840.113549.1.12.1.4"
+#define szOID_PKCS_12_pbeWithSHA1And128BitRC2 "1.2.840.113549.1.12.1.5"
+#define szOID_PKCS_12_pbeWithSHA1And40BitRC2 "1.2.840.113549.1.12.1.6"
 
+  typedef struct _CRYPT_PKCS12_PBE_PARAMS {
+    int iIterations;
+    ULONG cbSalt;
+  } CRYPT_PKCS12_PBE_PARAMS;
+
+  WINIMPM HCERTSTORE WINAPI PFXImportCertStore (CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword, DWORD dwFlags);
+
+#define PKCS12_IMPORT_SILENT 0x40
 #define CRYPT_USER_KEYSET 0x1000
+#define PKCS12_PREFER_CNG_KSP 0x100
+#define PKCS12_ALWAYS_CNG_KSP 0x200
+#define PKCS12_ALLOW_OVERWRITE_KEY 0x4000
+#define PKCS12_NO_PERSIST_KEY 0x8000
 #define PKCS12_IMPORT_RESERVED_MASK 0xffff0000
 
-  WINIMPM WINBOOL WINAPI PFXIsPFXBlob(CRYPT_DATA_BLOB *pPFX);
-  WINIMPM WINBOOL WINAPI PFXVerifyPassword(CRYPT_DATA_BLOB *pPFX,LPCWSTR szPassword,DWORD dwFlags);
-  WINIMPM WINBOOL WINAPI PFXExportCertStoreEx(HCERTSTORE hStore,CRYPT_DATA_BLOB *pPFX,LPCWSTR szPassword,void *pvReserved,DWORD dwFlags);
+#define PKCS12_OBJECT_LOCATOR_ALL_IMPORT_FLAGS (PKCS12_ALWAYS_CNG_KSP | PKCS12_NO_PERSIST_KEY | PKCS12_IMPORT_SILENT | PKCS12_INCLUDE_EXTENDED_PROPERTIES)
+
+  WINIMPM WINBOOL WINAPI PFXIsPFXBlob (CRYPT_DATA_BLOB *pPFX);
+  WINIMPM WINBOOL WINAPI PFXVerifyPassword (CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword, DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI PFXExportCertStoreEx (HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword, void *pvPara, DWORD dwFlags);
 
 #define REPORT_NO_PRIVATE_KEY 0x1
 #define REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY 0x2
 #define EXPORT_PRIVATE_KEYS 0x4
+#define PKCS12_INCLUDE_EXTENDED_PROPERTIES 0x10
+#define PKCS12_PROTECT_TO_DOMAIN_SIDS 0x20
+#define PKCS12_EXPORT_SILENT 0x40
 #define PKCS12_EXPORT_RESERVED_MASK 0xffff0000
 
-  WINIMPM WINBOOL WINAPI PFXExportCertStore(HCERTSTORE hStore,CRYPT_DATA_BLOB *pPFX,LPCWSTR szPassword,DWORD dwFlags);
+  WINIMPM WINBOOL WINAPI PFXExportCertStore (HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword, DWORD dwFlags);
 
-#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
-#if (_WIN32_WINNT >= 0x0600)
-#define szOID_LOYALTY_OTHER_LOGOTYPE "1.3.6.1.5.5.7.20.1"
-#define szOID_BACKGROUND_OTHER_LOGOTYPE "1.3.6.1.5.5.7.20.2"
-#define szOID_QC_EU_COMPLIANCE "0.4.0.1862.1.1"
-#define szOID_QC_SSCD "0.4.0.1862.1.4"
-#define CERT_CHAIN_REVOCATION_CHECK_OCSP_CERT 0x04000000
+#if NTDDI_VERSION >= 0x06000000
+  typedef VOID *HCERT_SERVER_OCSP_RESPONSE;
 
-#define CERT_SRV_OCSP_RESP_MIN_VALIDITY_SECONDS_VALUE_NAME L"SrvOcspRespMinValiditySeconds"
-#define CERT_SRV_OCSP_RESP_MIN_VALIDITY_SECONDS_DEFAULT (10 * 60)
-#define CERT_SRV_OCSP_RESP_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME L"SrvOcspRespUrlRetrievalTimeoutMilliseconds"
-#define CERT_SRV_OCSP_RESP_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_DEFAULT (15 * 1000)
-#define CERT_SRV_OCSP_RESP_MAX_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME L"SrvOcspRespMaxBeforeNextUpdateSeconds"
-#define CERT_SRV_OCSP_RESP_MAX_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT (4 * 60 * 60)
-#define CERT_SRV_OCSP_RESP_MIN_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME L"SrvOcspRespMinBeforeNextUpdateSeconds"
-#define CERT_SRV_OCSP_RESP_MIN_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT (2 * 60)
-#define CERT_SRV_OCSP_RESP_MIN_AFTER_NEXT_UPDATE_SECONDS_VALUE_NAME L"SrvOcspRespMinAfterNextUpdateSeconds"
-#define CERT_SRV_OCSP_RESP_MIN_AFTER_NEXT_UPDATE_SECONDS_DEFAULT (1 * 60)
+  WINIMPM HCERT_SERVER_OCSP_RESPONSE WINAPI CertOpenServerOcspResponse (PCCERT_CHAIN_CONTEXT pChainContext, DWORD dwFlags, LPVOID pvReserved);
 
-typedef VOID* HCERT_SERVER_OCSP_RESPONSE;
-typedef ULONG_PTR HCRYPTPROV_LEGACY;
+#define CERT_SERVER_OCSP_RESPONSE_ASYNC_FLAG 0x1
 
-typedef WINBOOL ( WINAPI *PFN_CERT_CREATE_CONTEXT_SORT_FUNC )(
-  DWORD cbTotalEncoded,
-  DWORD cbRemainEncoded,
-  DWORD cEntry,
-  void *pvSort
-);
+  WINIMPM VOID WINAPI CertAddRefServerOcspResponse (HCERT_SERVER_OCSP_RESPONSE hServerOcspResponse);
+  WINIMPM VOID WINAPI CertCloseServerOcspResponse (HCERT_SERVER_OCSP_RESPONSE hServerOcspResponse, DWORD dwFlags);
 
-#define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_EX2_FUNC "CryptDllExportPublicKeyInfoEx2"
+  typedef struct _CERT_SERVER_OCSP_RESPONSE_CONTEXT CERT_SERVER_OCSP_RESPONSE_CONTEXT,*PCERT_SERVER_OCSP_RESPONSE_CONTEXT;
+  typedef const CERT_SERVER_OCSP_RESPONSE_CONTEXT *PCCERT_SERVER_OCSP_RESPONSE_CONTEXT;
 
-typedef WINBOOL ( WINAPI *PFN_CRYPT_EXPORT_PUBLIC_KEY_INFO_EX2_FUNC )(
-  NCRYPT_KEY_HANDLE hNCryptKey,
-  DWORD dwCertEncodingType,
-  LPSTR pszPublicKeyObjId,
-  DWORD dwFlags,
-  void *pvAuxInfo,
-  PCERT_PUBLIC_KEY_INFO pInfo,
-  DWORD *pcbInfo
-);
-
-#define CRYPT_OID_EXTRACT_ENCODED_SIGNATURE_PARAMETERS_FUNC "CryptDllExtractEncodedSignatureParameters"
-
-typedef WINBOOL ( WINAPI *PFN_CRYPT_EXTRACT_ENCODED_SIGNATURE_PARAMETERS_FUNC )(
-  DWORD dwCertEncodingType,
-  PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
-  void **ppvDecodedSignPara,
-  LPWSTR *ppwszCNGHashAlgid
-);
-
-typedef WINBOOL ( WINAPI *PFN_CRYPT_SIGN_AND_ENCODE_HASH_FUNC )(
-  NCRYPT_KEY_HANDLE hKey,
-  DWORD dwCertEncodingType,
-  PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
-  void *pvDecodedSignPara,
-  LPCWSTR pwszCNGPubKeyAlgid,
-  LPCWSTR pwszCNGHashAlgid,
-  BYTE *pbComputedHash,
-  DWORD cbComputedHash,
-  BYTE *pbSignature,
-  DWORD *pcbSignature
-);
-
-typedef WINBOOL ( WINAPI *PFN_CRYPT_VERIFY_ENCODED_SIGNATURE_FUNC )(
-  DWORD dwCertEncodingType,
-  PCERT_PUBLIC_KEY_INFO pPubKeyInfo,
-  PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
-  void *pvDecodedSignPara,
-  LPCWSTR pwszCNGPubKeyAlgid,
-  LPCWSTR pwszCNGHashAlgid,
-  BYTE *pbComputedHash,
-  DWORD cbComputedHash,
-  BYTE *pbSignature,
-  DWORD cbSignature
-);
-
-
-#define CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_EX2_FUNC "CryptDllImportPublicKeyInfoEx2"
-
-typedef WINBOOL ( WINAPI *PFN_IMPORT_PUBLIC_KEY_INFO_EX2_FUNC )(
-  DWORD dwCertEncodingType,
-  PCERT_PUBLIC_KEY_INFO pInfo,
-  DWORD dwFlags,
-  void *pvAuxInfo,
-  BCRYPT_KEY_HANDLE *phKey
-);
-
-typedef struct _CERT_HASHED_URL {
-  CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
-  CRYPT_HASH_BLOB            Hash;
-  LPWSTR                     pwszUrl;
-} CERT_HASHED_URL, *PCERT_HASHED_URL;
-
-typedef struct _CERT_BIOMETRIC_DATA {
-  DWORD dwTypeOfBiometricDataChoice;
-  __C89_NAMELESS union {
-    DWORD dwPredefined;
-    LPSTR pszObjId;
+  struct _CERT_SERVER_OCSP_RESPONSE_CONTEXT {
+    DWORD cbSize;
+    BYTE *pbEncodedOcspResponse;
+    DWORD cbEncodedOcspResponse;
   };
-  CERT_HASHED_URL HashedUrl;
-} CERT_BIOMETRIC_DATA, *PCERT_BIOMETRIC_DATA;
 
-typedef struct _CERT_BIOMETRIC_EXT_INFO {
-  DWORD                cBiometricData;
-  PCERT_BIOMETRIC_DATA rgBiometricData;
-} CERT_BIOMETRIC_EXT_INFO, *PCERT_BIOMETRIC_EXT_INFO;
-
-typedef struct _CERT_ECC_SIGNATURE {
-  CRYPT_UINT_BLOB r;
-  CRYPT_UINT_BLOB s;
-} CERT_ECC_SIGNATURE, *PCERT_ECC_SIGNATURE;
-
-typedef struct _CERT_LOGOTYPE_DETAILS {
-  LPWSTR           pwszMimeType;
-  DWORD            cHashedUrl;
-  PCERT_HASHED_URL rgHashedUrl;
-} CERT_LOGOTYPE_DETAILS, *PCERT_LOGOTYPE_DETAILS;
-
-typedef struct _CERT_LOGOTYPE_AUDIO_INFO {
-  DWORD  dwFileSize;
-  DWORD  dwPlayTime;
-  DWORD  dwChannels;
-  DWORD  dwSampleRate;
-  LPWSTR pwszLanguage;
-} CERT_LOGOTYPE_AUDIO_INFO, *PCERT_LOGOTYPE_AUDIO_INFO;
-
-typedef struct _CERT_LOGOTYPE_AUDIO {
-  CERT_LOGOTYPE_DETAILS     LogotypeDetails;
-  PCERT_LOGOTYPE_AUDIO_INFO pLogotypeAudioInfo;
-} CERT_LOGOTYPE_AUDIO, *PCERT_LOGOTYPE_AUDIO;
-
-typedef struct _CERT_LOGOTYPE_IMAGE_INFO {
-  DWORD  dwLogotypeImageInfoChoice;
-  DWORD  dwFileSize;
-  DWORD  dwXSize;
-  DWORD  dwYSize;
-  DWORD  dwLogotypeImageResolutionChoice;
-  __C89_NAMELESS union {
-    DWORD dwNumBits;
-    DWORD dwTableSize;
-  };
-  LPWSTR pwszLanguage;
-} CERT_LOGOTYPE_IMAGE_INFO, *PCERT_LOGOTYPE_IMAGE_INFO;
-
-typedef struct _CERT_LOGOTYPE_IMAGE {
-  CERT_LOGOTYPE_DETAILS     LogotypeDetails;
-  PCERT_LOGOTYPE_IMAGE_INFO pLogotypeImageInfo;
-} CERT_LOGOTYPE_IMAGE, *PCERT_LOGOTYPE_IMAGE;
-
-typedef struct _CERT_LOGOTYPE_DATA {
-  DWORD                cLogotypeImage;
-  PCERT_LOGOTYPE_IMAGE rgLogotypeImage;
-  DWORD                cLogotypeAudio;
-  PCERT_LOGOTYPE_AUDIO rgLogotypeAudio;
-} CERT_LOGOTYPE_DATA, *PCERT_LOGOTYPE_DATA;
-
-typedef struct _CERT_LOGOTYPE_REFERENCE {
-  DWORD            cHashedUrl;
-  PCERT_HASHED_URL rgHashedUrl;
-} CERT_LOGOTYPE_REFERENCE, *PCERT_LOGOTYPE_REFERENCE;
-
-typedef struct _CERT_LOGOTYPE_INFO {
-  DWORD dwLogotypeInfoChoice;
-  __C89_NAMELESS union {
-    PCERT_LOGOTYPE_DATA      pLogotypeDirectInfo;
-    PCERT_LOGOTYPE_REFERENCE pLogotypeIndirectInfo;
-  } ;
-} CERT_LOGOTYPE_INFO, *PCERT_LOGOTYPE_INFO;
-
-typedef struct _CERT_OTHER_LOGOTYPE_INFO {
-  LPSTR              pszObjId;
-  CERT_LOGOTYPE_INFO LogotypeInfo;
-} CERT_OTHER_LOGOTYPE_INFO, *PCERT_OTHER_LOGOTYPE_INFO;
-
-typedef struct _CERT_LOGOTYPE_EXT_INFO {
-  DWORD                     cCommunityLogo;
-  PCERT_LOGOTYPE_INFO       rgCommunityLogo;
-  PCERT_LOGOTYPE_INFO       pIssuerLogo;
-  PCERT_LOGOTYPE_INFO       pSubjectLogo;
-  DWORD                     cOtherLogo;
-  PCERT_OTHER_LOGOTYPE_INFO rgOtherLogo;
-} CERT_LOGOTYPE_EXT_INFO, *PCERT_LOGOTYPE_EXT_INFO;
-
-typedef struct _CERT_QC_STATEMENT {
-  LPSTR            pszStatementId;
-  CRYPT_OBJID_BLOB StatementInfo;
-} CERT_QC_STATEMENT, *PCERT_QC_STATEMENT;
-
-typedef struct _CERT_QC_STATEMENTS_EXT_INFO {
-  DWORD              cStatement;
-  PCERT_QC_STATEMENT rgStatement;
-} CERT_QC_STATEMENTS_EXT_INFO, *PCERT_QC_STATEMENTS_EXT_INFO;
-
-typedef struct _CERT_REVOCATION_CHAIN_PARA {
-  DWORD            cbSize;
-  HCERTCHAINENGINE hChainEngine;
-  HCERTSTORE       hAdditionalStore;
-  DWORD            dwChainFlags;
-  DWORD            dwUrlRetrievalTimeout;
-  LPFILETIME       pftCurrentTime;
-  LPFILETIME       pftCacheResync;
-  DWORD            cbMaxUrlRetrievalByteCount;
-} CERT_REVOCATION_CHAIN_PARA, *PCERT_REVOCATION_CHAIN_PARA;
-
-typedef struct _CERT_SERVER_OCSP_RESPONSE_CONTEXT {
-  DWORD cbSize;
-  BYTE  *pbEncodedOcspResponse;
-  DWORD cbEncodedOcspResponse;
-} CERT_SERVER_OCSP_RESPONSE_CONTEXT, *PCERT_SERVER_OCSP_RESPONSE_CONTEXT, *PCCERT_SERVER_OCSP_RESPONSE_CONTEXT;
-
-#ifndef __NCRYPT_KEY_HANDLE__
-#define __NCRYPT_KEY_HANDLE__
-/*in ncrypt.h too*/
-typedef ULONG_PTR NCRYPT_KEY_HANDLE;
+  WINIMPM PCCERT_SERVER_OCSP_RESPONSE_CONTEXT WINAPI CertGetServerOcspResponseContext (HCERT_SERVER_OCSP_RESPONSE hServerOcspResponse, DWORD dwFlags, LPVOID pvReserved);
+  WINIMPM VOID WINAPI CertAddRefServerOcspResponseContext (PCCERT_SERVER_OCSP_RESPONSE_CONTEXT pServerOcspResponseContext);
+  WINIMPM VOID WINAPI CertFreeServerOcspResponseContext (PCCERT_SERVER_OCSP_RESPONSE_CONTEXT pServerOcspResponseContext);
 #endif
+  WINIMPM WINBOOL WINAPI CertRetrieveLogoOrBiometricInfo (PCCERT_CONTEXT pCertContext, LPCSTR lpszLogoOrBiometricType, DWORD dwRetrievalFlags, DWORD dwTimeout, DWORD dwFlags, void *pvReserved, BYTE **ppbData, DWORD *pcbData, LPWSTR *ppwszMimeType);
 
-#ifndef __HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_DEFINED__
-#define __HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_DEFINED__
-/*Also in cryptxml.h*/
-typedef ULONG_PTR HCRYPTPROV_OR_NCRYPT_KEY_HANDLE;
-#endif /*__HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_DEFINED__*/
+#define CERT_RETRIEVE_ISSUER_LOGO ((LPCSTR) 1)
+#define CERT_RETRIEVE_SUBJECT_LOGO ((LPCSTR) 2)
+#define CERT_RETRIEVE_COMMUNITY_LOGO ((LPCSTR) 3)
 
-typedef struct _CMSG_CNG_CONTENT_DECRYPT_INFO {
-  DWORD                      cbSize;
-  CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
-  PFN_CMSG_ALLOC             pfnAlloc;
-  PFN_CMSG_FREE              pfnFree;
-  NCRYPT_KEY_HANDLE          hNCryptKey;
-  BYTE                       *pbContentEncryptKey;
-  DWORD                      cbContentEncryptKey;
-  BCRYPT_KEY_HANDLE          hCNGContentEncryptKey;
-  BYTE                       *pbCNGContentEncryptKeyObject;
-} CMSG_CNG_CONTENT_DECRYPT_INFO, *PCMSG_CNG_CONTENT_DECRYPT_INFO;
+#define CERT_RETRIEVE_BIOMETRIC_PREDEFINED_BASE_TYPE ((LPCSTR) 1000)
 
-typedef struct _CRYPT_AES_128_KEY_STATE {
-  unsigned char Key[16];
-  unsigned char IV[16];
-  unsigned char EncryptionState[11][16];
-  unsigned char DecryptionState[11][16];
-  unsigned char Feedback[16];
-} CRYPT_AES_128_KEY_STATE, *PCRYPT_AES_128_KEY_STATE;
+#define CERT_RETRIEVE_BIOMETRIC_PICTURE_TYPE (CERT_RETRIEVE_BIOMETRIC_PREDEFINED_BASE_TYPE + CERT_BIOMETRIC_PICTURE_TYPE)
+#define CERT_RETRIEVE_BIOMETRIC_SIGNATURE_TYPE (CERT_RETRIEVE_BIOMETRIC_PREDEFINED_BASE_TYPE + CERT_BIOMETRIC_SIGNATURE_TYPE)
 
-typedef struct _CRYPT_AES_256_KEY_STATE {
-  unsigned char Key[32];
-  unsigned char IV[16];
-  unsigned char EncryptionState[15][16];
-  unsigned char DecryptionState[15][16];
-  unsigned char Feedback[16];
-} CRYPT_AES_256_KEY_STATE, *PCRYPT_AES_256_KEY_STATE;
+#if NTDDI_VERSION >= 0x06010000
+  typedef struct _CERT_SELECT_CHAIN_PARA {
+    HCERTCHAINENGINE hChainEngine;
+    PFILETIME pTime;
+    HCERTSTORE hAdditionalStore;
+    PCERT_CHAIN_PARA pChainPara;
+    DWORD dwFlags;
+  } CERT_SELECT_CHAIN_PARA,*PCERT_SELECT_CHAIN_PARA;
 
-typedef struct _ROOT_INFO_LUID {
-  DWORD LowPart;
-  LONG  HighPart;
-} ROOT_INFO_LUID, *PROOT_INFO_LUID;
+  typedef const CERT_SELECT_CHAIN_PARA *PCCERT_SELECT_CHAIN_PARA;
 
-WINCRYPT32API VOID WINAPI CertAddRefServerOcspResponse(HCERT_SERVER_OCSP_RESPONSE hServerOcspResponse);
-HCERT_SERVER_OCSP_RESPONSE WINAPI CertOpenServerOcspResponse(
-  PCCERT_CHAIN_CONTEXT pChainContext,
-  DWORD dwFlags,
-  LPVOID pvReserved
-);
+#define CERT_SELECT_MAX_PARA 500
 
-VOID WINAPI CertAddRefServerOcspResponseContext(
-  PCCERT_SERVER_OCSP_RESPONSE_CONTEXT pServerOcspResponseContext
-);
+  typedef struct _CERT_SELECT_CRITERIA {
+    DWORD dwType;
+    DWORD cPara;
+    void **ppPara;
+  } CERT_SELECT_CRITERIA,*PCERT_SELECT_CRITERIA;
 
-VOID WINAPI CertCloseServerOcspResponse(
-  HCERT_SERVER_OCSP_RESPONSE hServerOcspResponse,
-  DWORD dwFlags
-);
-
-VOID WINAPI CertFreeServerOcspResponseContext(
-  PCCERT_SERVER_OCSP_RESPONSE_CONTEXT pServerOcspResponseContext
-);
-
-PCCERT_SERVER_OCSP_RESPONSE_CONTEXT WINAPI CertGetServerOcspResponseContext(
-  HCERT_SERVER_OCSP_RESPONSE hServerOcspResponse,
-  DWORD dwFlags,
-  LPVOID pvReserved
-);
-
-WINBOOL WINAPI CertRetrieveLogoOrBiometricInfo(
-  PCCERT_CONTEXT pCertContext,
-  LPCSTR lpszLogoOrBiometricType,
-  DWORD dwRetrievalFlags,
-  DWORD dwTimeout,
-  DWORD dwFlags,
-  void *pvReserved,
-  BYTE **ppbData,
-  DWORD *pcbData,
-  LPWSTR *ppwszMimeType
-);
-
-typedef WINBOOL ( WINAPI *PFN_CMSG_CNG_IMPORT_KEY_TRANS )(
-  PCMSG_CNG_CONTENT_DECRYPT_INFO pCNGContentDecryptInfo,
-  PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara,
-  DWORD dwFlags,
-  void *pvReserved
-);
-
-typedef WINBOOL ( WINAPI *PFN_CMSG_CNG_IMPORT_KEY_AGREE )(
-  PCMSG_CNG_CONTENT_DECRYPT_INFO pCNGContentDecryptInfo,
-  PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA pKeyAgreeDecryptPara,
-  DWORD dwFlags,
-  void *pvReserved
-);
-
-typedef WINBOOL ( WINAPI *PFN_CMSG_CNG_IMPORT_CONTENT_ENCRYPT_KEY )(
-  PCMSG_CNG_CONTENT_DECRYPT_INFO pCNGContentDecryptInfo,
-  DWORD dwFlags,
-  void *pvReserved
-);
-
-#define CMSG_OID_CNG_IMPORT_KEY_TRANS_FUNC "CryptMsgDllCNGImportKeyTrans"
-
-#define CRYPT_ECC_CMS_SHARED_INFO_SUPPPUBINFO_BYTE_LENGTH 4
-
-typedef struct _CRYPT_ECC_CMS_SHARED_INFO {
-  CRYPT_ALGORITHM_IDENTIFIER Algorithm;
-  CRYPT_DATA_BLOB            EntityUInfo;
-  BYTE                       rgbSuppPubInfo[CRYPT_ECC_CMS_SHARED_INFO_SUPPPUBINFO_BYTE_LENGTH];
-} CRYPT_ECC_CMS_SHARED_INFO, *PCRYPT_ECC_CMS_SHARED_INFO;
-
-typedef struct _CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO {
-  DWORD                       cbSize;
-  int                         iDeltaCrlIndicator;
-  LPFILETIME                  pftCacheResync;
-  LPFILETIME                  pLastSyncTime;
-  LPFILETIME                  pMaxAgeTime;
-  PCERT_REVOCATION_CHAIN_PARA pChainPara;
-  PCRYPT_INTEGER_BLOB         pDeltaCrlIndicator;
-} CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO, *PCRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO;
-
-#define szOID_RSA_MGF1 "1.2.840.113549.1.1.8"
-
-typedef struct _CRYPT_MASK_GEN_ALGORITHM {
-  LPSTR                      pszObjId;
-  CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
-} CRYPT_MASK_GEN_ALGORITHM, *PCRYPT_MASK_GEN_ALGORITHM;
-
-typedef struct _CRYPT_PKCS12_PBE_PARAMS {
-  int   iIterations;
-  ULONG cbSalt;
-} CRYPT_PKCS12_PBE_PARAMS;
-
-#define szOID_RSA_PSPECIFIED "1.2.840.113549.1.1.9"
-
-typedef struct _CRYPT_PSOURCE_ALGORITHM {
-  LPSTR           pszObjId;
-  CRYPT_DATA_BLOB EncodingParameters;
-} CRYPT_PSOURCE_ALGORITHM, *PCRYPT_PSOURCE_ALGORITHM;
-
-typedef struct _CRYPT_RSA_SSA_PSS_PARAMETERS {
-  CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
-  CRYPT_MASK_GEN_ALGORITHM   MaskGenAlgorithm;
-  DWORD                      dwSaltLength;
-  DWORD                      dwTrailerField;
-} CRYPT_RSA_SSA_PSS_PARAMETERS, *PCRYPT_RSA_SSA_PSS_PARAMETERS;
-
-typedef struct _CRYPT_RSAES_OAEP_PARAMETERS {
-  CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
-  CRYPT_MASK_GEN_ALGORITHM   MaskGenAlgorithm;
-  CRYPT_PSOURCE_ALGORITHM    PSourceAlgorithm;
-} CRYPT_RSAES_OAEP_PARAMETERS, *PCRYPT_RSAES_OAEP_PARAMETERS;
-
-typedef struct _CRYPT_SMART_CARD_ROOT_INFO {
-  BYTE           rgbCardID[16];
-  ROOT_INFO_LUID luid;
-} CRYPT_SMART_CARD_ROOT_INFO, *PCRYPT_SMART_CARD_ROOT_INFO;
-
-#define CRYPTNET_URL_CACHE_DEFAULT_FLUSH 0
-#define CRYPTNET_URL_CACHE_DISABLE_FLUSH 0xFFFFFFFF
-
-typedef struct _CRYPTNET_URL_CACHE_FLUSH_INFO {
-  DWORD    cbSize;
-  DWORD    dwExemptSeconds;
-  FILETIME ExpireTime;
-} CRYPTNET_URL_CACHE_FLUSH_INFO, *PCRYPTNET_URL_CACHE_FLUSH_INFO;
-
-#define CRYPTNET_URL_CACHE_PRE_FETCH_NONE 0
-#define CRYPTNET_URL_CACHE_PRE_FETCH_BLOB 1
-#define CRYPTNET_URL_CACHE_PRE_FETCH_CRL 2
-#define CRYPTNET_URL_CACHE_PRE_FETCH_OCSP 3
-#define CRYPTNET_URL_CACHE_PRE_FETCH_AUTOROOT_CAB 5
-#define szOID_CRL_NEXT_PUBLISH "1.3.6.1.4.1.311.21.4"
-
-typedef struct _CRYPTNET_URL_CACHE_PRE_FETCH_INFO {
-  DWORD    cbSize;
-  DWORD    dwObjectType;
-  DWORD    dwError;
-  DWORD    dwReserved;
-  FILETIME ThisUpdateTime;
-  FILETIME NextUpdateTime;
-  FILETIME PublishTime;
-} CRYPTNET_URL_CACHE_PRE_FETCH_INFO, *PCRYPTNET_URL_CACHE_PRE_FETCH_INFO;
-
-#define CRYPTNET_URL_CACHE_RESPONSE_NONE 0
-#define CRYPTNET_URL_CACHE_RESPONSE_HTTP 1
-#define CRYPTNET_URL_CACHE_RESPONSE_VALIDATED 0x8000
-
-typedef struct _CRYPTNET_URL_CACHE_RESPONSE_INFO {
-  DWORD    cbSize;
-  WORD     wResponseType;
-  WORD     wResponseFlags;
-  FILETIME LastModifiedTime;
-  DWORD    dwMaxAge;
-  LPCWSTR  pwszETag;
-  DWORD    dwProxyId;
-} CRYPTNET_URL_CACHE_RESPONSE_INFO, *PCRYPTNET_URL_CACHE_RESPONSE_INFO;
-
-typedef struct _OCSP_CERT_ID {
-  CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
-  CRYPT_HASH_BLOB            IssuerNameHash;
-  CRYPT_HASH_BLOB            IssuerKeyHash;
-  CRYPT_INTEGER_BLOB         SerialNumber;
-} OCSP_CERT_ID, *POCSP_CERT_ID;
-
-
-typedef struct _OCSP_BASIC_REVOKED_INFO {
-  FILETIME RevocationDate;
-  DWORD    dwCrlReasonCode;
-} OCSP_BASIC_REVOKED_INFO, *POCSP_BASIC_REVOKED_INFO;
-
-typedef struct _OCSP_BASIC_RESPONSE_ENTRY {
-  OCSP_CERT_ID    CertId;
-  DWORD           dwCertStatus;
-  __C89_NAMELESS union {
-    POCSP_BASIC_REVOKED_INFO pRevokedInfo;
-  };
-  FILETIME        ThisUpdate;
-  FILETIME        NextUpdate;
-  DWORD           cExtension;
-  PCERT_EXTENSION rgExtension;
-} OCSP_BASIC_RESPONSE_ENTRY, *POCSP_BASIC_RESPONSE_ENTRY;
-
-typedef struct _OCSP_BASIC_RESPONSE_INFO {
-  DWORD                      dwVersion;
-  DWORD                      dwResponderIdChoice;
-  __C89_NAMELESS union {
-    CERT_NAME_BLOB  ByNameResponderId;
-    CRYPT_HASH_BLOB ByKeyResponderId;
-  };
-  FILETIME                   ProducedAt;
-  DWORD                      cResponseEntry;
-  POCSP_BASIC_RESPONSE_ENTRY rgResponseEntry;
-  DWORD                      cExtension;
-  PCERT_EXTENSION            rgExtension;
-} OCSP_BASIC_RESPONSE_INFO, *POCSP_BASIC_RESPONSE_INFO;
-
-typedef struct _OCSP_REQUEST_ENTRY {
-  OCSP_CERT_ID    CertId;
-  DWORD           cExtension;
-  PCERT_EXTENSION rgExtension;
-} OCSP_REQUEST_ENTRY, *POCSP_REQUEST_ENTRY;
-
-typedef struct _OCSP_REQUEST_INFO {
-  DWORD                dwVersion;
-  PCERT_ALT_NAME_ENTRY pRequestorName;
-  DWORD                cRequestEntry;
-  POCSP_REQUEST_ENTRY  rgRequestEntry;
-  DWORD                cExtension;
-  PCERT_EXTENSION      rgExtension;
-} OCSP_REQUEST_INFO, *POCSP_REQUEST_INFO;
-
-#define OCSP_SUCCESSFUL_RESPONSE 0
-#define OCSP_MALFORMED_REQUEST_RESPONSE 1
-#define OCSP_INTERNAL_ERROR_RESPONSE 2
-#define OCSP_TRY_LATER_RESPONSE 3
-#define OCSP_SIG_REQUIRED_RESPONSE 5
-#define OCSP_UNAUTHORIZED_RESPONSE 6
-
-typedef struct _OCSP_RESPONSE_INFO {
-  DWORD            dwStatus;
-  LPSTR            pszObjId;
-  CRYPT_OBJID_BLOB Value;
-} OCSP_RESPONSE_INFO, *POCSP_RESPONSE_INFO;
-
-typedef struct _OCSP_SIGNATURE_INFO {
-  CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
-  CRYPT_BIT_BLOB             Signature;
-  DWORD                      cCertEncoded;
-  PCERT_BLOB                 rgCertEncoded;
-} OCSP_SIGNATURE_INFO, *POCSP_SIGNATURE_INFO;
-
-typedef struct _OCSP_BASIC_SIGNED_RESPONSE_INFO {
-  CRYPT_DER_BLOB      ToBeSigned;
-  OCSP_SIGNATURE_INFO SignatureInfo;
-} OCSP_BASIC_SIGNED_RESPONSE_INFO, *POCSP_BASIC_SIGNED_RESPONSE_INFO;
-
-typedef struct _OCSP_SIGNED_REQUEST_INFO {
-  CRYPT_DER_BLOB       ToBeSigned;
-  POCSP_SIGNATURE_INFO pOptionalSignatureInfo;
-} OCSP_SIGNED_REQUEST_INFO, *POCSP_SIGNED_REQUEST_INFO;
-
-WINCRYPT32API WINBOOL WINAPI CryptHashCertificate2(
-  LPCWSTR pwszCNGHashAlgid,
-  DWORD dwFlags,
-  void *pvReserved,
-  BYTE *pbEncoded,
-  DWORD cbEncoded,
-  BYTE *pbComputedHash,
-  DWORD *pcbComputedHash
-);
-
-WINCRYPT32API WINBOOL WINAPI CryptImportPublicKeyInfoEx2(
-  DWORD dwCertEncodingType,
-  PCERT_PUBLIC_KEY_INFO pInfo,
-  DWORD dwFlags,
-  void *pvAuxInfo,
-  BCRYPT_KEY_HANDLE *phKey
-);
-
-WINCRYPT32API WINBOOL WINAPI CryptUpdateProtectedState(
-  PSID pOldSid,
-  LPCWSTR pwszOldPassword,
-  DWORD dwFlags,
-  DWORD *pdwSuccessCount,
-  DWORD *pdwFailureCount
-);
-
-#endif /*(_WIN32_WINNT >= 0x0600)*/
-
-#if (_WIN32_WINNT >= 0x0601)
-#define CERT_BUNDLE_CERTIFICATE 0
-#define CERT_BUNDLE_CRL 1
-
-typedef struct _CERT_OR_CRL_BLOB {
-  DWORD                    dwChoice;
-  DWORD                    cbEncoded;
-  BYTE                     *pbEncoded;
-} CERT_OR_CRL_BLOB, *PCERT_OR_CRL_BLOB;
-
-typedef struct _CERT_OR_CRL_BUNDLE {
-  DWORD             cItem;
-  PCERT_OR_CRL_BLOB rgItem;
-} CERT_OR_CRL_BUNDLE, *PCERT_OR_CRL_BUNDLE;
-
-typedef struct _CERT_SELECT_CHAIN_PARA {
-  HCERTCHAINENGINE hChainEngine;
-  PFILETIME        pTime;
-  HCERTSTORE       hAdditionalStore;
-  PCERT_CHAIN_PARA pChainPara;
-  DWORD            dwFlags;
-} CERT_SELECT_CHAIN_PARA, *PCERT_SELECT_CHAIN_PARA;
-typedef const CERT_SELECT_CHAIN_PARA *PCCERT_SELECT_CHAIN_PARA;
-
-#define CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY 0x80000000
-
-typedef struct _CERT_SELECT_CRITERIA {
-  DWORD dwType;
-  DWORD cPara;
-  void  **ppPara;
-} CERT_SELECT_CRITERIA, *PCERT_SELECT_CRITERIA;
-typedef const CERT_SELECT_CRITERIA *PCCERT_SELECT_CRITERIA;
+  typedef const CERT_SELECT_CRITERIA *PCCERT_SELECT_CRITERIA;
 
 #define CERT_SELECT_BY_ENHKEY_USAGE 1
 #define CERT_SELECT_BY_KEY_USAGE 2
@@ -4805,61 +5283,43 @@
 #define CERT_SELECT_BY_PUBLIC_KEY 10
 #define CERT_SELECT_BY_TLS_SIGNATURES 11
 
-typedef struct _CRYPT_TIMESTAMP_ACCURACY {
-  DWORD dwSeconds;
-  DWORD dwMillis;
-  DWORD dwMicros;
-} CRYPT_TIMESTAMP_ACCURACY, *PCRYPT_TIMESTAMP_ACCURACY;
+#define CERT_SELECT_LAST CERT_SELECT_BY_TLS_SIGNATURES
+#define CERT_SELECT_MAX (CERT_SELECT_LAST *3)
 
-typedef struct _CRYPT_TIMESTAMP_REQUEST {
-  DWORD                      dwVersion;
-  CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
-  CRYPT_DER_BLOB             HashedMessage;
-  LPSTR                      pszTSAPolicyId;
-  CRYPT_INTEGER_BLOB         Nonce;
-  WINBOOL                    fCertReq;
-  DWORD                      cExtension;
-  PCERT_EXTENSION            rgExtension;
-} CRYPT_TIMESTAMP_REQUEST, *PCRYPT_TIMESTAMP_REQUEST;
+#define CERT_SELECT_ALLOW_EXPIRED 0x1
+#define CERT_SELECT_TRUSTED_ROOT 0x2
+#define CERT_SELECT_DISALLOW_SELFSIGNED 0x4
+#define CERT_SELECT_HAS_PRIVATE_KEY 0x8
+#define CERT_SELECT_HAS_KEY_FOR_SIGNATURE 0x10
+#define CERT_SELECT_HAS_KEY_FOR_KEY_EXCHANGE 0x20
+#define CERT_SELECT_HARDWARE_ONLY 0x40
+#define CERT_SELECT_ALLOW_DUPLICATES 0x80
 
-typedef struct _CRYPT_TIMESTAMP_INFO {
-  DWORD                      dwVersion;
-  LPSTR                      pszTSAPolicyId;
-  CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
-  CRYPT_DER_BLOB             HashedMessage;
-  CRYPT_INTEGER_BLOB         SerialNumber;
-  FILETIME                   ftTime;
-  PCRYPT_TIMESTAMP_ACCURACY  pvAccuracy;
-  WINBOOL                    fOrdering;
-  CRYPT_DER_BLOB             Nonce;
-  CRYPT_DER_BLOB             Tsa;
-  DWORD                      cExtension;
-  PCERT_EXTENSION            rgExtension;
-} CRYPT_TIMESTAMP_INFO, *PCRYPT_TIMESTAMP_INFO;
+  WINIMPM WINBOOL WINAPI CertSelectCertificateChains (LPCGUID pSelectionContext, DWORD dwFlags, PCCERT_SELECT_CHAIN_PARA pChainParameters, DWORD cCriteria, PCCERT_SELECT_CRITERIA rgpCriteria, HCERTSTORE hStore, PDWORD pcSelection, PCCERT_CHAIN_CONTEXT **pprgpSelection);
+  WINIMPM VOID WINAPI CertFreeCertificateChainList (PCCERT_CHAIN_CONTEXT *prgpSelection);
+#endif
 
-typedef struct _CRYPT_TIMESTAMP_PARA {
-  LPCSTR             pszTSAPolicyId;
-  WINBOOL            fRequestCerts;
-  CRYPT_INTEGER_BLOB Nonce;
-  DWORD              cExtension;
-  PCERT_EXTENSION    rgExtension;
-} CRYPT_TIMESTAMP_PARA, *PCRYPT_TIMESTAMP_PARA;
-
+#if NTDDI_VERSION >= 0x06010000
 #define TIMESTAMP_VERSION 1
 
-typedef struct _CRYPT_TIMESTAMP_CONTEXT {
-  DWORD                 cbEncoded;
-  BYTE                  *pbEncoded;
-  PCRYPT_TIMESTAMP_INFO pTimeStamp;
-} CRYPT_TIMESTAMP_CONTEXT, *PCRYPT_TIMESTAMP_CONTEXT;
+  typedef struct _CRYPT_TIMESTAMP_REQUEST {
+    DWORD dwVersion;
+    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+    CRYPT_DER_BLOB HashedMessage;
+    LPSTR pszTSAPolicyId;
+    CRYPT_INTEGER_BLOB Nonce;
+    WINBOOL fCertReq;
+    DWORD cExtension;
+    PCERT_EXTENSION rgExtension;
+  } CRYPT_TIMESTAMP_REQUEST,*PCRYPT_TIMESTAMP_REQUEST;
 
-typedef struct _CRYPT_TIMESTAMP_RESPONSE {
-  DWORD          dwStatus;
-  DWORD          cFreeText;
-  LPWSTR         rgFreeText;
-  CRYPT_BIT_BLOB FailureInfo;
-  CRYPT_DER_BLOB ContentInfo;
-} CRYPT_TIMESTAMP_RESPONSE, *PCRYPT_TIMESTAMP_RESPONSE;
+  typedef struct _CRYPT_TIMESTAMP_RESPONSE {
+    DWORD dwStatus;
+    DWORD cFreeText;
+    LPWSTR *rgFreeText;
+    CRYPT_BIT_BLOB FailureInfo;
+    CRYPT_DER_BLOB ContentInfo;
+  } CRYPT_TIMESTAMP_RESPONSE,*PCRYPT_TIMESTAMP_RESPONSE;
 
 #define TIMESTAMP_STATUS_GRANTED 0
 #define TIMESTAMP_STATUS_GRANTED_WITH_MODS 1
@@ -4877,66 +5337,94 @@
 #define TIMESTAMP_FAILURE_INFO_NOT_AVAILABLE 17
 #define TIMESTAMP_FAILURE_SYSTEM_FAILURE 25
 
-WINCRYPT32API VOID WINAPI CertFreeCertificateChainList(
-  PCCERT_CHAIN_CONTEXT *prgpSelection
-);
+  typedef struct _CRYPT_TIMESTAMP_ACCURACY {
+    DWORD dwSeconds;
+    DWORD dwMillis;
+    DWORD dwMicros;
+  } CRYPT_TIMESTAMP_ACCURACY,*PCRYPT_TIMESTAMP_ACCURACY;
 
-WINCRYPT32API WINBOOL WINAPI CertSelectCertificateChains(
-  LPCGUID pSelectionContext,
-  DWORD dwFlags,
-  PCCERT_SELECT_CHAIN_PARA pChainParameters,
-  DWORD cCriteria,
-  PCCERT_SELECT_CRITERIA rgpCriteria,
-  HCERTSTORE hStore,
-  PDWORD pcSelection,
-  PCCERT_CHAIN_CONTEXT **pprgpSelection
-);
+  typedef struct _CRYPT_TIMESTAMP_INFO {
+    DWORD dwVersion;
+    LPSTR pszTSAPolicyId;
+    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+    CRYPT_DER_BLOB HashedMessage;
+    CRYPT_INTEGER_BLOB SerialNumber;
+    FILETIME ftTime;
+    PCRYPT_TIMESTAMP_ACCURACY pvAccuracy;
+    WINBOOL fOrdering;
+    CRYPT_DER_BLOB Nonce;
+    CRYPT_DER_BLOB Tsa;
+    DWORD cExtension;
+    PCERT_EXTENSION rgExtension;
+  } CRYPT_TIMESTAMP_INFO,*PCRYPT_TIMESTAMP_INFO;
 
-WINCRYPT32API WINBOOL WINAPI CryptExportPublicKeyInfoFromBCryptKeyHandle(
-  BCRYPT_KEY_HANDLE hBCryptKey,
-  DWORD dwCertEncodingType,
-  LPSTR pszPublicKeyObjId,
-  DWORD dwFlags,
-  PVOID pvAuxInfo,
-  PCERT_PUBLIC_KEY_INFO pInfo,
-  DWORD pcbInfo
-);
+  typedef struct _CRYPT_TIMESTAMP_CONTEXT {
+    DWORD cbEncoded;
+    BYTE *pbEncoded;
+    PCRYPT_TIMESTAMP_INFO pTimeStamp;
+  } CRYPT_TIMESTAMP_CONTEXT,*PCRYPT_TIMESTAMP_CONTEXT;
 
-#define CRYPT_OID_INFO_PUBKEY_ENCRYPT_KEY_FLAG 0x40000000
-#define CRYPT_OID_INFO_PUBKEY_SIGN_KEY_FLAG 0x80000000
+  typedef struct _CRYPT_TIMESTAMP_PARA {
+    LPCSTR pszTSAPolicyId;
+    WINBOOL fRequestCerts;
+    CRYPT_INTEGER_BLOB Nonce;
+    DWORD cExtension;
+    PCERT_EXTENSION rgExtension;
+  } CRYPT_TIMESTAMP_PARA,*PCRYPT_TIMESTAMP_PARA;
 
-WINCRYPT32API WINBOOL WINAPI CryptRetrieveTimeStamp(
-  LPCWSTR wszUrl,
-  DWORD dwRetrievalFlags,
-  DWORD dwTimeout,
-  LPCSTR pszHashId,
-  const CRYPT_TIMESTAMP_PARA *pPara,
-  const BYTE *pbData,
-  DWORD cbData,
-  PCRYPT_TIMESTAMP_CONTEXT *ppTsContext,
-  PCCERT_CONTEXT *ppTsSigner,
-  HCERTSTORE phStore
-);
+  WINBOOL WINAPI CryptRetrieveTimeStamp (LPCWSTR wszUrl, DWORD dwRetrievalFlags, DWORD dwTimeout, LPCSTR pszHashId, const CRYPT_TIMESTAMP_PARA *pPara, const BYTE *pbData, DWORD cbData, PCRYPT_TIMESTAMP_CONTEXT *ppTsContext, PCCERT_CONTEXT *ppTsSigner, HCERTSTORE *phStore);
 
-#define TIMESTAMP_DONT_HASH_DATA 0x00000001
-#define TIMESTAMP_VERIFY_CONTEXT_SIGNATURE 0x00000020
-#define TIMESTAMP_NO_AUTH_RETRIEVAL 0x00020000
+#define TIMESTAMP_DONT_HASH_DATA 0x1
+#define TIMESTAMP_VERIFY_CONTEXT_SIGNATURE 0x20
+#define TIMESTAMP_NO_AUTH_RETRIEVAL 0x20000
 
-WINCRYPT32API WINBOOL WINAPI CryptVerifyTimeStampSignature(
-  const BYTE pbTSContentInfo,
-  DWORD cbTSContentInfo,
-  const DWORD pbData,
-  DWORD cbData,
-  HCERTSTORE hAdditionalStore,
-  PCRYPT_TIMESTAMP_CONTEXT ppTsContext,
-  PCCERT_CONTEXT *ppTsSigner,
-  HCERTSTORE *phStore
-);
-#endif /*(_WIN32_WINNT >= 0x0601)*/
+  WINBOOL WINAPI CryptVerifyTimeStampSignature (const BYTE *pbTSContentInfo, DWORD cbTSContentInfo, const BYTE *pbData, DWORD cbData, HCERTSTORE hAdditionalStore, PCRYPT_TIMESTAMP_CONTEXT *ppTsContext, PCCERT_CONTEXT *ppTsSigner, HCERTSTORE *phStore);
+#endif
 
-#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
+#if NTDDI_VERSION >= 0x06020000
+#define CRYPT_OBJECT_LOCATOR_SPN_NAME_TYPE 1
+#define CRYPT_OBJECT_LOCATOR_LAST_RESERVED_NAME_TYPE 32
+#define CRYPT_OBJECT_LOCATOR_FIRST_RESERVED_USER_NAME_TYPE 33
+#define CRYPT_OBJECT_LOCATOR_LAST_RESERVED_USER_NAME_TYPE 0x0000ffff
+
+#define SSL_OBJECT_LOCATOR_PFX_FUNC "SslObjectLocatorInitializePfx"
+#define SSL_OBJECT_LOCATOR_ISSUER_LIST_FUNC "SslObjectLocatorInitializeIssuerList"
+#define SSL_OBJECT_LOCATOR_CERT_VALIDATION_CONFIG_FUNC "SslObjectLocatorInitializeCertValidationConfig"
+
+#define CRYPT_OBJECT_LOCATOR_RELEASE_SYSTEM_SHUTDOWN 1
+#define CRYPT_OBJECT_LOCATOR_RELEASE_SERVICE_STOP 2
+#define CRYPT_OBJECT_LOCATOR_RELEASE_PROCESS_EXIT 3
+#define CRYPT_OBJECT_LOCATOR_RELEASE_DLL_UNLOAD 4
+
+  typedef WINBOOL (WINAPI *PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FLUSH) (LPVOID pContext, PCERT_NAME_BLOB *rgIdentifierOrNameList, DWORD dwIdentifierOrNameListCount);
+  typedef WINBOOL (WINAPI *PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_GET) (LPVOID pPluginContext, PCRYPT_DATA_BLOB pIdentifier, DWORD dwNameType, PCERT_NAME_BLOB pNameBlob, PBYTE *ppbContent, DWORD *pcbContent, PCWSTR *ppwszPassword, PCRYPT_DATA_BLOB *ppIdentifier);
+  typedef void (WINAPI *PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_RELEASE) (DWORD dwReason, LPVOID pPluginContext);
+  typedef void (WINAPI *PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_PASSWORD) (LPVOID pPluginContext, PCWSTR pwszPassword);
+  typedef void (WINAPI *PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE) (LPVOID pPluginContext, PBYTE pbData);
+  typedef void (WINAPI *PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_IDENTIFIER) (LPVOID pPluginContext, PCRYPT_DATA_BLOB pIdentifier);
+
+  typedef struct _CRYPT_OBJECT_LOCATOR_PROVIDER_TABLE {
+    DWORD cbSize;
+    PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_GET pfnGet;
+    PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_RELEASE pfnRelease;
+    PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_PASSWORD pfnFreePassword;
+    PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE pfnFree;
+    PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_IDENTIFIER pfnFreeIdentifier;
+  } CRYPT_OBJECT_LOCATOR_PROVIDER_TABLE,*PCRYPT_OBJECT_LOCATOR_PROVIDER_TABLE;
+
+  typedef WINBOOL (WINAPI *PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_INITIALIZE) (PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FLUSH pfnFlush, LPVOID pContext, DWORD *pdwExpectedObjectCount, PCRYPT_OBJECT_LOCATOR_PROVIDER_TABLE *ppFuncTable, void **ppPluginContext);
+#endif
+#endif
+
+#endif
 
 #ifdef __cplusplus
 }
 #endif
-#endif /* __WINCRYPT_H__ */
+
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
+#ifndef _WINCRYPT_NO_DPAPI
+#include <dpapi.h>
+#endif
+#endif
+#endif
