Delete registry key at exit.

diff --git a/dlls/shlwapi/tests/shreg.c b/dlls/shlwapi/tests/shreg.c
index 460259d..5c2497a 100644
--- a/dlls/shlwapi/tests/shreg.c
+++ b/dlls/shlwapi/tests/shreg.c
@@ -42,7 +42,28 @@
 
 static char * sEmptyBuffer ="0123456789";
 
-static void create_test_entrys(void)
+/* delete key and all its subkeys */
+static DWORD delete_key( HKEY hkey )
+{
+    WCHAR name[MAX_PATH];
+    DWORD ret;
+
+    while (!(ret = RegEnumKeyW(hkey, 0, name, sizeof(name))))
+    {
+        HKEY tmp;
+        if (!(ret = RegOpenKeyExW( hkey, name, 0, KEY_ENUMERATE_SUB_KEYS, &tmp )))
+        {
+            ret = delete_key( tmp );
+            RegCloseKey( tmp );
+        }
+        if (ret) break;
+    }
+    if (ret != ERROR_NO_MORE_ITEMS) return ret;
+    RegDeleteKeyA( hkey, NULL );
+    return 0;
+}
+
+static HKEY create_test_entries(void)
 {
 	HKEY hKey;
 
@@ -56,7 +77,6 @@
            ok(!RegSetValueExA(hKey,"Test1",0,REG_EXPAND_SZ, sTestpath1, strlen(sTestpath1)+1), "RegSetValueExA failed");
            ok(!RegSetValueExA(hKey,"Test2",0,REG_SZ, sTestpath1, strlen(sTestpath1)+1), "RegSetValueExA failed");
            ok(!RegSetValueExA(hKey,"Test3",0,REG_EXPAND_SZ, sTestpath2, strlen(sTestpath2)+1), "RegSetValueExA failed");
-	   RegCloseKey(hKey);
 	}
 
 	sExpLen1 = ExpandEnvironmentStringsA(sTestpath1, sExpTestpath1, sizeof(sExpTestpath1));
@@ -64,6 +84,7 @@
 
         ok(sExpLen1 > 0, "Couldn't expand %s\n", sTestpath1);
         ok(sExpLen2 > 0, "Couldn't expand %s\n", sTestpath2);
+        return hKey;
 }
 
 static void test_SHGetValue(void)
@@ -243,9 +264,10 @@
 
 START_TEST(shreg)
 {
-	create_test_entrys();
+	HKEY hkey = create_test_entries();
 	test_SHGetValue();
 	test_SHQUeryValueEx();
 	test_SHGetRegPath();
 	test_SHCopyKey();
+        delete_key( hkey );
 }