RegistryFreeSzValue(Option);
}
+static FORCEINLINE HANDLE
+__DriverGetParametersKey(
+ VOID
+ )
+{
+ return Driver.ParametersKey;
+}
+
+HANDLE
+DriverGetParametersKey(
+ VOID
+ )
+{
+ return __DriverGetParametersKey();
+}
+
NTSTATUS
DriverDispatchPnp(
IN PDEVICE_OBJECT DeviceObject,
*/
#include "frontend.h"
+#include "registry.h"
#include "driver.h"
#include "fdo.h"
#include "pdoinquiry.h"
{
NTSTATUS status;
PCHAR Buffer;
+ ULONG Override;
BOOLEAN Old = *Value;
status = XENBUS_STORE(Read,
Frontend->Store,
Buffer);
+ // check registry for disable-override
+ status = RegistryQueryDwordValue(DriverGetParametersKey(),
+ Name,
+ &Override);
+ if (NT_SUCCESS(status)) {
+ if (Override == 0)
+ *Value = FALSE;
+ }
+
return Old != *Value;
}
FrontendReadValue32(
IN PXENVBD_FRONTEND Frontend,
IN PCHAR Name,
+ IN BOOLEAN AllowOverride,
IN PULONG Value
)
{
NTSTATUS status;
PCHAR Buffer;
+ ULONG Override;
ULONG Old = *Value;
status = XENBUS_STORE(Read,
Frontend->Store,
Buffer);
+ // check registry for disable-override
+ if (AllowOverride) {
+ status = RegistryQueryDwordValue(DriverGetParametersKey(),
+ Name,
+ &Override);
+ if (NT_SUCCESS(status)) {
+ *Value = Override;
+ }
+ }
+
return Old != *Value;
}
Changed |= FrontendReadValue32(Frontend,
"info",
+ FALSE,
&Frontend->DiskInfo.DiskInfo);
Changed |= FrontendReadValue32(Frontend,
"sector-size",
+ FALSE,
&Frontend->DiskInfo.SectorSize);
Changed |= FrontendReadValue32(Frontend,
"physical-sector-size",
+ FALSE,
&Frontend->DiskInfo.PhysSectorSize);
Changed |= FrontendReadValue64(Frontend,
"sectors",
&Frontend->Caps.Removable);
Changed |= FrontendReadValue32(Frontend,
"feature-max-indirect-segments",
+ TRUE,
&Frontend->Features.Indirect);
Changed |= FrontendReadFeature(Frontend,
"feature-persistent",
&Frontend->DiskInfo.DiscardSecure);
Changed |= FrontendReadValue32(Frontend,
"discard-alignment",
+ TRUE,
&Frontend->DiskInfo.DiscardAlignment);
Changed |= FrontendReadValue32(Frontend,
"discard-granularity",
+ TRUE,
&Frontend->DiskInfo.DiscardGranularity);
if (!Changed)