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

[win-pv-devel] [PATCH 1/2] Add registry setting for removable capability of PDOs



Setting "Removable" to 0 under the key
HKLM/System/CurrentControlSet/services/XENBUS/Parameters/<PDO-Name>
will disable the PDOs removable and surprise removable capability.

Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
 src/xenbus/pdo.c | 47 +++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 45 insertions(+), 2 deletions(-)

diff --git a/src/xenbus/pdo.c b/src/xenbus/pdo.c
index ad0d4de..9e84ccd 100644
--- a/src/xenbus/pdo.c
+++ b/src/xenbus/pdo.c
@@ -45,6 +45,7 @@
 #include "bus.h"
 #include "driver.h"
 #include "thread.h"
+#include "registry.h"
 #include "dbg_print.h"
 #include "assert.h"
 
@@ -61,6 +62,7 @@ struct _XENBUS_PDO {
     PIRP                        DevicePowerIrp;
 
     PXENBUS_FDO                 Fdo;
+    BOOLEAN                     Removable;
     BOOLEAN                     Missing;
     const CHAR                  *Reason;
 
@@ -1119,12 +1121,12 @@ PdoQueryCapabilities(
     Capabilities->DeviceD2 = 0;
     Capabilities->LockSupported = 0;
     Capabilities->EjectSupported = 0;
-    Capabilities->Removable = 1;
+    Capabilities->Removable = !!Pdo->Removable;
     Capabilities->DockDevice = 0;
     Capabilities->UniqueID = 1;
     Capabilities->SilentInstall = 1;
     Capabilities->RawDeviceOK = 0;
-    Capabilities->SurpriseRemovalOK = 1;
+    Capabilities->SurpriseRemovalOK = !!Pdo->Removable;
     Capabilities->HardwareDisabled = 0;
     Capabilities->NoDisplayInUI = 0;
 
@@ -2041,6 +2043,43 @@ PdoSuspend(
     UNREFERENCED_PARAMETER(Pdo);
 }
 
+static FORCEINLINE VOID
+__PdoReadRegistryFlags(
+    IN  PXENBUS_PDO     Pdo
+    )
+{
+    HANDLE              ParametersKey;
+    HANDLE              Key;
+    ULONG               Value;
+    NTSTATUS            status;
+
+    ParametersKey = DriverGetParametersKey();
+    if (ParametersKey == NULL)
+        goto fail1;
+
+    status = RegistryOpenSubKey(ParametersKey,
+                                __PdoGetName(Pdo),
+                                KEY_READ,
+                                &Key);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    status = RegistryQueryDwordValue(Key,
+                                     "Removable",
+                                     &Value);
+    if (!NT_SUCCESS(status))
+        Value = 1;
+
+    Pdo->Removable = !!Value;
+
+    RegistryCloseKey(Key);
+    return;
+
+fail2:
+fail1:
+    Pdo->Removable = TRUE;
+}
+
 NTSTATUS
 PdoCreate(
     IN  PXENBUS_FDO     Fdo,
@@ -2092,6 +2131,7 @@ PdoCreate(
         goto fail4;
 
     __PdoSetName(Pdo, Name);
+    __PdoReadRegistryFlags(Pdo);
 
     status = PdoSetRevisions(Pdo);
     if (!NT_SUCCESS(status))
@@ -2132,6 +2172,8 @@ fail6:
 fail5:
     Error("fail5\n");
 
+    Pdo->Removable = FALSE;
+
     ThreadAlert(Pdo->DevicePowerThread);
     ThreadJoin(Pdo->DevicePowerThread);
     Pdo->DevicePowerThread = NULL;
@@ -2195,6 +2237,7 @@ PdoDestroy(
     __PdoFree(Pdo->Revision);
     Pdo->Revision = NULL;
     Pdo->Count = 0;
+    Pdo->Removable = FALSE;
 
     ThreadAlert(Pdo->DevicePowerThread);
     ThreadJoin(Pdo->DevicePowerThread);
-- 
1.9.4.msysgit.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®.