Rob Shearman : wintrust: Implement WTHelperGetProvPrivateDataFromChain.
Alexandre Julliard
julliard at winehq.org
Thu Apr 24 06:23:21 CDT 2008
Module: wine
Branch: master
Commit: 8e0f125f458fc935d0c6f1b88f46d5ab7eaf306a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8e0f125f458fc935d0c6f1b88f46d5ab7eaf306a
Author: Rob Shearman <rob at codeweavers.com>
Date: Wed Apr 23 20:09:19 2008 +0100
wintrust: Implement WTHelperGetProvPrivateDataFromChain.
Also fill in pfnAddPrivData2Chain in WintrustLoadFunctionPointers, which
is the complement of WTHelperGetProvPrivateDataFromChain.
---
dlls/wintrust/register.c | 2 +-
dlls/wintrust/wintrust.spec | 2 +-
dlls/wintrust/wintrust_main.c | 57 +++++++++++++++++++++++++++++++++++++++++
dlls/wintrust/wintrust_priv.h | 2 +
include/wintrust.h | 1 +
5 files changed, 62 insertions(+), 2 deletions(-)
diff --git a/dlls/wintrust/register.c b/dlls/wintrust/register.c
index e039ab4..05e48ef 100644
--- a/dlls/wintrust/register.c
+++ b/dlls/wintrust/register.c
@@ -862,7 +862,7 @@ BOOL WINAPI WintrustLoadFunctionPointers( GUID* pgActionID,
pPfns->pfnAddStore2Chain = WINTRUST_AddStore;
pPfns->pfnAddSgnr2Chain = WINTRUST_AddSgnr;
pPfns->pfnAddCert2Chain = WINTRUST_AddCert;
- pPfns->pfnAddPrivData2Chain = NULL;
+ pPfns->pfnAddPrivData2Chain = WINTRUST_AddPrivData;
pPfns->psUIpfns = NULL;
pPfns->pfnInitialize = (PFN_PROVIDER_INIT_CALL)WINTRUST_ReadProviderFromReg(GuidString, Initialization);
pPfns->pfnObjectTrust = (PFN_PROVIDER_OBJTRUST_CALL)WINTRUST_ReadProviderFromReg(GuidString, Message);
diff --git a/dlls/wintrust/wintrust.spec b/dlls/wintrust/wintrust.spec
index 552cfdd..191e3d1 100644
--- a/dlls/wintrust/wintrust.spec
+++ b/dlls/wintrust/wintrust.spec
@@ -81,7 +81,7 @@
@ stdcall WTHelperGetFileName(ptr)
@ stub WTHelperGetKnownUsages
@ stdcall WTHelperGetProvCertFromChain(ptr long)
-@ stub WTHelperGetProvPrivateDataFromChain
+@ stdcall WTHelperGetProvPrivateDataFromChain(ptr ptr)
@ stdcall WTHelperGetProvSignerFromChain(ptr long long long)
@ stub WTHelperIsInRootStore
@ stub WTHelperOpenKnownStores
diff --git a/dlls/wintrust/wintrust_main.c b/dlls/wintrust/wintrust_main.c
index c5b1612..47c0865 100644
--- a/dlls/wintrust/wintrust_main.c
+++ b/dlls/wintrust/wintrust_main.c
@@ -425,6 +425,25 @@ CRYPT_PROVIDER_CERT * WINAPI WTHelperGetProvCertFromChain(
return cert;
}
+CRYPT_PROVIDER_PRIVDATA *WINAPI WTHelperGetProvPrivateDataFromChain(
+ CRYPT_PROVIDER_DATA* pProvData,
+ GUID* pgProviderID)
+{
+ CRYPT_PROVIDER_PRIVDATA *privdata = NULL;
+ DWORD i;
+
+ TRACE("(%p, %s)\n", pProvData, debugstr_guid(pgProviderID));
+
+ for (i = 0; i < pProvData->csProvPrivData; i++)
+ if (IsEqualGUID(pgProviderID, &pProvData->pasProvPrivData[i].gProviderID))
+ {
+ privdata = &pProvData->pasProvPrivData[i];
+ break;
+ }
+
+ return privdata;
+}
+
/***********************************************************************
* WTHelperProvDataFromStateData (WINTRUST.@)
*/
@@ -649,3 +668,41 @@ BOOL WINAPI WINTRUST_AddCert(CRYPT_PROVIDER_DATA *data, DWORD idxSigner,
SetLastError(ERROR_OUTOFMEMORY);
return ret;
}
+
+BOOL WINAPI WINTRUST_AddPrivData(CRYPT_PROVIDER_DATA *data,
+ CRYPT_PROVIDER_PRIVDATA *pPrivData2Add)
+{
+ BOOL ret = FALSE;
+
+ TRACE("(%p, %p)\n", data, pPrivData2Add);
+
+ if (pPrivData2Add->cbStruct > sizeof(CRYPT_PROVIDER_PRIVDATA))
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ WARN("invalid struct size\n");
+ return FALSE;
+ }
+ if (data->csProvPrivData)
+ data->pasProvPrivData = WINTRUST_ReAlloc(data->pasProvPrivData,
+ (data->csProvPrivData + 1) * sizeof(CRYPT_PROVIDER_SGNR));
+ else
+ {
+ data->pasProvPrivData = WINTRUST_Alloc(sizeof(CRYPT_PROVIDER_SGNR));
+ data->csProvPrivData = 0;
+ }
+ if (data->pasProvPrivData)
+ {
+ DWORD i;
+
+ for (i = 0; i < data->csProvPrivData; i++)
+ if (IsEqualGUID(&pPrivData2Add->gProviderID, &data->pasProvPrivData[i]))
+ break;
+
+ data->pasProvPrivData[i] = *pPrivData2Add;
+ if (i == data->csProvPrivData)
+ data->csProvPrivData++;
+ }
+ else
+ SetLastError(ERROR_OUTOFMEMORY);
+ return ret;
+}
diff --git a/dlls/wintrust/wintrust_priv.h b/dlls/wintrust/wintrust_priv.h
index 4519bd9..c73f666 100644
--- a/dlls/wintrust/wintrust_priv.h
+++ b/dlls/wintrust/wintrust_priv.h
@@ -26,5 +26,7 @@ BOOL WINAPI WINTRUST_AddSgnr(CRYPT_PROVIDER_DATA *data,
BOOL fCounterSigner, DWORD idxSigner, CRYPT_PROVIDER_SGNR *sgnr);
BOOL WINAPI WINTRUST_AddCert(CRYPT_PROVIDER_DATA *data, DWORD idxSigner,
BOOL fCounterSigner, DWORD idxCounterSigner, PCCERT_CONTEXT pCert2Add);
+BOOL WINAPI WINTRUST_AddPrivData(CRYPT_PROVIDER_DATA *data,
+ CRYPT_PROVIDER_PRIVDATA *pPrivData2Add);
#endif /* ndef __WINTRUST_PRIV_H__ */
diff --git a/include/wintrust.h b/include/wintrust.h
index bc1c367..5408ad4 100644
--- a/include/wintrust.h
+++ b/include/wintrust.h
@@ -428,6 +428,7 @@ CRYPT_PROVIDER_SGNR * WINAPI WTHelperGetProvSignerFromChain(
CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner, BOOL fCounterSigner,
DWORD idxCounterSigner);
CRYPT_PROVIDER_DATA * WINAPI WTHelperProvDataFromStateData(HANDLE hStateData);
+CRYPT_PROVIDER_PRIVDATA * WINAPI WTHelperGetProvPrivateDataFromChain(CRYPT_PROVIDER_DATA *,GUID *);
#define SPC_INDIRECT_DATA_OBJID "1.3.6.1.4.1.311.2.1.4"
#define SPC_SP_AGENCY_INFO_OBJID "1.3.6.1.4.1.311.2.1.10"
More information about the wine-cvs
mailing list