[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[win-pv-devel] [PATCH 4/4] Registry string value types cannot be inferred



Following a similar fix in XENBUS this patch adds an explicit Type parameter
to RegistryUpdateSzValue(). It also adds a similar parameter to
RegistryQuerySzValue() so that code querying a string value can find out
what type it is.

Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
 src/xenvif/fdo.c      |  1 +
 src/xenvif/pdo.c      |  4 ++++
 src/xenvif/registry.c | 10 ++++++----
 src/xenvif/registry.h |  2 ++
 src/xenvif/settings.c |  3 +++
 5 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/xenvif/fdo.c b/src/xenvif/fdo.c
index 91d66dc..c4c8052 100644
--- a/src/xenvif/fdo.c
+++ b/src/xenvif/fdo.c
@@ -976,6 +976,7 @@ FdoScan(
         if (ParametersKey != NULL) {
             status = RegistryQuerySzValue(ParametersKey,
                                           "UnsupportedDevices",
+                                          NULL,
                                           &UnsupportedDevices);
             if (!NT_SUCCESS(status))
                 UnsupportedDevices = NULL;
diff --git a/src/xenvif/pdo.c b/src/xenvif/pdo.c
index e8264e2..77fee31 100644
--- a/src/xenvif/pdo.c
+++ b/src/xenvif/pdo.c
@@ -749,6 +749,7 @@ PdoSetFriendlyName(
 
     status = RegistryQuerySzValue(SoftwareKey,
                                   "DriverDesc",
+                                  NULL,
                                   &DriverDesc);
     if (!NT_SUCCESS(status))
         goto fail1;
@@ -767,6 +768,7 @@ PdoSetFriendlyName(
 
     status = RegistryUpdateSzValue(HardwareKey,
                                    "FriendlyName",
+                                   REG_SZ,
                                    FriendlyName);
     if (!NT_SUCCESS(status))
         goto fail3;
@@ -802,6 +804,7 @@ __PdoSetCurrentAddress(
 
     status = RegistryQuerySzValue(Key,
                                   "NetworkAddress",
+                                  NULL,
                                   &Ansi);
     if (!NT_SUCCESS(status))
         goto done;
@@ -1106,6 +1109,7 @@ PdoGetInterfaceGuid(
 
     status = RegistryQuerySzValue(Key,
                                   "NetCfgInstanceId",
+                                  NULL,
                                   &Ansi);
     if (!NT_SUCCESS(status))
         goto fail1;
diff --git a/src/xenvif/registry.c b/src/xenvif/registry.c
index affaacd..f903922 100644
--- a/src/xenvif/registry.c
+++ b/src/xenvif/registry.c
@@ -808,6 +808,7 @@ NTSTATUS
 RegistryQuerySzValue(
     IN  HANDLE                      Key,
     IN  PCHAR                       Name,
+    OUT PULONG                      Type OPTIONAL,
     OUT PANSI_STRING                *Array
     )
 {
@@ -869,6 +870,9 @@ RegistryQuerySzValue(
     if (*Array == NULL)
         goto fail5;
 
+    if (Type != NULL)
+        *Type = Value->Type;
+
     __RegistryFree(Value);
 
     RtlFreeUnicodeString(&Unicode);
@@ -1104,7 +1108,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;
 
@@ -1258,12 +1262,12 @@ NTSTATUS
 RegistryUpdateSzValue(
     IN  HANDLE                      Key,
     IN  PCHAR                       Name,
+    IN  ULONG                       Type,
     IN  PANSI_STRING                Array
     )
 {
     ANSI_STRING                     Ansi;
     UNICODE_STRING                  Unicode;
-    ULONG                           Type;
     PKEY_VALUE_PARTIAL_INFORMATION  Partial;
     NTSTATUS                        status;
 
@@ -1273,8 +1277,6 @@ RegistryUpdateSzValue(
     if (!NT_SUCCESS(status))
         goto fail1;
 
-    Type = (Array[1].Buffer != NULL) ? REG_MULTI_SZ : REG_SZ;
-
     switch (Type) {
     case REG_SZ:
         status = STATUS_NO_MEMORY;
diff --git a/src/xenvif/registry.h b/src/xenvif/registry.h
index 71ce18b..e39ccb5 100644
--- a/src/xenvif/registry.h
+++ b/src/xenvif/registry.h
@@ -132,6 +132,7 @@ extern NTSTATUS
 RegistryQuerySzValue(
     IN  HANDLE          Key,
     IN  PCHAR           Name,
+    OUT PULONG          Type OPTIONAL,
     OUT PANSI_STRING    *Array
     );
 
@@ -177,6 +178,7 @@ extern NTSTATUS
 RegistryUpdateSzValue(
     IN  HANDLE          Key,
     IN  PCHAR           Name,
+    IN  ULONG           Type,
     IN  PANSI_STRING    Array
     );
 
diff --git a/src/xenvif/settings.c b/src/xenvif/settings.c
index 73a02fb..34af953 100644
--- a/src/xenvif/settings.c
+++ b/src/xenvif/settings.c
@@ -90,14 +90,17 @@ SettingsCopyInterfaceValue(
     }
     case REG_SZ:
     case REG_MULTI_SZ: {
+        ULONG           Type;
         PANSI_STRING    Value;
 
         status = RegistryQuerySzValue(SourceKey,
                                       ValueName->Buffer,
+                                      &Type,
                                       &Value);
         if (NT_SUCCESS(status)) {
             (VOID) RegistryUpdateSzValue(Parameters->DestinationKey,
                                          ValueName->Buffer,
+                                         Type,
                                          Value);
             RegistryFreeSzValue(Value);
         }
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.