21#define NONAMELESSUNION
30#include "wine/unicode.h"
77 if (
ret && contentType)
84 if (
ret && contentType)
91 if (
ret && contentType)
98 DWORD dwExpectedContentTypeFlags,
DWORD dwExpectedFormatTypeFlags,
99 DWORD *pdwMsgAndCertEncodingType,
DWORD *pdwContentType,
DWORD *pdwFormatType,
106 DWORD formatType = 0;
108 switch (dwObjectType)
159 dwExpectedContentTypeFlags, store, pdwContentType,
172 if (pdwMsgAndCertEncodingType)
175 *pdwFormatType = formatType;
180 if (
blob == &fileBlob)
187 const void *pvObject,
DWORD dwExpectedContentTypeFlags,
188 DWORD *pdwMsgAndCertEncodingType,
DWORD *pdwContentType,
198 switch (dwObjectType)
223 DWORD contentType, certStoreOffset;
232 if (!(dwExpectedContentTypeFlags &
244 if (!(dwExpectedContentTypeFlags &
256 if (!(dwExpectedContentTypeFlags &
269 if (pdwMsgAndCertEncodingType)
272 *pdwContentType = contentType;
284 if (contextInterface &&
context)
286 if (
blob == &fileBlob)
293 DWORD *pdwMsgAndCertEncodingType,
DWORD *pdwContentType,
310 if (pdwMsgAndCertEncodingType)
325 DWORD *pdwMsgAndCertEncodingType,
DWORD *pdwContentType,
337 if (pdwMsgAndCertEncodingType)
350 const void *pvObject,
DWORD *pdwMsgAndCertEncodingType,
DWORD *pdwContentType,
353 switch (dwObjectType)
357 pdwMsgAndCertEncodingType, pdwContentType, phCertStore, phMsg);
360 pdwMsgAndCertEncodingType, pdwContentType, phCertStore, phMsg);
362 FIXME(
"unimplemented for type %d\n", dwObjectType);
410 if (pdwMsgAndCertEncodingType)
411 *pdwMsgAndCertEncodingType = encodingType;
462 if (pdwMsgAndCertEncodingType)
463 *pdwMsgAndCertEncodingType = encodingType;
474 DWORD dwExpectedContentTypeFlags,
DWORD dwExpectedFormatTypeFlags,
475 DWORD *pdwMsgAndCertEncodingType,
DWORD *pdwContentType,
DWORD *pdwFormatType,
483 DWORD formatType = 0;
485 TRACE(
"(%d, %p, %08x, %08x, %p, %p, %p, %p, %p)\n", dwObjectType, pvObject,
486 dwExpectedContentTypeFlags, dwExpectedFormatTypeFlags,
487 pdwMsgAndCertEncodingType, pdwContentType, pdwFormatType, phCertStore,
490 switch (dwObjectType)
516 pdwContentType, &
msg);
521 pdwContentType, &
msg);
546 if (dwExpectedContentTypeFlags &
549 pdwMsgAndCertEncodingType, pdwContentType, &
msg);
551 if (!
ret && (dwExpectedContentTypeFlags &
554 pdwMsgAndCertEncodingType, pdwContentType, &
msg);
570 while (strLen && !
str[strLen - 1])
585 if (dwExpectedContentTypeFlags &
588 pdwMsgAndCertEncodingType, pdwContentType, &
msg);
590 if (!
ret && (dwExpectedContentTypeFlags &
593 pdwMsgAndCertEncodingType, pdwContentType, &
msg);
607 *pdwFormatType = formatType;
616 if (
blob == &fileBlob)
623 const void *pvObject,
DWORD dwExpectedContentTypeFlags,
624 DWORD *pdwMsgAndCertEncodingType,
DWORD *pdwContentType,
635 WARN(
"don't know what to do for type %d embedded signed messages\n",
649 memset(&sip, 0,
sizeof(sip));
658 memset(&subjectInfo, 0,
sizeof(subjectInfo));
659 subjectInfo.
cbSize =
sizeof(subjectInfo);
663 ret = sip.
pfGet(&subjectInfo, &encodingType, 0, &
blob.cbData,
670 ret = sip.
pfGet(&subjectInfo, &encodingType, 0,
678 pdwMsgAndCertEncodingType,
NULL,
NULL,
680 if (
ret && pdwContentType)
700 DWORD dwExpectedContentTypeFlags,
DWORD dwExpectedFormatTypeFlags,
705 static const DWORD unimplementedTypes =
710 TRACE(
"(%08x, %p, %08x, %08x, %08x, %p, %p, %p, %p, %p, %p)\n",
711 dwObjectType, pvObject, dwExpectedContentTypeFlags,
712 dwExpectedFormatTypeFlags,
dwFlags, pdwMsgAndCertEncodingType,
713 pdwContentType, pdwFormatType, phCertStore, phMsg,
ppvContext);
718 WARN(
"unsupported type %d\n", dwObjectType);
724 WARN(
"missing required argument\n");
728 if (dwExpectedContentTypeFlags & unimplementedTypes)
729 WARN(
"unimplemented for types %08x\n",
730 dwExpectedContentTypeFlags & unimplementedTypes);
747 dwExpectedContentTypeFlags, dwExpectedFormatTypeFlags,
748 pdwMsgAndCertEncodingType, pdwContentType, pdwFormatType, phCertStore,
755 pdwMsgAndCertEncodingType, pdwContentType, phCertStore, phMsg);
763 dwExpectedContentTypeFlags, pdwMsgAndCertEncodingType, pdwContentType,
771 dwExpectedContentTypeFlags, dwExpectedFormatTypeFlags,
772 pdwMsgAndCertEncodingType, pdwContentType, pdwFormatType,
779 dwExpectedContentTypeFlags, pdwMsgAndCertEncodingType, pdwContentType,
789 DWORD dwFormatType,
DWORD dwFormatStrType,
void *pFormatStruct,
797 bytesNeeded = (cbEncoded * 3) *
sizeof(
WCHAR);
799 bytesNeeded =
sizeof(
WCHAR);
802 *pcbFormat = bytesNeeded;
805 else if (*pcbFormat < bytesNeeded)
807 *pcbFormat = bytesNeeded;
813 static const WCHAR fmt[] = {
'%',
'0',
'2',
'x',
' ',0 };
814 static const WCHAR endFmt[] = {
'%',
'0',
'2',
'x',0 };
818 *pcbFormat = bytesNeeded;
821 for (
i = 0;
i < cbEncoded;
i++)
823 if (
i < cbEncoded - 1)
836#define MAX_STRING_RESOURCE_LEN 128
854 for (
i = 0;
i < mapEntries;
i++)
865 *pcbFormat = bytesNeeded;
867 else if (*pcbFormat < bytesNeeded)
870 *pcbFormat = bytesNeeded;
879 *pcbFormat = bytesNeeded;
880 for (
i = 0;
i < mapEntries;
i++)
913 DWORD dwFormatType,
DWORD dwFormatStrType,
void *pFormatStruct,
933 if (!
bits->cbData ||
bits->cbData > 2)
935 bytesNeeded +=
strlenW(infoNotAvailable) *
sizeof(
WCHAR);
937 *pcbFormat = bytesNeeded;
938 else if (*pcbFormat < bytesNeeded)
940 *pcbFormat = bytesNeeded;
948 *pcbFormat = bytesNeeded;
965 stringsLoaded =
TRUE;
969 bytesNeeded += bitStringLen;
970 if (
bits->cbData == 2)
974 bytesNeeded += bitStringLen;
976 bytesNeeded += 3 *
sizeof(
WCHAR);
981 *pcbFormat = bytesNeeded;
982 else if (*pcbFormat < bytesNeeded)
984 *pcbFormat = bytesNeeded;
992 bitStringLen = bytesNeeded;
996 str += bitStringLen /
sizeof(
WCHAR) - 1;
997 if (
bits->cbData == 2)
999 bitStringLen = bytesNeeded;
1002 str += bitStringLen /
sizeof(
WCHAR) - 1;
1026 DWORD dwFormatType,
DWORD dwFormatStrType,
void *pFormatStruct,
1042 static const WCHAR pathFmt[] = {
'%',
'd',0 };
1066 stringsLoaded =
TRUE;
1074 bytesNeeded += sepLen;
1076 if (
info->fPathLenConstraint)
1077 sprintfW(pathLength, pathFmt,
info->dwPathLenConstraint);
1082 *pcbFormat = bytesNeeded;
1083 else if (*pcbFormat < bytesNeeded)
1085 *pcbFormat = bytesNeeded;
1093 *pcbFormat = bytesNeeded;
1122 *pcbStr = bytesNeeded;
1125 else if (*pcbStr < bytesNeeded)
1127 *pcbStr = bytesNeeded;
1133 *pcbStr = bytesNeeded;
1165 WCHAR ipAddrBuf[32];
1172 switch (
entry->dwAltNameChoice)
1186 DWORD directoryNameLen;
1191 indentLevel + 1, &
entry->u.DirectoryName, strType,
NULL, 0);
1193 bytesNeeded += (directoryNameLen - 1) *
sizeof(
WCHAR);
1197 bytesNeeded +=
sizeof(
WCHAR);
1208 static const WCHAR ipAddrWithMaskFmt[] = {
'%',
'd',
'.',
'%',
'd',
'.',
1209 '%',
'd',
'.',
'%',
'd',
'/',
'%',
'd',
'.',
'%',
'd',
'.',
'%',
'd',
'.',
'%',
'd',0
1211 static const WCHAR ipAddrFmt[] = {
'%',
'd',
'.',
'%',
'd',
'.',
'%',
'd',
1215 if (
entry->u.IPAddress.cbData == 8)
1222 entry->u.IPAddress.pbData[0],
1223 entry->u.IPAddress.pbData[1],
1224 entry->u.IPAddress.pbData[2],
1225 entry->u.IPAddress.pbData[3]);
1230 entry->u.IPAddress.pbData[4],
1231 entry->u.IPAddress.pbData[5],
1232 entry->u.IPAddress.pbData[6],
1233 entry->u.IPAddress.pbData[7]);
1239 sprintfW(ipAddrBuf, ipAddrWithMaskFmt,
1240 entry->u.IPAddress.pbData[0],
1241 entry->u.IPAddress.pbData[1],
1242 entry->u.IPAddress.pbData[2],
1243 entry->u.IPAddress.pbData[3],
1244 entry->u.IPAddress.pbData[4],
1245 entry->u.IPAddress.pbData[5],
1246 entry->u.IPAddress.pbData[6],
1247 entry->u.IPAddress.pbData[7]);
1248 bytesNeeded += (
strlenW(ipAddrBuf) + 1) *
sizeof(
WCHAR);
1254 FIXME(
"unknown IP address format (%d bytes)\n",
1255 entry->u.IPAddress.cbData);
1261 FIXME(
"unimplemented for %d\n",
entry->dwAltNameChoice);
1268 *pcbStr = bytesNeeded;
1269 else if (*pcbStr < bytesNeeded)
1271 *pcbStr = bytesNeeded;
1279 *pcbStr = bytesNeeded;
1282 for (
i = 0;
i < indentLevel;
i++)
1290 switch (
entry->dwAltNameChoice)
1306 indentLevel + 1, &
entry->u.DirectoryName, strType,
str,
1307 bytesNeeded /
sizeof(
WCHAR));
1318 for (
i = 0;
i < indentLevel;
i++)
1363 if (i < name->cAltEntry - 1)
1364 bytesNeeded += sepLen;
1369 bytesNeeded +=
sizeof(
WCHAR);
1371 *pcbStr = bytesNeeded;
1372 else if (*pcbStr < bytesNeeded)
1374 *pcbStr = bytesNeeded;
1380 *pcbStr = bytesNeeded;
1388 if (i < name->cAltEntry - 1)
1403 DWORD dwFormatType,
DWORD dwFormatStrType,
void *pFormatStruct,
1424 DWORD bytesNeeded, sepLen;
1442 bytesNeeded += sepLen;
1446 *pcbStr = bytesNeeded;
1447 else if (*pcbStr < bytesNeeded)
1449 *pcbStr = bytesNeeded;
1455 *pcbStr = bytesNeeded;
1469 DWORD dwFormatType,
DWORD dwFormatStrType,
void *pFormatStruct,
1501 if (
info->KeyId.cbData)
1503 needSeparator =
TRUE;
1511 if (
info->AuthorityCertIssuer.cAltEntry)
1514 bytesNeeded += sepLen;
1515 needSeparator =
TRUE;
1524 if (
info->AuthorityCertSerialNumber.cbData)
1527 bytesNeeded += sepLen;
1539 *pcbFormat = bytesNeeded;
1540 else if (*pcbFormat < bytesNeeded)
1542 *pcbFormat = bytesNeeded;
1550 *pcbFormat = bytesNeeded;
1551 needSeparator =
FALSE;
1552 if (
info->KeyId.cbData)
1554 needSeparator =
TRUE;
1563 if (
info->AuthorityCertIssuer.cAltEntry)
1570 needSeparator =
TRUE;
1580 if (
info->AuthorityCertSerialNumber.cbData)
1609 DWORD dwFormatType,
DWORD dwFormatStrType,
void *pFormatStruct,
1628 if (!
info->cAccDescr)
1633 bytesNeeded +=
strlenW(infoNotAvailable) *
sizeof(
WCHAR);
1635 *pcbFormat = bytesNeeded;
1636 else if (*pcbFormat < bytesNeeded)
1638 *pcbFormat = bytesNeeded;
1644 *pcbFormat = bytesNeeded;
1645 strcpyW(pbFormat, infoNotAvailable);
1650 static const WCHAR numFmt[] = {
'%',
'd',0 };
1654 LPCWSTR headingSep, accessMethodSep, locationSep;
1655 WCHAR accessDescrNum[11];
1665 stringsLoaded =
TRUE;
1670 accessMethodSep =
crlf;
1677 locationSep =
equal;
1683 bytesNeeded +=
sizeof(
WCHAR);
1684 sprintfW(accessDescrNum, numFmt,
i + 1);
1685 bytesNeeded +=
strlenW(accessDescrNum) *
sizeof(
WCHAR);
1686 bytesNeeded +=
sizeof(
WCHAR);
1696 else if (!
strcmp(
info->rgAccDescr[
i].pszAccessMethod,
1701 bytesNeeded +=
sizeof(
WCHAR);
1702 bytesNeeded +=
sizeof(
WCHAR);
1703 bytesNeeded +=
strlen(
info->rgAccDescr[
i].pszAccessMethod)
1705 bytesNeeded +=
sizeof(
WCHAR);
1707 bytesNeeded +=
strlenW(accessMethodSep) *
sizeof(
WCHAR);
1717 if (i < info->cAccDescr - 1)
1718 bytesNeeded +=
strlenW(accessMethodSep) *
sizeof(
WCHAR);
1723 *pcbFormat = bytesNeeded;
1724 else if (*pcbFormat < bytesNeeded)
1726 *pcbFormat = bytesNeeded;
1733 DWORD altNameEntrySize;
1735 *pcbFormat = bytesNeeded;
1741 sprintfW(accessDescrNum, numFmt,
i + 1);
1762 else if (!
strcmp(
info->rgAccDescr[
i].pszAccessMethod,
1775 for (oidPtr =
info->rgAccDescr[
i].pszAccessMethod;
1776 *oidPtr; oidPtr++,
str++)
1794 altNameEntrySize = bytesNeeded;
1796 &
info->rgAccDescr[
i].AccessLocation,
str,
1799 str += altNameEntrySize /
sizeof(
WCHAR) - 1;
1800 if (i < info->cAccDescr - 1)
1842 static const WCHAR sep[] = {
',',
' ',0 };
1843 static const WCHAR bitsFmt[] = {
' ',
'(',
'%',
'0',
'2',
'x',
')',0 };
1845 unsigned int i, numReasons = 0;
1855 stringsLoaded =
TRUE;
1872 *pcbStr = bytesNeeded;
1873 else if (*pcbStr < bytesNeeded)
1875 *pcbStr = bytesNeeded;
1881 *pcbStr = bytesNeeded;
1908 DWORD dwFormatType,
DWORD dwFormatStrType,
void *pFormatStruct,
1924 static const WCHAR numFmt[] = {
'%',
'd',0 };
1925 static const WCHAR colon[] = {
':',0 };
1930 WCHAR distPointNum[11];
1941 stringsLoaded =
TRUE;
1954 for (
i = 0;
ret &&
i <
info->cDistPoint;
i++)
2002 bytesNeeded +=
sizeof(
WCHAR);
2005 bytesNeeded +=
sizeof(
WCHAR);
2017 bytesNeeded +=
strlenW(infoNotAvailable) *
sizeof(
WCHAR);
2019 *pcbFormat = bytesNeeded;
2020 else if (*pcbFormat < bytesNeeded)
2022 *pcbFormat = bytesNeeded;
2028 *pcbFormat = bytesNeeded;
2029 strcpyW(pbFormat, infoNotAvailable);
2035 *pcbFormat = bytesNeeded;
2036 else if (*pcbFormat < bytesNeeded)
2038 *pcbFormat = bytesNeeded;
2046 *pcbFormat = bytesNeeded;
2047 for (
i = 0;
ret &&
i <
info->cDistPoint;
i++)
2068 DWORD altNameSize = bytesNeeded;
2098 str += altNameSize /
sizeof(
WCHAR) - 1;
2102 DWORD reasonSize = bytesNeeded;
2109 str += reasonSize /
sizeof(
WCHAR) - 1;
2113 DWORD crlIssuerSize = bytesNeeded;
2123 str += crlIssuerSize /
sizeof(
WCHAR) - 1;
2134 DWORD dwFormatType,
DWORD dwFormatStrType,
void *pFormatStruct,
2168 for (
i = 0;
i <
usage->cUsageIdentifier;
i++)
2177 bytesNeeded +=
sizeof(
WCHAR);
2178 bytesNeeded +=
sizeof(
WCHAR);
2179 bytesNeeded +=
strlen(
usage->rgpszUsageIdentifier[
i]) *
2181 bytesNeeded +=
sizeof(
WCHAR);
2182 if (i < usage->cUsageIdentifier - 1)
2183 bytesNeeded += sepLen;
2186 *pcbFormat = bytesNeeded;
2187 else if (*pcbFormat < bytesNeeded)
2189 *pcbFormat = bytesNeeded;
2197 *pcbFormat = bytesNeeded;
2198 for (
i = 0;
i <
usage->cUsageIdentifier;
i++)
2201 usage->rgpszUsageIdentifier[
i],
2217 for (oidPtr =
usage->rgpszUsageIdentifier[
i]; *oidPtr; oidPtr++)
2221 if (i < usage->cUsageIdentifier - 1)
2244 DWORD dwFormatType,
DWORD dwFormatStrType,
void *pFormatStruct,
2264 if (!
bits->cbData ||
bits->cbData > 1)
2266 bytesNeeded +=
strlenW(infoNotAvailable) *
sizeof(
WCHAR);
2268 *pcbFormat = bytesNeeded;
2269 else if (*pcbFormat < bytesNeeded)
2271 *pcbFormat = bytesNeeded;
2279 *pcbFormat = bytesNeeded;
2295 stringsLoaded =
TRUE;
2299 bytesNeeded += bitStringLen;
2300 bytesNeeded += 3 *
sizeof(
WCHAR);
2303 bytesNeeded +=
size;
2305 *pcbFormat = bytesNeeded;
2306 else if (*pcbFormat < bytesNeeded)
2308 *pcbFormat = bytesNeeded;
2316 bitStringLen = bytesNeeded;
2320 str += bitStringLen /
sizeof(
WCHAR) - 1;
2343 DWORD dwFormatType,
DWORD dwFormatStrType,
void *pFormatStruct,
2373 stringsLoaded =
TRUE;
2389 bytesNeeded += sepLen;
2399 *pcbFormat = bytesNeeded;
2400 else if (*pcbFormat < bytesNeeded)
2402 *pcbFormat = bytesNeeded;
2410 *pcbFormat = bytesNeeded;
2436 DWORD dwFormatType,
DWORD dwFormatStrType,
void *pFormatStruct,
2453 *pcbFormat =
value->Value.cbData;
2454 else if (*pcbFormat < value->
Value.cbData)
2456 *pcbFormat =
value->Value.cbData;
2464 *pcbFormat =
value->Value.cbData;
2486 switch (
LOWORD(lpszStructType))
2550 DWORD dwFormatStrType,
void *pFormatStruct,
LPCSTR lpszStructType,
2557 TRACE(
"(%08x, %d, %08x, %p, %s, %p, %d, %p, %p)\n",
dwCertEncodingType,
2558 dwFormatType, dwFormatStrType, pFormatStruct,
debugstr_a(lpszStructType),
2559 pbEncoded, cbEncoded, pbFormat, pcbFormat);
2562 dwFormatStrType, lpszStructType)))
2569 (
void **)&
format, &hFunc);
2576 pFormatStruct, lpszStructType,
pbEncoded, cbEncoded, pbFormat,
int strcmp(const char *String1, const char *String2)
ACPI_SIZE strlen(const char *String)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define IDS_FINANCIAL_CRITERIA_MEETS_CRITERIA
#define IDS_NETSCAPE_SIGN_CA
#define IDS_ALT_NAME_DNS_NAME
#define IDS_REASON_CESSATION_OF_OPERATION
#define IDS_CRL_DIST_POINT_ISSUER
#define IDS_ALT_NAME_RFC822_NAME
#define IDS_NETSCAPE_SSL_CA
#define IDS_NETSCAPE_SSL_SERVER
#define IDS_DATA_ENCIPHERMENT
#define IDS_ACCESS_LOCATION
#define IDS_REASON_AFFILIATION_CHANGED
#define IDS_REASON_CERTIFICATE_HOLD
#define IDS_PATH_LENGTH_NONE
#define IDS_ALT_NAME_DIRECTORY_NAME
#define IDS_NETSCAPE_SMIME
#define IDS_CRL_DIST_POINT_FULL_NAME
#define IDS_FINANCIAL_CRITERIA
#define IDS_CERT_SERIAL_NUMBER
#define IDS_ENCIPHER_ONLY
#define IDS_KEY_AGREEMENT
#define IDS_ACCESS_METHOD
#define IDS_SUBJECT_TYPE_END_CERT
#define IDS_FINANCIAL_CRITERIA_AVAILABLE
#define IDS_CRL_DIST_POINT
#define IDS_FINANCIAL_CRITERIA_NOT_AVAILABLE
#define IDS_REASON_CA_COMPROMISE
#define IDS_NETSCAPE_SSL_CLIENT
#define IDS_REASON_SUPERSEDED
#define IDS_NETSCAPE_SMIME_CA
#define IDS_CRL_DIST_POINT_REASON
#define IDS_ACCESS_METHOD_UNKNOWN
#define IDS_CRL_DIST_POINT_RDN_NAME
#define IDS_USAGE_UNKNOWN
#define IDS_DIGITAL_SIGNATURE
#define IDS_NETSCAPE_SIGN
#define IDS_INFO_NOT_AVAILABLE
#define IDS_NON_REPUDIATION
#define IDS_DECIPHER_ONLY
#define IDS_REASON_KEY_COMPROMISE
#define IDS_SUBJECT_TYPE_CA
#define IDS_CRL_DIST_POINT_NAME
#define IDS_ACCESS_METHOD_CA_ISSUERS
#define IDS_KEY_ENCIPHERMENT
#define IDS_ALT_NAME_MASK
#define IDS_ACCESS_METHOD_OCSP
#define IDS_OFFLINE_CRL_SIGN
#define IDS_ALT_NAME_IP_ADDRESS
BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
const void * CRYPT_ReadSerializedElement(const BYTE *pbElement, DWORD cbElement, DWORD dwContextTypeFlags, DWORD *pdwContentType) DECLSPEC_HIDDEN
BOOL CRYPT_ReadSerializedStoreFromBlob(const CRYPT_DATA_BLOB *blob, HCERTSTORE store) DECLSPEC_HIDDEN
DWORD cert_name_to_str_with_indent(DWORD dwCertEncodingType, DWORD indent, const CERT_NAME_BLOB *pName, DWORD dwStrType, LPWSTR psz, DWORD csz) DECLSPEC_HIDDEN
static context_t * context_from_ptr(const void *ptr)
BOOL CRYPT_ReadSerializedStoreFromFile(HANDLE file, HCERTSTORE store) DECLSPEC_HIDDEN
BOOL WINAPI CryptStringToBinaryW(LPCWSTR pszString, DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary, DWORD *pdwSkip, DWORD *pdwFlags)
BOOL WINAPI CryptStringToBinaryA(LPCSTR pszString, DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary, DWORD *pdwSkip, DWORD *pdwFlags)
void Context_AddRef(context_t *context)
void Context_Release(context_t *context)
LPVOID WINAPI CryptMemAlloc(ULONG cbSize)
VOID WINAPI CryptMemFree(LPVOID pv)
HCRYPTMSG WINAPI CryptMsgOpenToDecode(DWORD dwMsgEncodingType, DWORD dwFlags, DWORD dwMsgType, HCRYPTPROV_LEGACY hCryptProv, PCERT_INFO pRecipientInfo, PCMSG_STREAM_INFO pStreamInfo)
BOOL WINAPI CryptMsgGetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType, DWORD dwIndex, void *pvData, DWORD *pcbData)
BOOL WINAPI CryptMsgUpdate(HCRYPTMSG hCryptMsg, const BYTE *pbData, DWORD cbData, BOOL fFinal)
BOOL WINAPI CryptMsgClose(HCRYPTMSG hCryptMsg)
static BOOL CRYPT_FormatAltNameInfo(DWORD dwFormatStrType, DWORD indentLevel, const CERT_ALT_NAME_INFO *name, LPWSTR str, DWORD *pcbStr)
static BOOL CRYPT_QueryMessageObject(DWORD dwObjectType, const void *pvObject, DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags, DWORD *pdwMsgAndCertEncodingType, DWORD *pdwContentType, DWORD *pdwFormatType, HCERTSTORE *phCertStore, HCRYPTMSG *phMsg)
static WCHAR subjectTypeEndCert[MAX_STRING_RESOURCE_LEN]
static BOOL WINAPI CRYPT_FormatHexString(DWORD dwCertEncodingType, DWORD dwFormatType, DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat)
static BOOL WINAPI CRYPT_FormatNetscapeCertType(DWORD dwCertEncodingType, DWORD dwFormatType, DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat)
static WCHAR available[MAX_STRING_RESOURCE_LEN]
static const WCHAR colonSep[]
static BOOL CRYPT_QuerySerializedContextObject(DWORD dwObjectType, const void *pvObject, DWORD dwExpectedContentTypeFlags, DWORD *pdwMsgAndCertEncodingType, DWORD *pdwContentType, HCERTSTORE *phCertStore, const void **ppvContext)
static struct BitToString keyUsageByte0Map[]
static BOOL CRYPT_FormatBits(BYTE bits, const struct BitToString *map, DWORD mapEntries, void *pbFormat, DWORD *pcbFormat, BOOL *first)
static BOOL WINAPI CRYPT_FormatEnhancedKeyUsage(DWORD dwCertEncodingType, DWORD dwFormatType, DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat)
static const WCHAR commaSpace[]
static BOOL CRYPT_QuerySerializedStoreObject(DWORD dwObjectType, const void *pvObject, DWORD *pdwMsgAndCertEncodingType, DWORD *pdwContentType, HCERTSTORE *phCertStore, HCRYPTMSG *phMsg)
static WCHAR rdnName[MAX_STRING_RESOURCE_LEN]
#define MAX_STRING_RESOURCE_LEN
static BOOL CRYPT_QueryUnsignedMessage(const CRYPT_DATA_BLOB *blob, DWORD *pdwMsgAndCertEncodingType, DWORD *pdwContentType, HCRYPTMSG *phMsg)
static WCHAR aia[MAX_STRING_RESOURCE_LEN]
static WCHAR ocsp[MAX_STRING_RESOURCE_LEN]
static BOOL WINAPI CRYPT_FormatBasicConstraints2(DWORD dwCertEncodingType, DWORD dwFormatType, DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat)
static WCHAR meetsCriteria[MAX_STRING_RESOURCE_LEN]
static BOOL CRYPT_FormatAltNameEntry(DWORD dwFormatStrType, DWORD indentLevel, const CERT_ALT_NAME_ENTRY *entry, LPWSTR str, DWORD *pcbStr)
static WCHAR caIssuers[MAX_STRING_RESOURCE_LEN]
static BOOL WINAPI CRYPT_FormatKeyUsage(DWORD dwCertEncodingType, DWORD dwFormatType, DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat)
static struct BitToString netscapeCertTypeMap[]
static WCHAR crlDistPoint[MAX_STRING_RESOURCE_LEN]
static WCHAR financialCriteria[MAX_STRING_RESOURCE_LEN]
static BOOL WINAPI CRYPT_FormatAltName(DWORD dwCertEncodingType, DWORD dwFormatType, DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat)
static BOOL CRYPT_FormatReason(DWORD dwFormatStrType, const CRYPT_BIT_BLOB *reasonFlags, LPWSTR str, DWORD *pcbStr)
static BOOL CRYPT_ReadBlobFromFile(LPCWSTR fileName, PCERT_BLOB blob)
static BOOL WINAPI CRYPT_FormatAuthorityKeyId2(DWORD dwCertEncodingType, DWORD dwFormatType, DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat)
static WCHAR subjectTypeCA[MAX_STRING_RESOURCE_LEN]
static WCHAR superseded[MAX_STRING_RESOURCE_LEN]
static WCHAR keyCompromise[MAX_STRING_RESOURCE_LEN]
static const WCHAR colonCrlf[]
static CryptFormatObjectFunc CRYPT_GetBuiltinFormatFunction(DWORD encodingType, DWORD formatStrType, LPCSTR lpszStructType)
BOOL WINAPI CryptFormatObject(DWORD dwCertEncodingType, DWORD dwFormatType, DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat)
static BOOL CRYPT_QuerySerializedStoreFromBlob(const CRYPT_DATA_BLOB *blob, DWORD *pdwMsgAndCertEncodingType, DWORD *pdwContentType, HCERTSTORE *phCertStore, HCRYPTMSG *phMsg)
static BOOL CRYPT_FormatKeyId(const CRYPT_DATA_BLOB *keyId, LPWSTR str, DWORD *pcbStr)
static WCHAR yes[MAX_STRING_RESOURCE_LEN]
static struct BitToString keyUsageByte1Map[]
static WCHAR fullName[MAX_STRING_RESOURCE_LEN]
static BOOL CRYPT_FormatCertSerialNumber(const CRYPT_DATA_BLOB *serialNum, LPWSTR str, DWORD *pcbStr)
static BOOL WINAPI CRYPT_FormatAuthorityInfoAccess(DWORD dwCertEncodingType, DWORD dwFormatType, DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat)
static WCHAR unknown[MAX_STRING_RESOURCE_LEN]
static WCHAR subjectTypeHeader[MAX_STRING_RESOURCE_LEN]
static const WCHAR indent[]
static BOOL CRYPT_QuerySerializedStoreFromFile(LPCWSTR fileName, DWORD *pdwMsgAndCertEncodingType, DWORD *pdwContentType, HCERTSTORE *phCertStore, HCRYPTMSG *phMsg)
static WCHAR caCompromise[MAX_STRING_RESOURCE_LEN]
static BOOL WINAPI CRYPT_FormatUnicodeString(DWORD dwCertEncodingType, DWORD dwFormatType, DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat)
static WCHAR accessLocation[MAX_STRING_RESOURCE_LEN]
static const WCHAR crlf[]
static BOOL CRYPT_QueryContextBlob(const CERT_BLOB *blob, DWORD dwExpectedContentTypeFlags, HCERTSTORE store, DWORD *contentType, const void **ppvContext)
static BOOL CRYPT_QuerySignedMessage(const CRYPT_DATA_BLOB *blob, DWORD *pdwMsgAndCertEncodingType, DWORD *pdwContentType, HCRYPTMSG *phMsg)
static BOOL CRYPT_QueryContextObject(DWORD dwObjectType, const void *pvObject, DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags, DWORD *pdwMsgAndCertEncodingType, DWORD *pdwContentType, DWORD *pdwFormatType, HCERTSTORE *phCertStore, const void **ppvContext)
BOOL 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)
static WCHAR pathLengthHeader[MAX_STRING_RESOURCE_LEN]
static WCHAR operationCeased[MAX_STRING_RESOURCE_LEN]
static WCHAR distPointName[MAX_STRING_RESOURCE_LEN]
BOOL(WINAPI * CryptFormatObjectFunc)(DWORD, DWORD, DWORD, void *, LPCSTR, const BYTE *, DWORD, void *, DWORD *)
static WCHAR issuer[MAX_STRING_RESOURCE_LEN]
static struct reason_map_entry reason_map[]
static WCHAR no[MAX_STRING_RESOURCE_LEN]
static BOOL CRYPT_QueryEmbeddedMessageObject(DWORD dwObjectType, const void *pvObject, DWORD dwExpectedContentTypeFlags, DWORD *pdwMsgAndCertEncodingType, DWORD *pdwContentType, HCERTSTORE *phCertStore, HCRYPTMSG *phMsg)
static WCHAR affiliationChanged[MAX_STRING_RESOURCE_LEN]
static BOOL WINAPI CRYPT_FormatCRLDistPoints(DWORD dwCertEncodingType, DWORD dwFormatType, DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat)
static WCHAR notAvailable[MAX_STRING_RESOURCE_LEN]
static BOOL CRYPT_FormatCertIssuer(DWORD dwFormatStrType, const CERT_ALT_NAME_INFO *issuer, LPWSTR str, DWORD *pcbStr)
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
static BOOL WINAPI CRYPT_FormatSpcFinancialCriteria(DWORD dwCertEncodingType, DWORD dwFormatType, DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat)
static WCHAR certificateHold[MAX_STRING_RESOURCE_LEN]
static WCHAR accessMethod[MAX_STRING_RESOURCE_LEN]
static BOOL CRYPT_FormatHexStringWithPrefix(const CRYPT_DATA_BLOB *blob, int id, LPWSTR str, DWORD *pcbStr)
HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR pszFuncName, DWORD dwFlags)
PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey, DWORD dwGroupId)
BOOL WINAPI CryptGetOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, LPCSTR pszOID, DWORD dwFlags, void **ppvFuncAddr, HCRYPTOIDFUNCADDR *phFuncAddr)
BOOL WINAPI CryptFreeOIDFunctionAddress(HCRYPTOIDFUNCADDR hFuncAddr, DWORD dwFlags)
BOOL WINAPI CryptSIPRetrieveSubjectGuid(LPCWSTR FileName, HANDLE hFileIn, GUID *pgSubject)
BOOL WINAPI CryptSIPLoad(const GUID *pgSubject, DWORD dwFlags, SIP_DISPATCH_INFO *pSipDispatch)
HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider, DWORD dwMsgAndCertEncodingType, HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const void *pvPara)
const WINE_CONTEXT_INTERFACE * pCTLInterface
const WINE_CONTEXT_INTERFACE * pCertInterface
HCERTSTORE WINAPI CertDuplicateStore(HCERTSTORE hCertStore)
const WINE_CONTEXT_INTERFACE * pCRLInterface
BOOL WINAPI CertCloseStore(HCERTSTORE hCertStore, DWORD dwFlags)
#define ReadFile(a, b, c, d, e)
#define INVALID_HANDLE_VALUE
#define FILE_ATTRIBUTE_NORMAL
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
GLuint GLuint GLsizei GLenum type
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
GLenum GLuint GLenum GLsizei const GLchar * buf
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
GLsizeiptr const GLvoid GLenum usage
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
HLOCAL NTAPI LocalFree(HLOCAL hMem)
#define ERROR_FILE_NOT_FOUND
static LPCSTR DWORD void BYTE * pbEncoded
#define offsetof(TYPE, MEMBER)
WCHAR str[MAX_STRING_RESOURCE_LEN]
pCryptSIPGetSignedDataMsg pfGet
CERT_ALT_NAME_INFO FullName
DWORD dwDistPointNameChoice
CRYPT_BIT_BLOB ReasonFlags
CERT_ALT_NAME_INFO CRLIssuer
CRL_DIST_POINT_NAME DistPointName
BOOL fFinancialInfoAvailable
AddEncodedContextToStoreFunc addEncodedToStore
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
#define X509_UNICODE_ANY_STRING
#define X509_AUTHORITY_KEY_ID2
#define CERT_ENCODING_TYPE_MASK
#define CERT_KEY_ENCIPHERMENT_KEY_USAGE
#define CRYPT_FORMAT_STR_MULTI_LINE
#define CERT_QUERY_CONTENT_SERIALIZED_CERT
#define NETSCAPE_SSL_CA_CERT_TYPE
#define CERT_QUERY_CONTENT_FLAG_CTL
#define CERT_NON_REPUDIATION_KEY_USAGE
#define CERT_ALT_NAME_URL
#define CERT_QUERY_OBJECT_FILE
#define NETSCAPE_SSL_SERVER_AUTH_CERT_TYPE
#define CERT_X500_NAME_STR
#define szOID_CRL_DIST_POINTS
#define CERT_QUERY_FORMAT_BINARY
#define szOID_BASIC_CONSTRAINTS2
#define CERT_QUERY_CONTENT_FLAG_CRL
#define CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED
#define CERT_QUERY_CONTENT_FLAG_CERT
#define CERT_ALT_NAME_DIRECTORY_NAME
#define CERT_QUERY_CONTENT_CRL
#define NETSCAPE_SIGN_CERT_TYPE
#define szOID_NETSCAPE_COMMENT
#define CERT_ALT_NAME_IP_ADDRESS
#define CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED
#define X509_AUTHORITY_INFO_ACCESS
#define CERT_STORE_CREATE_NEW_FLAG
#define CRL_REASON_CESSATION_OF_OPERATION_FLAG
#define NETSCAPE_SIGN_CA_CERT_TYPE
#define CRL_REASON_KEY_COMPROMISE_FLAG
#define CERT_QUERY_CONTENT_SERIALIZED_STORE
_In_ DWORD _In_ DWORD _In_ DWORD _In_ DWORD _Out_opt_ DWORD _Outptr_opt_ const void ** ppvContext
#define CERT_QUERY_OBJECT_BLOB
#define szOID_ISSUER_ALT_NAME2
#define CRYPT_OID_FORMAT_OBJECT_FUNC
#define CERT_ALT_NAME_RFC822_NAME
#define CRYPT_STRING_BASE64_ANY
#define CRYPT_ENHKEY_USAGE_OID_GROUP_ID
#define CERT_CRL_SIGN_KEY_USAGE
#define CERT_QUERY_CONTENT_FLAG_CERT_PAIR
#define CERT_QUERY_FORMAT_FLAG_BINARY
#define CERT_QUERY_CONTENT_CTL
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define CERT_DIGITAL_SIGNATURE_KEY_USAGE
#define CERT_QUERY_CONTENT_SERIALIZED_CTL
#define szOID_NETSCAPE_CA_REVOCATION_URL
#define CRL_DIST_POINT_NO_NAME
#define X509_ASN_ENCODING
#define CERT_QUERY_FORMAT_BASE64_ENCODED
_In_ DWORD dwCertEncodingType
#define CERT_STORE_ALL_CONTEXT_FLAG
#define CRYPT_DECODE_ALLOC_FLAG
#define CERT_STORE_PROV_MEMORY
#define szOID_NETSCAPE_CERT_RENEWAL_URL
#define CRL_DIST_POINT_FULL_NAME
#define CRL_REASON_CERTIFICATE_HOLD_FLAG
#define CERT_ENCIPHER_ONLY_KEY_USAGE
#define CERT_NAME_STR_CRLF_FLAG
#define szOID_NETSCAPE_BASE_URL
#define CERT_STORE_PROV_MSG
#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT
#define szOID_NETSCAPE_CA_POLICY_URL
#define NETSCAPE_SSL_CLIENT_AUTH_CERT_TYPE
#define CERT_OFFLINE_CRL_SIGN_KEY_USAGE
#define CERT_STORE_CERTIFICATE_CONTEXT
#define szOID_NETSCAPE_REVOCATION_URL
#define szOID_NETSCAPE_CERT_TYPE
#define CERT_DECIPHER_ONLY_KEY_USAGE
#define NETSCAPE_SMIME_CERT_TYPE
#define szOID_SUBJECT_ALT_NAME
#define CERT_QUERY_CONTENT_SERIALIZED_CRL
#define CERT_ALT_NAME_DNS_NAME
#define CERT_STORE_CTL_CONTEXT
#define szOID_ENHANCED_KEY_USAGE
#define szOID_SUBJECT_ALT_NAME2
#define CERT_QUERY_CONTENT_PKCS7_SIGNED
#define CRL_REASON_CA_COMPROMISE_FLAG
#define X509_BASIC_CONSTRAINTS2
#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED
#define CERT_STORE_ADD_ALWAYS
#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE
#define szOID_AUTHORITY_INFO_ACCESS
#define CRYPT_OID_INFO_OID_KEY
#define szOID_NETSCAPE_SSL_SERVER_NAME
#define CERT_KEY_AGREEMENT_KEY_USAGE
#define X509_ALTERNATE_NAME
#define szOID_AUTHORITY_KEY_IDENTIFIER2
#define PKCS_7_ASN_ENCODING
#define NETSCAPE_SMIME_CA_CERT_TYPE
#define CERT_NAME_STR_REVERSE_FLAG
#define CRYPT_FORMAT_STR_NO_HEX
#define CERT_QUERY_CONTENT_FLAG_PKCS10
#define CERT_KEY_CERT_SIGN_KEY_USAGE
#define CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED
#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED
#define CERT_QUERY_CONTENT_FLAG_PFX
#define CERT_DATA_ENCIPHERMENT_KEY_USAGE
#define CRL_REASON_AFFILIATION_CHANGED_FLAG
#define CERT_QUERY_CONTENT_CERT
#define CERT_STORE_CRL_CONTEXT
#define X509_CRL_DIST_POINTS
#define CRL_REASON_SUPERSEDED_FLAG
#define X509_ENHANCED_KEY_USAGE
#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL
#define szOID_ISSUER_ALT_NAME
#define szOID_PKIX_CA_ISSUERS
#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL
#define ERROR_INVALID_DATA
#define SPC_FINANCIAL_CRITERIA_OBJID
#define SPC_FINANCIAL_CRITERIA_STRUCT
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)