diff --git a/dlls/ntdll/reg.c b/dlls/ntdll/reg.c index 9be75649cc3..271abb03768 100644 --- a/dlls/ntdll/reg.c +++ b/dlls/ntdll/reg.c @@ -261,6 +261,8 @@ static NTSTATUS RTL_ReportRegistryValue(PKEY_VALUE_FULL_INFORMATION pInfo, if (pQuery->Flags & RTL_QUERY_REGISTRY_DIRECT) { + if (pQuery->QueryRoutine) + return STATUS_INVALID_PARAMETER; if (str->MaximumLength < default_size) return STATUS_BUFFER_TOO_SMALL; memcpy(str->Buffer, pQuery->DefaultData, default_size); @@ -277,6 +279,9 @@ static NTSTATUS RTL_ReportRegistryValue(PKEY_VALUE_FULL_INFORMATION pInfo, if (pQuery->Flags & RTL_QUERY_REGISTRY_DIRECT) { + if (pQuery->QueryRoutine) + return STATUS_INVALID_PARAMETER; + switch(pInfo->Type) { case REG_EXPAND_SZ: diff --git a/dlls/ntdll/tests/reg.c b/dlls/ntdll/tests/reg.c index 9449cd2f904..eda20c35e9f 100644 --- a/dlls/ntdll/tests/reg.c +++ b/dlls/ntdll/tests/reg.c @@ -2662,7 +2662,12 @@ static struct query_reg_values_test query_reg_values_tests[] = /* DIRECT doesn't call the query routine and reads directly into a buffer */ { {{ query_routine, RTL_QUERY_REGISTRY_DIRECT, (WCHAR*)L"WindowsDrive", &query_reg_values_direct_str }}, - STATUS_INVALID_PARAMETER, 0, WINE_TODO_RET | WINE_TODO_NAME | WINE_TODO_TYPE | WINE_TODO_SIZE | WINE_TODO_DATA + STATUS_INVALID_PARAMETER, 0 + }, + { + {{ query_routine, RTL_QUERY_REGISTRY_DIRECT, (WCHAR*)L"I don't exist", + &query_reg_values_direct_str, REG_SZ, (WCHAR*)L"Some default" }}, + STATUS_INVALID_PARAMETER, 0 }, { {{ NULL, RTL_QUERY_REGISTRY_DIRECT, (WCHAR*)L"WindowsDrive", &query_reg_values_direct_str }},