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

[win-pv-devel] [PATCH] Use new monitor request key



The monitor service now uses a request key in registry under HKLM/SOFTWARE.
This patch modifies __DriverRequestReboot() to use the new key, which is
now set as a parameter by the INF file.

Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
 src/xenvif.inf      | 11 ++++-----
 src/xenvif/driver.c | 68 ++++++++++++++++++++++++++++++++++++-----------------
 2 files changed, 51 insertions(+), 28 deletions(-)

diff --git a/src/xenvif.inf b/src/xenvif.inf
index f230eea..5e5cbba 100644
--- a/src/xenvif.inf
+++ b/src/xenvif.inf
@@ -73,22 +73,20 @@ xenvif.sys
 AddService=xenvif,0x02,XenVif_Service,
 
 [XenVif_Service]
-DisplayName=%XenVifDesc%
+DisplayName=%XenVifName%
 ServiceType=%SERVICE_KERNEL_DRIVER% 
 StartType=%SERVICE_DEMAND_START% 
 ErrorControl=%SERVICE_ERROR_NORMAL% 
 ServiceBinary=%12%\xenvif.sys 
 LoadOrderGroup="NDIS"
-AddReg = XenVif_BootFlags, XenVif_Parameters, XenVif_Interfaces
+AddReg = XenVif_BootFlags, XenVif_Parameters
 
 [XenVif_BootFlags]
 HKR,,"BootFlags",0x00010003,0x81
 
 [XenVif_Parameters]
 HKR,"Parameters",,0x00000010
-
-[XenVif_Interfaces]
-HKR,"Interfaces",,0x00000010
+HKR,"Parameters","RequestKey",0x00000000,%RequestKey%
 
 [XenVif_Inst.CoInstallers]
 CopyFiles=CoInst_CopyFiles
@@ -101,7 +99,8 @@ 
HKR,,CoInstallers32,0x00010000,"xenvif_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@M
 
 Vendor="@VENDOR_NAME@"
 DiskDesc="@PRODUCT_NAME@ PV Network Class Package"
-XenVifDesc="@PRODUCT_NAME@ PV Network Class"
+XenVifName="@PRODUCT_NAME@ PV Network Class"
+RequestKey="SOFTWARE\@VENDOR_NAME@\@PRODUCT_NAME@\PV Driver Monitor\Request"
 
 SERVICE_BOOT_START=0x0 
 SERVICE_SYSTEM_START=0x1 
diff --git a/src/xenvif/driver.c b/src/xenvif/driver.c
index 27d4911..66962e0 100644
--- a/src/xenvif/driver.c
+++ b/src/xenvif/driver.c
@@ -31,6 +31,7 @@
 
 #include <ntddk.h>
 #include <procgrp.h>
+#include <ntstrsafe.h>
 #include <version.h>
 
 #include "registry.h"
@@ -116,55 +117,78 @@ DriverGetParametersKey(
     return __DriverGetParametersKey();
 }
 
-#define SERVICES_PATH 
"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Services"
-
-#define SERVICE_KEY(_Name) \
-        SERVICES_PATH ## "\\" ## #_Name
-
-#define REQUEST_KEY \
-        SERVICE_KEY(XENBUS_MONITOR) ## "\\Request"
+#define MAXNAMELEN  128
 
 static FORCEINLINE VOID
 __DriverRequestReboot(
     VOID
     )
 {
-    HANDLE      RequestKey;
-    ANSI_STRING Ansi[2];
-    NTSTATUS    status;
+    PANSI_STRING    Ansi;
+    CHAR            RequestKeyName[MAXNAMELEN];
+    HANDLE          RequestKey;
+    HANDLE          SubKey;
+    NTSTATUS        status;
 
     Info("====>\n");
 
     ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
 
+    status = RegistryQuerySzValue(__DriverGetParametersKey(),
+                                  "RequestKey",
+                                  NULL,
+                                  &Ansi);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = RtlStringCbPrintfA(RequestKeyName,
+                                MAXNAMELEN,
+                                "\\Registry\\Machine\\%Z",
+                                &Ansi[0]);
+    ASSERT(NT_SUCCESS(status));
+
     status = RegistryOpenSubKey(NULL,
-                                REQUEST_KEY,
+                                RequestKeyName,
                                 KEY_ALL_ACCESS,
                                 &RequestKey);
     if (!NT_SUCCESS(status))
-        goto fail1;
-
-    RtlZeroMemory(Ansi, sizeof (Ansi));
+        goto fail2;
 
-    RtlInitAnsiString(&Ansi[0], "XENVIF");
+    status = RegistryCreateSubKey(RequestKey,
+                                  __MODULE__,
+                                  REG_OPTION_NON_VOLATILE,
+                                  &SubKey);
+    if (!NT_SUCCESS(status))
+        goto fail3;
 
-    status = RegistryUpdateSzValue(RequestKey,
-                                   "Reboot",
-                                   REG_SZ,
-                                   Ansi);
+    status = RegistryUpdateDwordValue(SubKey,
+                                      "Reboot",
+                                      1);
     if (!NT_SUCCESS(status))
-        goto fail2;
+        goto fail4;
 
-    RegistryCloseKey(RequestKey);
+    RegistryCloseKey(SubKey);
+
+    RegistryFreeSzValue(Ansi);
 
     Info("<====\n");
 
     return;
 
+fail4:
+    Error("fail4\n");
+
+    RegistryCloseKey(SubKey);
+
+fail3:
+    Error("fail3\n");
+
+    RegistryCloseKey(RequestKey);
+
 fail2:
     Error("fail2\n");
 
-    RegistryCloseKey(RequestKey);
+    RegistryFreeSzValue(Ansi);
 
 fail1:
     Error("fail1 (%08x)\n", status);
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://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®.