inkobj: Implement DllUnregistryServer
John Klehm
xixsimplicityxix at gmail.com
Fri Aug 24 03:00:10 CDT 2007
Makes use of the registry keys list from the previous patch by
iterating through it and deleting the entries.
-John Klehm
-------------- next part --------------
From ea5af0e6ab0464e5958577c7830e4c1606d7d13e Mon Sep 17 00:00:00 2001
From: John Klehm <xixsimplicityxix at gmail.com>
Date: Thu, 23 Aug 2007 22:21:08 -0500
Subject: inkobj: Implement DllUnregisterServer
---
dlls/inkobj/Makefile.in | 2 +-
dlls/inkobj/inkobj.c | 35 +++++++++++++++++++++++++++++------
dlls/inkobj/inkobj_internal.h | 1 +
3 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/dlls/inkobj/Makefile.in b/dlls/inkobj/Makefile.in
index 932da81..ac1ab0a 100644
--- a/dlls/inkobj/Makefile.in
+++ b/dlls/inkobj/Makefile.in
@@ -3,7 +3,7 @@ TOPOBJDIR = ../..
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = inkobj.dll
-IMPORTS = kernel32
+IMPORTS = advapi32 kernel32
C_SRCS = \
inkobj.c
diff --git a/dlls/inkobj/inkobj.c b/dlls/inkobj/inkobj.c
index 8cddeb7..fdeb52e 100644
--- a/dlls/inkobj/inkobj.c
+++ b/dlls/inkobj/inkobj.c
@@ -16,6 +16,7 @@
*/
#include "inkobj_internal.h"
+#include "inkobj_registry_keys.h" /* inkobj_registry_keys[][3] */
WINE_DEFAULT_DEBUG_CHANNEL(inkobj);
@@ -59,18 +60,40 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
}
/*****************************************************
- * DllRegisterServer (INKOBJ.@)
+ * DllUnregisterServer (INKOBJ.@)
*/
-HRESULT WINAPI DllRegisterServer(void)
+HRESULT WINAPI DllUnregisterServer(void)
{
- FIXME("Not implemented.\n");
- return E_UNEXPECTED; /* unable to register */
+ HRESULT result = S_OK;
+ LONG error = ERROR_SUCCESS;
+ unsigned int i;
+ unsigned int numberOfKeys =
+ sizeof(inkobj_registry_keys) / sizeof(inkobj_registry_keys[0]);
+
+ /* this depends on the array of key names always having child keys
+ * listed after their parents
+ */
+ for (i = numberOfKeys - 1; i >= 0; --i)
+ {
+ error = RegDeleteKeyA(HKEY_LOCAL_MACHINE, inkobj_registry_keys[i][0]);
+ if (error != ERROR_SUCCESS)
+ {
+ TRACE("Error deleting key: %s\n", inkobj_registry_keys[i][0]);
+ result = HRESULT_FROM_WIN32(error);
+ }
+ else
+ {
+ TRACE("Deleted key: %s\n", inkobj_registry_keys[i][0]);
+ }
+ }
+
+ return result;
}
/*****************************************************
- * DllUnregisterServer (INKOBJ.@)
+ * DllRegisterServer (INKOBJ.@)
*/
-HRESULT WINAPI DllUnregisterServer(void)
+HRESULT WINAPI DllRegisterServer(void)
{
FIXME("Not implemented.\n");
return E_UNEXPECTED; /* unable to register */
diff --git a/dlls/inkobj/inkobj_internal.h b/dlls/inkobj/inkobj_internal.h
index 7dc9933..dba3a1d 100644
--- a/dlls/inkobj/inkobj_internal.h
+++ b/dlls/inkobj/inkobj_internal.h
@@ -22,6 +22,7 @@
#include <windef.h> /* MUST be before most includes */
#include <winbase.h> /* MUST be before most includes */
#include <winerror.h> /* MUST be before most includes */
+#include <winreg.h> /* RegDeleteKey, RegCreateKey, RegSetValue */
#include <wine/debug.h> /* FIXME, TRACE, WARN, ERR */
--
1.5.1.6
More information about the wine-patches
mailing list