Module: wine Branch: master Commit: 2373b8bc804c7bb8f4ab47fb5d91e01ebe5aeaec URL: http://source.winehq.org/git/wine.git/?a=commit;h=2373b8bc804c7bb8f4ab47fb5d...
Author: Juan Lang juan.lang@gmail.com Date: Fri Sep 28 08:37:17 2007 -0700
crypt32: Add a helper function to create a file store from an already-initialized memory store.
---
dlls/crypt32/filestore.c | 57 +++++++++++++++++++++++++-------------------- 1 files changed, 32 insertions(+), 25 deletions(-)
diff --git a/dlls/crypt32/filestore.c b/dlls/crypt32/filestore.c index 63a7b6e..fc89c0a 100644 --- a/dlls/crypt32/filestore.c +++ b/dlls/crypt32/filestore.c @@ -99,8 +99,8 @@ static BOOL WINAPI CRYPT_FileControl(HCERTSTORE hCertStore, DWORD dwFlags, { case CERT_STORE_CTRL_RESYNC: CRYPT_EmptyStore(store->memStore); - CRYPT_ReadSerializedStoreFromFile(store->file, store); - ret = TRUE; + store->dirty = FALSE; + ret = CRYPT_ReadSerializedStoreFromFile(store->file, store->memStore); break; case CERT_STORE_CTRL_COMMIT: if (!(store->dwOpenFlags & CERT_FILE_STORE_COMMIT_ENABLE_FLAG)) @@ -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(HCRYPTPROV hCryptProv, DWORD dwFlags, 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(HCRYPTPROV hCryptProv, DWORD dwFlags, { 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); } } }