mirror of
https://github.com/reactos/reactos.git
synced 2025-05-29 05:58:13 +00:00
[WINESYNC] reg: Fail if access is denied when deleting registry data.
Signed-off-by: Hugh McMaster <hugh.mcmaster@outlook.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org> wine commit id ab64b0e33972b31b648ee92922b1df78cb6b5a70 by Hugh McMaster <hugh.mcmaster@outlook.com>
This commit is contained in:
parent
64312c4fd4
commit
6fa073aacd
2 changed files with 29 additions and 8 deletions
|
@ -18,9 +18,27 @@
|
||||||
|
|
||||||
#include "reg.h"
|
#include "reg.h"
|
||||||
|
|
||||||
|
static BOOL op_delete_key = TRUE;
|
||||||
|
|
||||||
|
static void output_error(LONG rc)
|
||||||
|
{
|
||||||
|
if (rc == ERROR_FILE_NOT_FOUND)
|
||||||
|
{
|
||||||
|
if (op_delete_key)
|
||||||
|
output_message(STRING_KEY_NONEXIST);
|
||||||
|
else
|
||||||
|
output_message(STRING_VALUE_NONEXIST);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
output_message(STRING_ACCESS_DENIED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int run_delete(HKEY root, WCHAR *path, WCHAR *key_name, WCHAR *value_name,
|
static int run_delete(HKEY root, WCHAR *path, WCHAR *key_name, WCHAR *value_name,
|
||||||
BOOL value_empty, BOOL value_all, BOOL force)
|
BOOL value_empty, BOOL value_all, BOOL force)
|
||||||
{
|
{
|
||||||
|
LONG rc;
|
||||||
HKEY hkey;
|
HKEY hkey;
|
||||||
|
|
||||||
if (!force)
|
if (!force)
|
||||||
|
@ -44,26 +62,28 @@ static int run_delete(HKEY root, WCHAR *path, WCHAR *key_name, WCHAR *value_name
|
||||||
/* Delete registry key if no /v* option is given */
|
/* Delete registry key if no /v* option is given */
|
||||||
if (!value_name && !value_empty && !value_all)
|
if (!value_name && !value_empty && !value_all)
|
||||||
{
|
{
|
||||||
if (RegDeleteTreeW(root, path) != ERROR_SUCCESS)
|
if ((rc = RegDeleteTreeW(root, path)))
|
||||||
{
|
{
|
||||||
output_message(STRING_KEY_NONEXIST);
|
output_error(rc);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
output_message(STRING_SUCCESS);
|
output_message(STRING_SUCCESS);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (RegOpenKeyExW(root, path, 0, KEY_READ|KEY_SET_VALUE, &hkey))
|
if ((rc = RegOpenKeyExW(root, path, 0, KEY_READ|KEY_SET_VALUE, &hkey)))
|
||||||
{
|
{
|
||||||
output_message(STRING_KEY_NONEXIST);
|
output_error(rc);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
op_delete_key = FALSE;
|
||||||
|
|
||||||
if (value_all)
|
if (value_all)
|
||||||
{
|
{
|
||||||
DWORD max_value_len = 256, value_len;
|
DWORD max_value_len = 256, value_len;
|
||||||
WCHAR *value_name;
|
WCHAR *value_name;
|
||||||
LONG rc;
|
|
||||||
|
|
||||||
value_name = malloc(max_value_len * sizeof(WCHAR));
|
value_name = malloc(max_value_len * sizeof(WCHAR));
|
||||||
|
|
||||||
|
@ -79,6 +99,7 @@ static int run_delete(HKEY root, WCHAR *path, WCHAR *key_name, WCHAR *value_name
|
||||||
free(value_name);
|
free(value_name);
|
||||||
RegCloseKey(hkey);
|
RegCloseKey(hkey);
|
||||||
output_message(STRING_VALUEALL_FAILED, key_name);
|
output_message(STRING_VALUEALL_FAILED, key_name);
|
||||||
|
output_error(rc);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -93,10 +114,10 @@ static int run_delete(HKEY root, WCHAR *path, WCHAR *key_name, WCHAR *value_name
|
||||||
}
|
}
|
||||||
else if (value_name || value_empty)
|
else if (value_name || value_empty)
|
||||||
{
|
{
|
||||||
if (RegDeleteValueW(hkey, value_name))
|
if ((rc = RegDeleteValueW(hkey, value_name)))
|
||||||
{
|
{
|
||||||
RegCloseKey(hkey);
|
RegCloseKey(hkey);
|
||||||
output_message(STRING_VALUE_NONEXIST);
|
output_error(rc);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,4 +4,4 @@ directories:
|
||||||
files:
|
files:
|
||||||
programs/reg/resource.h: base/applications/cmdutils/reg/resource.h
|
programs/reg/resource.h: base/applications/cmdutils/reg/resource.h
|
||||||
tags:
|
tags:
|
||||||
wine: 60c8dfdd0bbaff4a2369f884ec1a553a06735676
|
wine: ab64b0e33972b31b648ee92922b1df78cb6b5a70
|
||||||
|
|
Loading…
Reference in a new issue