From 0b89c5a264186c6893d4f24bdd017d5f71f668f5 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Fri, 5 Oct 2018 16:40:47 +0800 Subject: [PATCH] crypt32: Implement CryptUnregisterOIDInfo. Signed-off-by: Dmitry Timoshkov Signed-off-by: Alexandre Julliard --- 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 0bc78a158d0..64d5aa93fdf 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 c9b0b412cf5..e9ccab74946 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 @@ -652,6 +653,48 @@ error_close_key: return TRUE; } +/*********************************************************************** + * 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.@) */