|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH] Add Type parameter to RegistryQuerySzValue()
This allows the type of any existent UpperFilters value to be verified and
brings the registry code into line with XENVIF.
Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
src/common/registry.c | 6 +++++-
src/common/registry.h | 1 +
src/xen/system.c | 2 +-
src/xenbus/fdo.c | 3 +++
src/xenbus/filters.c | 44 ++++++++++++++++++++++++++++++--------------
src/xenfilt/driver.c | 1 +
src/xenfilt/pvdevice.c | 2 ++
7 files changed, 43 insertions(+), 16 deletions(-)
diff --git a/src/common/registry.c b/src/common/registry.c
index d6499c1..b75f16b 100644
--- a/src/common/registry.c
+++ b/src/common/registry.c
@@ -850,6 +850,7 @@ NTSTATUS
RegistryQuerySzValue(
IN HANDLE Key,
IN PCHAR Name,
+ OUT PULONG Type OPTIONAL,
OUT PANSI_STRING *Array
)
{
@@ -911,6 +912,9 @@ RegistryQuerySzValue(
if (*Array == NULL)
goto fail5;
+ if (Type != NULL)
+ *Type = Value->Type;
+
__RegistryFree(Value);
RtlFreeUnicodeString(&Unicode);
@@ -1146,7 +1150,7 @@ RegistryQuerySystemStartOption(
if (!NT_SUCCESS(status))
goto fail1;
- status = RegistryQuerySzValue(Key, "SystemStartOptions", &Ansi);
+ status = RegistryQuerySzValue(Key, "SystemStartOptions", NULL, &Ansi);
if (!NT_SUCCESS(status))
goto fail2;
diff --git a/src/common/registry.h b/src/common/registry.h
index ef0cf91..1ac13b8 100644
--- a/src/common/registry.h
+++ b/src/common/registry.h
@@ -145,6 +145,7 @@ extern NTSTATUS
RegistryQuerySzValue(
IN HANDLE Key,
IN PCHAR Name,
+ OUT PULONG Type OPTIONAL,
OUT PANSI_STRING *Array
);
diff --git a/src/xen/system.c b/src/xen/system.c
index f7be963..1a788ce 100644
--- a/src/xen/system.c
+++ b/src/xen/system.c
@@ -530,7 +530,7 @@ SystemGetStartOptions(
if (!NT_SUCCESS(status))
goto fail1;
- status = RegistryQuerySzValue(Key, "SystemStartOptions", &Ansi);
+ status = RegistryQuerySzValue(Key, "SystemStartOptions", NULL, &Ansi);
if (!NT_SUCCESS(status))
goto fail2;
diff --git a/src/xenbus/fdo.c b/src/xenbus/fdo.c
index 68d6e76..0a516a4 100644
--- a/src/xenbus/fdo.c
+++ b/src/xenbus/fdo.c
@@ -732,6 +732,7 @@ FdoSetFriendlyName(
status = RegistryQuerySzValue(SoftwareKey,
"DriverDesc",
+ NULL,
&DriverDesc);
if (!NT_SUCCESS(status))
goto fail3;
@@ -1366,6 +1367,7 @@ FdoScan(
status = RegistryQuerySzValue(ParametersKey,
"SyntheticClasses",
+ NULL,
&SyntheticClasses);
if (!NT_SUCCESS(status))
SyntheticClasses = NULL;
@@ -1384,6 +1386,7 @@ FdoScan(
if (ParametersKey != NULL) {
status = RegistryQuerySzValue(ParametersKey,
"SupportedClasses",
+ NULL,
&SupportedClasses);
if (!NT_SUCCESS(status))
SupportedClasses = NULL;
diff --git a/src/xenbus/filters.c b/src/xenbus/filters.c
index 651fcc2..8eb836b 100644
--- a/src/xenbus/filters.c
+++ b/src/xenbus/filters.c
@@ -72,6 +72,7 @@ FiltersInstallClass(
HANDLE ClassKey;
UNICODE_STRING Unicode;
HANDLE Key;
+ ULONG Type;
ULONG Count;
PANSI_STRING Old;
ULONG Index;
@@ -100,8 +101,12 @@ FiltersInstallClass(
Count = 0;
- status = RegistryQuerySzValue(Key, "UpperFilters", &Old);
+ status = RegistryQuerySzValue(Key, "UpperFilters", &Type, &Old);
if (NT_SUCCESS(status)) {
+ status = STATUS_INVALID_PARAMETER;
+ if (Type != REG_MULTI_SZ)
+ goto fail4;
+
for (Index = 0; Old[Index].Buffer != NULL; Index++) {
if (_stricmp(Old[Index].Buffer, DriverName) == 0)
goto done;
@@ -116,7 +121,7 @@ FiltersInstallClass(
status = STATUS_NO_MEMORY;
if (New == NULL)
- goto fail4;
+ goto fail5;
Index = 0;
while (Index < Count) {
@@ -131,7 +136,7 @@ FiltersInstallClass(
REG_MULTI_SZ,
New);
if (!NT_SUCCESS(status))
- goto fail5;
+ goto fail6;
__FiltersFree(New);
@@ -151,17 +156,20 @@ done:
return STATUS_SUCCESS;
-fail5:
- Error("fail5\n");
+fail6:
+ Error("fail6\n");
__FiltersFree(New);
-fail4:
- Error("fail4\n");
+fail5:
+ Error("fail5\n");
if (Old != NULL)
RegistryFreeSzValue(Old);
+fail4:
+ Error("fail4\n");
+
RegistryCloseKey(Key);
fail3:
@@ -193,6 +201,7 @@ FiltersUninstallClass(
HANDLE ClassKey;
UNICODE_STRING Unicode;
HANDLE Key;
+ ULONG Type;
ULONG Count;
PANSI_STRING Old;
ULONG Index;
@@ -219,8 +228,12 @@ FiltersUninstallClass(
if (!NT_SUCCESS(status))
goto fail3;
- status = RegistryQuerySzValue(Key, "UpperFilters", &Old);
+ status = RegistryQuerySzValue(Key, "UpperFilters", &Type, &Old);
if (NT_SUCCESS(status)) {
+ status = STATUS_INVALID_PARAMETER;
+ if (Type != REG_MULTI_SZ)
+ goto fail4;
+
for (Index = 0; Old[Index].Buffer != NULL; Index++) {
if (_stricmp(Old[Index].Buffer, DriverName) == 0)
goto found;
@@ -238,7 +251,7 @@ found:
status = STATUS_NO_MEMORY;
if (New == NULL)
- goto fail4;
+ goto fail5;
Count = 0;
for (Index = 0; Old[Index].Buffer != NULL; Index++) {
@@ -254,7 +267,7 @@ found:
REG_MULTI_SZ,
New);
if (!NT_SUCCESS(status))
- goto fail5;
+ goto fail6;
__FiltersFree(New);
@@ -274,17 +287,20 @@ done:
return STATUS_SUCCESS;
-fail5:
- Error("fail5\n");
+fail6:
+ Error("fail6\n");
__FiltersFree(New);
-fail4:
- Error("fail4\n");
+fail5:
+ Error("fail5\n");
if (Old != NULL)
RegistryFreeSzValue(Old);
+fail4:
+ Error("fail4\n");
+
RegistryCloseKey(Key);
fail3:
diff --git a/src/xenfilt/driver.c b/src/xenfilt/driver.c
index 84766dd..342d2b2 100644
--- a/src/xenfilt/driver.c
+++ b/src/xenfilt/driver.c
@@ -570,6 +570,7 @@ DriverAddDevice(
status = RegistryQuerySzValue(ParametersKey,
DeviceID,
+ NULL,
&Type);
if (NT_SUCCESS(status)) {
__DriverAcquireMutex();
diff --git a/src/xenfilt/pvdevice.c b/src/xenfilt/pvdevice.c
index 296608c..04d8193 100644
--- a/src/xenfilt/pvdevice.c
+++ b/src/xenfilt/pvdevice.c
@@ -140,6 +140,7 @@ PvdeviceGetActive(
status = RegistryQuerySzValue(ParametersKey,
"ActiveDeviceID",
+ NULL,
&Ansi);
if (!NT_SUCCESS(status))
goto fail1;
@@ -154,6 +155,7 @@ PvdeviceGetActive(
status = RegistryQuerySzValue(ParametersKey,
"ActiveInstanceID",
+ NULL,
&Ansi);
if (!NT_SUCCESS(status))
goto fail2;
--
2.1.1
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |