Module: wine Branch: master Commit: 0b89c5a264186c6893d4f24bdd017d5f71f668f5 URL: https://source.winehq.org/git/wine.git/?a=commit;h=0b89c5a264186c6893d4f24bd...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Fri Oct 5 16:40:47 2018 +0800
crypt32: Implement CryptUnregisterOIDInfo.
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/crypt32/crypt32.spec | 2 +- dlls/crypt32/oid.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-)
diff --git a/dlls/crypt32/crypt32.spec b/dlls/crypt32/crypt32.spec index 0bc78a1..64d5aa9 100644 --- a/dlls/crypt32/crypt32.spec +++ b/dlls/crypt32/crypt32.spec @@ -194,7 +194,7 @@ @ stdcall CryptUnprotectMemory(ptr long long) @ stdcall CryptUnregisterDefaultOIDFunction(long str wstr) @ stdcall CryptUnregisterOIDFunction(long str str) -@ stub CryptUnregisterOIDInfo +@ stdcall CryptUnregisterOIDInfo(ptr) @ stdcall CryptVerifyCertificateSignature(long long ptr long ptr) @ stdcall CryptVerifyCertificateSignatureEx(long long long ptr long ptr long ptr) @ stdcall CryptVerifyDetachedMessageHash(ptr ptr long long ptr ptr ptr ptr) diff --git a/dlls/crypt32/oid.c b/dlls/crypt32/oid.c index c9b0b41..e9ccab7 100644 --- a/dlls/crypt32/oid.c +++ b/dlls/crypt32/oid.c @@ -1,6 +1,7 @@ /* * Copyright 2002 Mike McCormack for CodeWeavers * Copyright 2005-2006 Juan Lang + * Copyright 2018 Dmitry Timoshkov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -653,6 +654,48 @@ error_close_key: }
/*********************************************************************** + * CryptUnregisterOIDInfo (CRYPT32.@) + */ +BOOL WINAPI CryptUnregisterOIDInfo(PCCRYPT_OID_INFO info) +{ + char *key_name; + HKEY root; + DWORD err; + + TRACE("(%p)\n", info); + + if (!info || info->cbSize != sizeof(*info) || !info->pszOID) + { + SetLastError(E_INVALIDARG); + return FALSE; + } + + err = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\Microsoft\Cryptography\OID\EncodingType 0\CryptDllFindOIDInfo", 0, KEY_ALL_ACCESS, &root); + if (err != ERROR_SUCCESS) + { + SetLastError(err); + return FALSE; + } + + key_name = CryptMemAlloc(strlen(info->pszOID) + 16); + if (key_name) + { + sprintf(key_name, "%s!%u", info->pszOID, info->dwGroupId); + err = RegDeleteKeyA(root, key_name); + } + else + err = ERROR_OUTOFMEMORY; + + CryptMemFree(key_name); + RegCloseKey(root); + + if (err) + SetLastError(err); + + return !err; +} + +/*********************************************************************** * CryptRegisterOIDInfo (CRYPT32.@) */ BOOL WINAPI CryptRegisterOIDInfo(PCCRYPT_OID_INFO pInfo, DWORD dwFlags)