advapi32: Implemented RegDeleteKeyExA/W.
This commit is contained in:
parent
8543c32442
commit
9b7d1041fc
|
@ -472,6 +472,8 @@
|
|||
@ stdcall RegCreateKeyExW(long wstr long ptr long long ptr ptr ptr)
|
||||
@ stdcall RegCreateKeyW(long wstr ptr)
|
||||
@ stdcall RegDeleteKeyA(long str)
|
||||
@ stdcall RegDeleteKeyExA(long str long long)
|
||||
@ stdcall RegDeleteKeyExW(long wstr long long)
|
||||
@ stdcall RegDeleteKeyW(long wstr)
|
||||
@ stdcall RegDeleteTreeA(long str)
|
||||
@ stdcall RegDeleteTreeW(long wstr)
|
||||
|
|
|
@ -931,11 +931,9 @@ LSTATUS WINAPI RegCloseKey( HKEY hkey )
|
|||
|
||||
|
||||
/******************************************************************************
|
||||
* RegDeleteKeyW [ADVAPI32.@]
|
||||
*
|
||||
* See RegDeleteKeyA.
|
||||
* RegDeleteKeyExW [ADVAPI32.@]
|
||||
*/
|
||||
LSTATUS WINAPI RegDeleteKeyW( HKEY hkey, LPCWSTR name )
|
||||
LSTATUS WINAPI RegDeleteKeyExW( HKEY hkey, LPCWSTR name, REGSAM access, DWORD reserved )
|
||||
{
|
||||
DWORD ret;
|
||||
HKEY tmp;
|
||||
|
@ -944,7 +942,8 @@ LSTATUS WINAPI RegDeleteKeyW( HKEY hkey, LPCWSTR name )
|
|||
|
||||
if (!(hkey = get_special_root_hkey( hkey ))) return ERROR_INVALID_HANDLE;
|
||||
|
||||
if (!(ret = RegOpenKeyExW( hkey, name, 0, DELETE, &tmp )))
|
||||
access &= KEY_WOW64_64KEY | KEY_WOW64_32KEY;
|
||||
if (!(ret = RegOpenKeyExW( hkey, name, 0, access | DELETE, &tmp )))
|
||||
{
|
||||
ret = RtlNtStatusToDosError( NtDeleteKey( tmp ) );
|
||||
RegCloseKey( tmp );
|
||||
|
@ -954,6 +953,50 @@ LSTATUS WINAPI RegDeleteKeyW( HKEY hkey, LPCWSTR name )
|
|||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* RegDeleteKeyW [ADVAPI32.@]
|
||||
*
|
||||
* See RegDeleteKeyA.
|
||||
*/
|
||||
LSTATUS WINAPI RegDeleteKeyW( HKEY hkey, LPCWSTR name )
|
||||
{
|
||||
return RegDeleteKeyExW( hkey, name, 0, 0 );
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* RegDeleteKeyExA [ADVAPI32.@]
|
||||
*/
|
||||
LSTATUS WINAPI RegDeleteKeyExA( HKEY hkey, LPCSTR name, REGSAM access, DWORD reserved )
|
||||
{
|
||||
DWORD ret;
|
||||
HKEY tmp;
|
||||
|
||||
if (!name) return ERROR_INVALID_PARAMETER;
|
||||
|
||||
if (!(hkey = get_special_root_hkey( hkey ))) return ERROR_INVALID_HANDLE;
|
||||
|
||||
access &= KEY_WOW64_64KEY | KEY_WOW64_32KEY;
|
||||
if (!(ret = RegOpenKeyExA( hkey, name, 0, access | DELETE, &tmp )))
|
||||
{
|
||||
if (!is_version_nt()) /* win95 does recursive key deletes */
|
||||
{
|
||||
CHAR name[MAX_PATH];
|
||||
|
||||
while(!RegEnumKeyA(tmp, 0, name, sizeof(name)))
|
||||
{
|
||||
if(RegDeleteKeyExA(tmp, name, access, reserved)) /* recurse */
|
||||
break;
|
||||
}
|
||||
}
|
||||
ret = RtlNtStatusToDosError( NtDeleteKey( tmp ) );
|
||||
RegCloseKey( tmp );
|
||||
}
|
||||
TRACE("%s ret=%08x\n", debugstr_a(name), ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* RegDeleteKeyA [ADVAPI32.@]
|
||||
*
|
||||
|
@ -974,30 +1017,7 @@ LSTATUS WINAPI RegDeleteKeyW( HKEY hkey, LPCWSTR name )
|
|||
*/
|
||||
LSTATUS WINAPI RegDeleteKeyA( HKEY hkey, LPCSTR name )
|
||||
{
|
||||
DWORD ret;
|
||||
HKEY tmp;
|
||||
|
||||
if (!name) return ERROR_INVALID_PARAMETER;
|
||||
|
||||
if (!(hkey = get_special_root_hkey( hkey ))) return ERROR_INVALID_HANDLE;
|
||||
|
||||
if (!(ret = RegOpenKeyExA( hkey, name, 0, DELETE, &tmp )))
|
||||
{
|
||||
if (!is_version_nt()) /* win95 does recursive key deletes */
|
||||
{
|
||||
CHAR name[MAX_PATH];
|
||||
|
||||
while(!RegEnumKeyA(tmp, 0, name, sizeof(name)))
|
||||
{
|
||||
if(RegDeleteKeyA(tmp, name)) /* recurse */
|
||||
break;
|
||||
}
|
||||
}
|
||||
ret = RtlNtStatusToDosError( NtDeleteKey( tmp ) );
|
||||
RegCloseKey( tmp );
|
||||
}
|
||||
TRACE("%s ret=%08x\n", debugstr_a(name), ret);
|
||||
return ret;
|
||||
return RegDeleteKeyExA( hkey, name, 0, 0 );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -104,6 +104,9 @@ WINADVAPI LSTATUS WINAPI RegCreateKeyExW(HKEY,LPCWSTR,DWORD,LPWSTR,DWORD,REGSA
|
|||
WINADVAPI LSTATUS WINAPI RegDeleteKeyA(HKEY,LPCSTR);
|
||||
WINADVAPI LSTATUS WINAPI RegDeleteKeyW(HKEY,LPCWSTR);
|
||||
#define RegDeleteKey WINELIB_NAME_AW(RegDeleteKey)
|
||||
WINADVAPI LSTATUS WINAPI RegDeleteKeyExA(HKEY,LPCSTR,REGSAM,DWORD);
|
||||
WINADVAPI LSTATUS WINAPI RegDeleteKeyExW(HKEY,LPCWSTR,REGSAM,DWORD);
|
||||
#define RegDeleteKeyEx WINELIB_NAME_AW(RegDeleteKeyEx)
|
||||
WINADVAPI LSTATUS WINAPI RegDeleteKeyValueA(HKEY,LPCSTR,LPCSTR);
|
||||
WINADVAPI LSTATUS WINAPI RegDeleteKeyValueW(HKEY,LPCWSTR,LPCWSTR);
|
||||
#define RegDeleteKeyValue WINELIB_NAME_AW(RegDeleteKeyValue)
|
||||
|
|
Loading…
Reference in New Issue