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