RegDeleteTreeA

Paul Vriens paul.vriens.wine at gmail.com
Sun Apr 1 13:19:07 CDT 2007


Stefan Leichter wrote:
> ChangeLog
> --------------
> 	add some tests for RegDeleteTreeA
> 
Hi Stefan

good to see someone picked up this thing. I ran your new tests on Vista Ultimate 
  and comments are below. (I ran the tests while bypassing UAC, as administrator).
> 
> ------------------------------------------------------------------------
> 
> --- ../wine-git/dlls/advapi32/tests/registry.c	2007-03-17 08:36:33.000000000 +0100
> +++ dlls/advapi32/tests/registry.c	2007-04-01 14:00:12.000000000 +0200
> @@ -35,6 +35,7 @@
>  
>  static HMODULE hadvapi32;
>  static DWORD (WINAPI *pRegGetValueA)(HKEY,LPCSTR,LPCSTR,DWORD,LPDWORD,PVOID,LPDWORD);
> +static DWORD (WINAPI *pRegDeleteTreeA)(HKEY,LPCSTR);
>  
>  #define ADVAPI32_GET_PROC(func) \
>      p ## func = (void*)GetProcAddress(hadvapi32, #func); \
> @@ -47,6 +48,7 @@
>  
>      /* This function was introduced with Windows 2003 SP1 */
>      ADVAPI32_GET_PROC(RegGetValueA)
> +    ADVAPI32_GET_PROC(RegDeleteTreeA)
>  }
>  
>  /* delete key and all its subkeys */
> @@ -872,6 +874,53 @@
>      RegDeleteKeyA(subkey, "");
>  }
>  
> +static void test_reg_delete_tree(void)
> +{
> +    CHAR buffer[MAX_PATH];
> +    HKEY subkey, subkey2;
> +    LONG size, ret;
> +
> +    if(!pRegDeleteTreeA) return;

Can you add a skip here?

> +
> +    ret = RegCreateKeyA(hkey_main, "subkey", &subkey);
> +    ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret);
> +    ret = RegCreateKeyA(subkey, "subkey2", &subkey2);
> +    ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret);
> +    ret = RegSetValueA(subkey, NULL, REG_SZ, "data", 4);
> +    ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret);
> +    ret = RegSetValueA(subkey2, NULL, REG_SZ, "data2", 5);
> +    ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret);
> +    ret = RegCloseKey(subkey2);
> +    ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret);
> +    
> +    ret = pRegDeleteTreeA(subkey, "subkey2");
> +    ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret);
> +    ok(RegOpenKeyA(subkey, "subkey2", &subkey2),
> +        "subkey2 was not deleted\n");
> +    size = MAX_PATH;
> +    ok(!RegQueryValueA(subkey, "subkey", buffer, &size),
> +        "Default value of subkey not longer present\n");

This test fails so it must mean the default value should have been deleted.

> +
> +    ret = RegCreateKeyA(subkey, "subkey2", &subkey2);
> +    ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret);
> +    ret = RegCloseKey(subkey2);
> +    ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret);
> +    ret = pRegDeleteTreeA(hkey_main, "subkey\\subkey2");
> +    ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret);
> +    ok(RegOpenKeyA(subkey, "subkey2", &subkey2),
> +        "subkey2 was not deleted\n");
> +    ok(!RegQueryValueA(subkey, "subkey", buffer, &size),
> +        "Default value of subkey not longer present\n");

This test fails so it must mean the default value should have been deleted.

> +    
> +    ret = pRegDeleteTreeA(subkey, NULL);
> +    ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret);
> +    ok(RegOpenKeyA(hkey_main, "subkey", &subkey),
> +        "subkey was not deleted\n");

The subkey will not be deleted by RegDeleteTree (see MSDN). This is the main 
difference between RegDeleteTree and SHDeleteKey (where the main key is deleted).

> +
> +    ret = pRegDeleteTreeA(hkey_main, "not-here");
> +    trace("deleting an not existing key returned %d\n", ret);

The answer to this one is 2 : ERROR_FILE_NOT_FOUND

> +}
> +
>  START_TEST(registry)
>  {
>      /* Load pointers for functions that are not available in all Windows versions */
> @@ -901,6 +950,8 @@
>          set_privileges(SE_RESTORE_NAME, FALSE);
>      }
>  
> +    test_reg_delete_tree();
> +
>      /* cleanup */
>      delete_key( hkey_main );
>      
> 
> 
> ------------------------------------------------------------------------
> 
> 

Cheers,

Paul.




More information about the wine-devel mailing list