inkobj: Implement DllRegisterServer

John Klehm xixsimplicityxix at gmail.com
Fri Aug 24 03:01:40 CDT 2007


This patch makes use of the list of keys and DllUnregisterServer from
the previous two patches.

-John Klehm
-------------- next part --------------
From d222cc2aac1e3c8e34c935883a184ca5ed7ff5c3 Mon Sep 17 00:00:00 2001
From: John Klehm <xixsimplicityxix at gmail.com>
Date: Thu, 23 Aug 2007 22:26:22 -0500
Subject: inkobj: Implement DllRegisterServer

---
 dlls/inkobj/inkobj.c |   42 ++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/dlls/inkobj/inkobj.c b/dlls/inkobj/inkobj.c
index fdeb52e..645e4dc 100644
--- a/dlls/inkobj/inkobj.c
+++ b/dlls/inkobj/inkobj.c
@@ -95,6 +95,44 @@ HRESULT WINAPI DllUnregisterServer(void)
  */
 HRESULT WINAPI DllRegisterServer(void)
 {
-    FIXME("Not implemented.\n");
-    return E_UNEXPECTED; /* unable to register */
+    HRESULT result = S_OK;
+    HKEY tempKey = NULL;
+    LONG error = ERROR_SUCCESS;
+    unsigned int i = 0;
+    unsigned int numberOfKeys =
+        sizeof(inkobj_registry_keys) / sizeof(inkobj_registry_keys[0]);
+
+    TRACE("Entering key registering loop\n");
+
+    for (; i < numberOfKeys; ++i)
+    {
+        const char* keyName = inkobj_registry_keys[i][0];
+        const char* valueName = inkobj_registry_keys[i][1];
+        const char* value = inkobj_registry_keys[i][2];
+
+        TRACE("Creating key: %s\n", keyName);
+        error = RegCreateKeyA(HKEY_LOCAL_MACHINE, keyName, &tempKey);
+        if (error == ERROR_SUCCESS)
+        {
+            if (value != NULL)
+            {
+                TRACE("Setting value name: %s, value: %s\n", valueName, value);
+                error = RegSetValueExA(tempKey, valueName, 0, REG_SZ,
+                    (const BYTE*)value, (strlen(value) + 1));
+            }
+            RegCloseKey(tempKey);
+        }
+
+        /* something messed up somewhere so undo everthing */
+        if (error != ERROR_SUCCESS)
+        {
+            TRACE("Error registering key: %s\n", keyName);
+            DllUnregisterServer();
+
+            result = HRESULT_FROM_WIN32(error);
+            break; /* no point in going on once we've messed up */
+        }
+    }
+
+    return result;
 }
-- 
1.5.1.6



More information about the wine-patches mailing list