Commit 3d1ba2ab authored by Juan Lang's avatar Juan Lang Committed by Alexandre Julliard

crypt32: Don't store a redundant copy of data in the message store.

parent 8b17846d
...@@ -93,13 +93,6 @@ typedef struct _WINE_MEMSTORE ...@@ -93,13 +93,6 @@ typedef struct _WINE_MEMSTORE
struct ContextList *crls; struct ContextList *crls;
} WINE_MEMSTORE, *PWINE_MEMSTORE; } WINE_MEMSTORE, *PWINE_MEMSTORE;
typedef struct _WINE_MSGSTOREINFO
{
DWORD dwOpenFlags;
HCERTSTORE memStore;
HCRYPTMSG msg;
} WINE_MSGSTOREINFO, *PWINE_MSGSTOREINFO;
void CRYPT_InitStore(WINECRYPT_CERTSTORE *store, DWORD dwFlags, void CRYPT_InitStore(WINECRYPT_CERTSTORE *store, DWORD dwFlags,
CertStoreType type) CertStoreType type)
{ {
...@@ -528,12 +521,10 @@ static PWINECRYPT_CERTSTORE CRYPT_SysOpenStoreA(HCRYPTPROV hCryptProv, ...@@ -528,12 +521,10 @@ static PWINECRYPT_CERTSTORE CRYPT_SysOpenStoreA(HCRYPTPROV hCryptProv,
static void WINAPI CRYPT_MsgCloseStore(HCERTSTORE hCertStore, DWORD dwFlags) static void WINAPI CRYPT_MsgCloseStore(HCERTSTORE hCertStore, DWORD dwFlags)
{ {
PWINE_MSGSTOREINFO store = (PWINE_MSGSTOREINFO)hCertStore; HCRYPTMSG msg = (HCRYPTMSG)hCertStore;
TRACE("(%p, %08x)\n", store, dwFlags); TRACE("(%p, %08x)\n", msg, dwFlags);
CertCloseStore(store->memStore, dwFlags); CryptMsgClose(msg);
CryptMsgClose(store->msg);
CryptMemFree(store);
} }
static void *msgProvFuncs[] = { static void *msgProvFuncs[] = {
...@@ -613,28 +604,17 @@ static PWINECRYPT_CERTSTORE CRYPT_MsgOpenStore(HCRYPTPROV hCryptProv, ...@@ -613,28 +604,17 @@ static PWINECRYPT_CERTSTORE CRYPT_MsgOpenStore(HCRYPTPROV hCryptProv,
} }
if (ret) if (ret)
{ {
PWINE_MSGSTOREINFO info = CryptMemAlloc(sizeof(WINE_MSGSTOREINFO)); CERT_STORE_PROV_INFO provInfo = { 0 };
if (info) provInfo.cbSize = sizeof(provInfo);
{ provInfo.cStoreProvFunc = sizeof(msgProvFuncs) /
CERT_STORE_PROV_INFO provInfo = { 0 }; sizeof(msgProvFuncs[0]);
provInfo.rgpvStoreProvFunc = msgProvFuncs;
info->dwOpenFlags = dwFlags; provInfo.hStoreProv = CryptMsgDuplicate(msg);
info->memStore = memStore; store = CRYPT_ProvCreateStore(dwFlags, memStore, &provInfo);
info->msg = CryptMsgDuplicate(msg); /* Msg store doesn't need crypto provider, so close it */
provInfo.cbSize = sizeof(provInfo); if (hCryptProv && !(dwFlags & CERT_STORE_NO_CRYPT_RELEASE_FLAG))
provInfo.cStoreProvFunc = sizeof(msgProvFuncs) / CryptReleaseContext(hCryptProv, 0);
sizeof(msgProvFuncs[0]);
provInfo.rgpvStoreProvFunc = msgProvFuncs;
provInfo.hStoreProv = info;
store = CRYPT_ProvCreateStore(dwFlags, memStore,
&provInfo);
/* Msg store doesn't need crypto provider, so close it */
if (hCryptProv && !(dwFlags & CERT_STORE_NO_CRYPT_RELEASE_FLAG))
CryptReleaseContext(hCryptProv, 0);
}
else
CertCloseStore(memStore, 0);
} }
else else
CertCloseStore(memStore, 0); CertCloseStore(memStore, 0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment