From 1c990a1a534b99bdf0d66910af7c85cb0065ce4d Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Fri, 28 Sep 2007 08:37:17 -0700 Subject: [PATCH] Add a helper function to create a file store from an already-initialized memory store --- dlls/crypt32/filestore.c | 53 ++++++++++++++++++++++++++-------------------- 1 files changed, 30 insertions(+), 23 deletions(-) diff --git a/dlls/crypt32/filestore.c b/dlls/crypt32/filestore.c index a5f8a1b..fc89c0a 100644 --- a/dlls/crypt32/filestore.c +++ b/dlls/crypt32/filestore.c @@ -139,6 +139,30 @@ static void *fileProvFuncs[] = { CRYPT_FileControl, }; +static PWINECRYPT_CERTSTORE CRYPT_CreateFileStore(DWORD dwFlags, + HCERTSTORE memStore, HANDLE file) +{ + PWINECRYPT_CERTSTORE store = NULL; + PWINE_FILESTOREINFO info = CryptMemAlloc(sizeof(WINE_FILESTOREINFO)); + + if (info) + { + CERT_STORE_PROV_INFO provInfo = { 0 }; + + info->dwOpenFlags = dwFlags; + info->memStore = memStore; + info->file = file; + info->dirty = FALSE; + provInfo.cbSize = sizeof(provInfo); + provInfo.cStoreProvFunc = sizeof(fileProvFuncs) / + sizeof(fileProvFuncs[0]); + provInfo.rgpvStoreProvFunc = fileProvFuncs; + provInfo.hStoreProv = info; + store = CRYPT_ProvCreateStore(dwFlags, memStore, &provInfo); + } + return store; +} + PWINECRYPT_CERTSTORE CRYPT_FileOpenStore(HCRYPTPROV hCryptProv, DWORD dwFlags, const void *pvPara) { @@ -168,7 +192,7 @@ PWINECRYPT_CERTSTORE CRYPT_FileOpenStore GetCurrentProcess(), &file, dwFlags & CERT_STORE_READONLY_FLAG ? GENERIC_READ : GENERIC_READ | GENERIC_WRITE, TRUE, 0)) { - PWINECRYPT_CERTSTORE memStore; + HCERTSTORE memStore; memStore = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0, CERT_STORE_CREATE_NEW_FLAG, NULL); @@ -176,28 +200,11 @@ PWINECRYPT_CERTSTORE CRYPT_FileOpenStore { if (CRYPT_ReadSerializedStoreFromFile(file, memStore)) { - PWINE_FILESTOREINFO info = CryptMemAlloc( - sizeof(WINE_FILESTOREINFO)); - - if (info) - { - CERT_STORE_PROV_INFO provInfo = { 0 }; - - info->dwOpenFlags = dwFlags; - info->memStore = memStore; - info->file = file; - info->dirty = FALSE; - provInfo.cbSize = sizeof(provInfo); - provInfo.cStoreProvFunc = sizeof(fileProvFuncs) / - sizeof(fileProvFuncs[0]); - provInfo.rgpvStoreProvFunc = fileProvFuncs; - provInfo.hStoreProv = info; - store = CRYPT_ProvCreateStore(dwFlags, memStore, &provInfo); - /* File store doesn't need crypto provider, so close it */ - if (hCryptProv && - !(dwFlags & CERT_STORE_NO_CRYPT_RELEASE_FLAG)) - CryptReleaseContext(hCryptProv, 0); - } + store = CRYPT_CreateFileStore(dwFlags, memStore, file); + /* File store doesn't need crypto provider, so close it */ + if (hCryptProv && + !(dwFlags & CERT_STORE_NO_CRYPT_RELEASE_FLAG)) + CryptReleaseContext(hCryptProv, 0); } } } -- 1.4.1