Maarten Lankhorst : dsound: Runtime link to advapi32.RegDeleteTree.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Sep 11 07:28:38 CDT 2007


Module: wine
Branch: master
Commit: beaa1cde641a0f6a3ed2594df36bcb428f9a1f5e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=beaa1cde641a0f6a3ed2594df36bcb428f9a1f5e

Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date:   Sat Sep  1 15:59:08 2007 +0200

dsound: Runtime link to advapi32.RegDeleteTree.

---

 dlls/dsound/regsvr.c |   17 +++++++++++++----
 1 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/dlls/dsound/regsvr.c b/dlls/dsound/regsvr.c
index 2549043..1609910 100644
--- a/dlls/dsound/regsvr.c
+++ b/dlls/dsound/regsvr.c
@@ -34,6 +34,9 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(dsound);
 
+static typeof(RegDeleteTreeW) * pRegDeleteTreeW;
+static typeof(RegDeleteTreeA) * pRegDeleteTreeA;
+
 /*
  * Near the bottom of this file are the exported DllRegisterServer and
  * DllUnregisterServer, which make all this worthwhile.
@@ -203,7 +206,7 @@ static HRESULT unregister_interfaces(struct regsvr_interface const *list)
 	WCHAR buf[39];
 
 	StringFromGUID2(list->iid, buf, 39);
-	res = RegDeleteTreeW(interface_key, buf);
+	res = pRegDeleteTreeW(interface_key, buf);
 	if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS;
     }
 
@@ -311,18 +314,18 @@ static HRESULT unregister_coclasses(struct regsvr_coclass const *list)
 	WCHAR buf[39];
 
 	StringFromGUID2(list->clsid, buf, 39);
-	res = RegDeleteTreeW(coclass_key, buf);
+	res = pRegDeleteTreeW(coclass_key, buf);
 	if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS;
 	if (res != ERROR_SUCCESS) goto error_close_coclass_key;
 
 	if (list->progid) {
-	    res = RegDeleteTreeA(HKEY_CLASSES_ROOT, list->progid);
+	    res = pRegDeleteTreeA(HKEY_CLASSES_ROOT, list->progid);
 	    if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS;
 	    if (res != ERROR_SUCCESS) goto error_close_coclass_key;
 	}
 
 	if (list->viprogid) {
-	    res = RegDeleteTreeA(HKEY_CLASSES_ROOT, list->viprogid);
+	    res = pRegDeleteTreeA(HKEY_CLASSES_ROOT, list->viprogid);
 	    if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS;
 	    if (res != ERROR_SUCCESS) goto error_close_coclass_key;
 	}
@@ -511,6 +514,12 @@ HRESULT WINAPI DllUnregisterServer(void)
 {
     HRESULT hr;
 
+    HMODULE advapi32 = GetModuleHandleA("advapi32");
+    if (!advapi32) return E_FAIL;
+    pRegDeleteTreeA = (typeof(RegDeleteTreeA)*) GetProcAddress(advapi32, "RegDeleteTreeA");
+    pRegDeleteTreeW = (typeof(RegDeleteTreeW)*) GetProcAddress(advapi32, "RegDeleteTreeW");
+    if (!pRegDeleteTreeA || !pRegDeleteTreeW) return E_FAIL;
+
     TRACE("\n");
 
     hr = unregister_coclasses(coclass_list);




More information about the wine-cvs mailing list