[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [win-pv-devel] [PATCH] Added a function called from DriverEntry where we can safely read registry keys and convert strings at PASSIVE_LEVEL
> -----Original Message----- > From: Mackay, Eric [mailto:mackayem@xxxxxxxxxx] > Sent: 27 June 2017 16:09 > To: Paul Durrant <Paul.Durrant@xxxxxxxxxx>; win-pv- > devel@xxxxxxxxxxxxxxxxxxxx > Subject: RE: [win-pv-devel] [PATCH] Added a function called from > DriverEntry where we can safely read registry keys and convert strings at > PASSIVE_LEVEL > > I believe the patch should work as-is on top of the 8.2.0 release (I based it > on > the 8.2.0 tag). I tried directly making a version of the patch on top of the > most > recent commits from Owen, but I ran across the bug I mentioned in another > post to the mailing list, subject line " XenVBD bug - IRQL mismatch between > AdapterHwFindAdapter and AdapterInitialize". Ok. I'll handle the re-base and we'll take a look at that issue. Paul > > -----Original Message----- > From: Paul Durrant [mailto:Paul.Durrant@xxxxxxxxxx] > Sent: Tuesday, June 27, 2017 7:55 AM > To: Mackay, Eric <mackayem@xxxxxxxxxx>; win-pv- > devel@xxxxxxxxxxxxxxxxxxxx > Subject: RE: [win-pv-devel] [PATCH] Added a function called from > DriverEntry where we can safely read registry keys and convert strings at > PASSIVE_LEVEL > > > -----Original Message----- > > From: win-pv-devel [mailto:win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx] > > On Behalf Of Eric Mackay > > Sent: 26 June 2017 20:46 > > To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx > > Cc: Eric Mackay <mackayem@xxxxxxxxxx> > > Subject: [win-pv-devel] [PATCH] Added a function called from > > DriverEntry where we can safely read registry keys and convert strings > > at PASSIVE_LEVEL > > > > The MSDN documentation for various registry key access and string > > conversion functions requires the caller to be at IRQL = > > PASSIVE_LEVEL. One of the reasons for this is that the string > > conversion tables used by functions such as > > RtlAnsiStringToUnicodeString are stored in paged pool memory. Both the > > page fault handler and the process scheduler run at IRQL = > > DISPATCH_LEVEL, therefore you must not touch memory at > DISPATCH_LEVEL > > that could be paged out. A process running at DISPATCH_LEVEL cannot be > > preempted for the page fault handler to run. > > > > To aid Static Driver Verifier code analysis and inform developers, I > > have added SAL annotations that indicate IRQL = PASSIVE_LEVEL is > > required on certain registry access functions. > > > > Signed-off-by: Eric Mackay <mackayem@xxxxxxxxxx> > > Generally this looks ok so > > Acked-by: Paul Durrant <paul.durrant@xxxxxxxxxx> > > However it needs re-basing now that Owen's recent patches have gone in. I'll > do that, and I'll probably split out the addition of the annotations into a > separate patch. > > Paul > > > --- > > src/xenvbd/driver.c | 86 +++++++++++++++++++++++++ > > src/xenvbd/driver.h | 45 ++++++++++++++ > > src/xenvbd/frontend.c | 169 ++++++++++++++++++++++++++++++++++- > -- > > ------------- > > src/xenvbd/registry.c | 26 ++++++++ > > src/xenvbd/registry.h | 25 +++++++- > > 5 files changed, 296 insertions(+), 55 deletions(-) > > > > diff --git a/src/xenvbd/driver.c b/src/xenvbd/driver.c index > > bb1954f..0c9275b 100644 > > --- a/src/xenvbd/driver.c > > +++ b/src/xenvbd/driver.c > > @@ -58,6 +58,8 @@ XENVBD_PARAMETERS DriverParameters; > > > > #define XENVBD_POOL_TAG 'dbvX' > > > > +XENVBD_REGISTRY_OVERRIDE > > DriverFeatureOverrides[NumberOfFeatures] = { 0 }; > > + > > static DECLSPEC_NOINLINE VOID > > __DriverParseOption( > > IN const CHAR *Key, > > @@ -301,6 +303,88 @@ DriverFormatFree( > > __FreePoolWithTag(Buffer, XENVBD_POOL_TAG); } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > +VOID > > +DriverInitializeOverrides( > > + ) > > +{ > > + ULONG Value; > > + NTSTATUS Status; > > + PCHAR FeatureName; > > + XENVBD_FEATURE Feature; > > + > > + struct INIT_OVERRIDES { > > + PCHAR Name; > > + XENVBD_FEATURE Feature; > > + } Init[] = { > > + { "removable" , FeatureRemovable }, > > + { "feature-persistent", FeaturePersistent }, > > + { "feature-max-indirect-segments", FeatureMaxIndirectSegments }, > > + { "feature-barrier", FeatureBarrier }, > > + { "feature-flush-cache", FeatureFlushCache }, > > + { "feature-discard", FeatureDiscard }, > > + { "discard-enable", FeatureDiscardEnable }, > > + { "discard-secure", FeatureDiscardSecure }, > > + { "discard-alignment", FeatureDiscardAlignment }, > > + { "discard-granularity", FeatureDiscardGranularity } > > + }; > > + > > + for (ULONG Index = 0; Index < ARRAYSIZE(Init); Index++) { > > + Feature = Init[Index].Feature; > > + FeatureName = Init[Index].Name; > > + DriverFeatureOverrides[(ULONG)Feature].Name = FeatureName; > > + DriverFeatureOverrides[(ULONG)Feature].Value = 0; > > + DriverFeatureOverrides[(ULONG)Feature].Found = FALSE; > > + > > + Status = RegistryQueryDwordValue(DriverGetParametersKey(), > > + FeatureName, > > + &Value); > > + > > + if (NT_SUCCESS(Status)) { > > + DriverFeatureOverrides[(ULONG)Feature].Found = TRUE; > > + DriverFeatureOverrides[(ULONG)Feature].Value = Value; > > + } > > + } > > +} > > + > > +// Return value indicates whether reg key was found and stored in > > DriverFeatureOverrides > > +// Will set Value to the corresponding reg value if found, otherwise > > +it will > > leave Value untouched > > +__checkReturn > > +_Success_(return) > > +BOOLEAN > > +DriverGetRegOverride( > > + __in XENVBD_FEATURE Feature, > > + __out PULONG Value > > + ) > > +{ > > + BOOLEAN Found = FALSE; > > + > > + if ((ULONG)Feature < (ULONG)NumberOfFeatures) { > > + Found = DriverFeatureOverrides[(ULONG)Feature].Found; > > + *Value = DriverFeatureOverrides[(ULONG)Feature].Value; > > + } > > + > > + return Found; > > +} > > + > > +// Return value indicates whether a feature enum to string mapping > > +was > > found > > +// FeatureString will be set to point to the string if a mapping is > > +found, > > otherwise > > +// is not modified > > +__checkReturn > > +PCHAR > > +DriverGetFeatureName( > > + __in XENVBD_FEATURE Feature > > + ) > > +{ > > + PCHAR Name = NULL; > > + > > + if ((ULONG)Feature < (ULONG)NumberOfFeatures) { > > + Name = DriverFeatureOverrides[(ULONG)Feature].Name; > > + } > > + > > + return Name; > > +} > > + > > HW_INITIALIZE HwInitialize; > > > > BOOLEAN > > @@ -549,6 +633,8 @@ DriverEntry( > > > > RtlZeroMemory(&InitData, sizeof(InitData)); > > > > + DriverInitializeOverrides(); > > + > > InitData.HwInitializationDataSize = sizeof(InitData); > > InitData.AdapterInterfaceType = Internal; > > InitData.HwInitialize = HwInitialize; > > diff --git a/src/xenvbd/driver.h b/src/xenvbd/driver.h index > > e7730a9..9bf0034 100644 > > --- a/src/xenvbd/driver.h > > +++ b/src/xenvbd/driver.h > > @@ -50,6 +50,51 @@ > > > > #define XENVBD_MIN_GRANT_REFS > > (XENVBD_MAX_SEGMENTS_PER_SRB) > > > > +// Registry overrides for driver features typedef enum > > +_XENVBD_FEATURE { > > + FeatureRemovable = 0, > > + FeaturePersistent, > > + FeatureMaxIndirectSegments, > > + FeatureBarrier, > > + FeatureFlushCache, > > + FeatureDiscard, > > + FeatureDiscardEnable, > > + FeatureDiscardSecure, > > + FeatureDiscardAlignment, > > + FeatureDiscardGranularity, > > + > > + // Add any new features before this enum > > + NumberOfFeatures > > +} XENVBD_FEATURE, *PXENVBD_FEATURE; > > + > > +// Feature Overrides From Registry Values typedef struct > > +_XENVBD_REGISTRY_OVERRIDE { > > + PCHAR Name; > > + ULONG Value; > > + BOOLEAN Found; > > +} XENVBD_REGISTRY_OVERRIDE, *PXENVBD_REGISTRY_OVERRIDE; > > + > > +extern XENVBD_REGISTRY_OVERRIDE > > DriverFeatureOverrides[NumberOfFeatures]; > > + > > +// Return value indicates whether reg key was found and stored in > > DriverFeatureOverrides > > +// Will set Value to the corresponding reg value if found, otherwise > > +it will > > leave Value untouched > > +__checkReturn > > +_Success_(return) > > +extern BOOLEAN > > +DriverGetRegOverride( > > + __in XENVBD_FEATURE Name, > > + __out PULONG Value > > + ); > > + > > +// Return value indicates whether a feature enum to string mapping > > +was > > found > > +// FeatureString will be set to point to the string if a mapping is > > +found, > > otherwise > > +// is not modified > > +__checkReturn > > +extern PCHAR > > +DriverGetFeatureName( > > + __in XENVBD_FEATURE Feature > > + ); > > + > > typedef struct _XENVBD_PARAMETERS { > > BOOLEAN SynthesizeInquiry; > > BOOLEAN PVCDRom; > > diff --git a/src/xenvbd/frontend.c b/src/xenvbd/frontend.c index > > 227b93b..aa8ed62 100644 > > --- a/src/xenvbd/frontend.c > > +++ b/src/xenvbd/frontend.c > > @@ -619,37 +619,69 @@ abort: > > static FORCEINLINE BOOLEAN > > FrontendReadFeature( > > IN PXENVBD_FRONTEND Frontend, > > - IN PCHAR Name, > > + IN XENVBD_FEATURE Feature, > > IN PBOOLEAN Value > > - ) > > +) > > { > > NTSTATUS status; > > PCHAR Buffer; > > ULONG Override; > > BOOLEAN Old = *Value; > > + PCHAR Name; > > + > > + Name = DriverGetFeatureName(Feature); > > + if (Name == NULL) { > > + Trace("Target[%d] : Could not find Feature %u.\n", > > + Frontend->TargetId, > > Feature); > > + return FALSE; > > + } > > + > > + // check registry for disable-override > > + if (DriverGetRegOverride(Feature, &Override)) { > > + *Value = (Override == 0) ? FALSE : TRUE; > > + } else { > > + > > + status = XENBUS_STORE(Read, > > + Frontend->Store, > > + NULL, > > + Frontend->BackendPath, > > + Name, > > + &Buffer); > > + if (!NT_SUCCESS(status)) > > + return FALSE; // no value, unchanged > > + > > + *Value = !!(strtoul(Buffer, NULL, 10)); > > + XENBUS_STORE(Free, > > + Frontend->Store, > > + Buffer); > > + } > > + > > + return Old != *Value; > > +} > > + > > +static FORCEINLINE BOOLEAN > > +FrontendReadDiskFeature( > > + IN PXENVBD_FRONTEND Frontend, > > + IN PCHAR Name, > > + IN PBOOLEAN Value > > +) > > +{ > > + NTSTATUS status; > > + PCHAR Buffer; > > + BOOLEAN Old = *Value; > > > > status = XENBUS_STORE(Read, > > - Frontend->Store, > > - NULL, > > - Frontend->BackendPath, > > - Name, > > - &Buffer); > > + Frontend->Store, > > + NULL, > > + Frontend->BackendPath, > > + Name, > > + &Buffer); > > if (!NT_SUCCESS(status)) > > return FALSE; // no value, unchanged > > > > *Value = !!(strtoul(Buffer, NULL, 10)); > > XENBUS_STORE(Free, > > - Frontend->Store, > > - Buffer); > > - > > - // check registry for disable-override > > - status = RegistryQueryDwordValue(DriverGetParametersKey(), > > - Name, > > - &Override); > > - if (NT_SUCCESS(status)) { > > - if (Override == 0) > > - *Value = FALSE; > > - } > > + Frontend->Store, > > + Buffer); > > > > return Old != *Value; > > } > > @@ -657,39 +689,69 @@ FrontendReadFeature( static FORCEINLINE > BOOLEAN > > FrontendReadValue32( > > IN PXENVBD_FRONTEND Frontend, > > - IN PCHAR Name, > > + IN XENVBD_FEATURE Feature, > > IN BOOLEAN AllowOverride, > > IN PULONG Value > > - ) > > +) > > { > > NTSTATUS status; > > PCHAR Buffer; > > ULONG Override; > > ULONG Old = *Value; > > + PSTR Name; > > + > > + Name = DriverGetFeatureName(Feature); > > + if (Name == NULL) { > > + Trace("Target[%d] : Could not find Feature %u.\n", > > + Frontend->TargetId, > > Feature); > > + return FALSE; > > + } > > + > > + // check registry for disable-override > > + if (AllowOverride && DriverGetRegOverride(Feature, &Override)) { > > + *Value = Override; > > + } else { > > + status = XENBUS_STORE(Read, > > + Frontend->Store, > > + NULL, > > + Frontend->BackendPath, > > + Name, > > + &Buffer); > > + if (!NT_SUCCESS(status)) > > + return FALSE; // no value, unchanged > > + > > + *Value = strtoul(Buffer, NULL, 10); > > + XENBUS_STORE(Free, > > + Frontend->Store, > > + Buffer); > > + } > > + > > + return Old != *Value; > > +} > > + > > +static FORCEINLINE BOOLEAN > > +FrontendReadDiskValue32( > > + IN PXENVBD_FRONTEND Frontend, > > + IN PCHAR Name, > > + IN PULONG Value > > +) > > +{ > > + NTSTATUS status; > > + PCHAR Buffer; > > + ULONG Old = *Value; > > > > status = XENBUS_STORE(Read, > > - Frontend->Store, > > - NULL, > > - Frontend->BackendPath, > > - Name, > > - &Buffer); > > + Frontend->Store, > > + NULL, > > + Frontend->BackendPath, > > + Name, > > + &Buffer); > > if (!NT_SUCCESS(status)) > > return FALSE; // no value, unchanged > > > > *Value = strtoul(Buffer, NULL, 10); > > XENBUS_STORE(Free, > > - Frontend->Store, > > - Buffer); > > - > > - // check registry for disable-override > > - if (AllowOverride) { > > - status = RegistryQueryDwordValue(DriverGetParametersKey(), > > - Name, > > - &Override); > > - if (NT_SUCCESS(status)) { > > - *Value = Override; > > - } > > - } > > + Frontend->Store, > > + Buffer); > > > > return Old != *Value; > > } > > @@ -751,17 +813,14 @@ __ReadDiskInfo( > > { > > BOOLEAN Changed = FALSE; > > > > - Changed |= FrontendReadValue32(Frontend, > > + Changed |= FrontendReadDiskValue32(Frontend, > > "info", > > - FALSE, > > &Frontend->DiskInfo.DiskInfo); > > - Changed |= FrontendReadValue32(Frontend, > > + Changed |= FrontendReadDiskValue32(Frontend, > > "sector-size", > > - FALSE, > > &Frontend->DiskInfo.SectorSize); > > - Changed |= FrontendReadValue32(Frontend, > > + Changed |= FrontendReadDiskValue32(Frontend, > > "physical-sector-size", > > - FALSE, > > &Frontend->DiskInfo.PhysSectorSize); > > Changed |= FrontendReadValue64(Frontend, > > "sectors", @@ -805,14 +864,14 @@ > > FrontendReadFeatures( > > BOOLEAN Changed = FALSE; > > > > Changed |= FrontendReadFeature(Frontend, > > - "removable", > > + FeatureRemovable, > > &Frontend->Caps.Removable); > > Changed |= FrontendReadValue32(Frontend, > > - "feature-max-indirect-segments", > > + FeatureMaxIndirectSegments, > > TRUE, > > &Frontend->Features.Indirect); > > Changed |= FrontendReadFeature(Frontend, > > - "feature-persistent", > > + FeaturePersistent, > > &Frontend->Features.Persistent); > > > > if (!Changed) > > @@ -841,31 +900,31 @@ FrontendReadDiskInfo( > > BOOLEAN DiscardEnable = TRUE; > > > > Changed |= FrontendReadFeature(Frontend, > > - "feature-barrier", > > + FeatureBarrier, > > &Frontend->DiskInfo.Barrier); > > Changed |= FrontendReadFeature(Frontend, > > - "feature-flush-cache", > > + FeatureFlushCache, > > &Frontend->DiskInfo.FlushCache); > > > > // discard related > > FrontendReadFeature(Frontend, > > - "feature-discard", > > + FeatureDiscard, > > &DiscardFeature); > > FrontendReadFeature(Frontend, > > - "discard-enable", > > + FeatureDiscardEnable, > > &DiscardEnable); > > Discard = DiscardFeature && DiscardEnable; > > Changed |= (Discard != Frontend->DiskInfo.Discard); > > Frontend->DiskInfo.Discard = Discard; > > Changed |= FrontendReadFeature(Frontend, > > - "discard-secure", > > + FeatureDiscardSecure, > > &Frontend->DiskInfo.DiscardSecure); > > Changed |= FrontendReadValue32(Frontend, > > - "discard-alignment", > > + FeatureDiscardAlignment, > > TRUE, > > &Frontend->DiskInfo.DiscardAlignment); > > Changed |= FrontendReadValue32(Frontend, > > - "discard-granularity", > > + FeatureDiscardGranularity, > > TRUE, > > > > &Frontend->DiskInfo.DiscardGranularity); > > > > @@ -1238,6 +1297,8 @@ FrontendDisable( > > > > > > > //========================================================= > > ==================== > > // Init/Term > > +_IRQL_requires_(DISPATCH_LEVEL) > > +_Requires_lock_held_(Frontend->StateLock) > > static DECLSPEC_NOINLINE NTSTATUS > > __FrontendSetState( > > __in PXENVBD_FRONTEND Frontend, > > @@ -1413,6 +1474,7 @@ FrontendSuspendLateCallback( > > PdoPreResume(Frontend->Pdo); > > > > // dont acquire state lock - called at DISPATCH on 1 vCPU with > > interrupts enabled > > +#pragma warning(suppress: 26110) // warning C26110: Caller failing to > > +hold > > lock <lock> before calling function <func>. > > Status = __FrontendSetState(Frontend, XENVBD_CLOSED); > > if (!NT_SUCCESS(Status)) { > > Error("Target[%d] : SetState CLOSED (%08x)\n", > > Frontend->TargetId, Status); @@ -1420,6 +1482,7 @@ > > FrontendSuspendLateCallback( > > } > > > > // dont acquire state lock - called at DISPATCH on 1 vCPU with > > interrupts enabled > > +#pragma warning(suppress: 26110) // warning C26110: Caller failing to > > +hold > > lock <lock> before calling function <func>. > > Status = __FrontendSetState(Frontend, State); > > if (!NT_SUCCESS(Status)) { > > Error("Target[%d] : SetState %s (%08x)\n", > > Frontend->TargetId, __XenvbdStateName(State), Status); diff --git > > a/src/xenvbd/registry.c b/src/xenvbd/registry.c index 9ceffa5..885ab6d > > 100644 > > --- a/src/xenvbd/registry.c > > +++ b/src/xenvbd/registry.c > > @@ -89,6 +89,7 @@ RegistryTeardown( > > RegistryPath.MaximumLength = RegistryPath.Length = 0; } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryOpenKey( > > IN HANDLE Parent, > > @@ -118,6 +119,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > static NTSTATUS > > RegistryOpenRoot( > > IN PWCHAR Path, > > @@ -151,6 +153,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryCreateKey( > > IN HANDLE Root, > > @@ -250,6 +253,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryOpenServiceKey( > > IN ACCESS_MASK DesiredAccess, > > @@ -259,6 +263,7 @@ RegistryOpenServiceKey( > > return RegistryOpenKey(NULL, &RegistryPath, DesiredAccess, Key); > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryCreateServiceKey( > > OUT PHANDLE Key > > @@ -267,6 +272,7 @@ RegistryCreateServiceKey( > > return RegistryCreateKey(NULL, &RegistryPath, > > REG_OPTION_NON_VOLATILE, Key); } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryOpenSoftwareKey( > > IN PDEVICE_OBJECT DeviceObject, @@ -289,6 +295,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryOpenHardwareKey( > > IN PDEVICE_OBJECT DeviceObject, > > @@ -366,6 +373,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryOpenSubKey( > > IN PHANDLE Key, > > @@ -399,6 +407,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryCreateSubKey( > > IN PHANDLE Key, > > @@ -432,6 +441,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryDeleteSubKey( > > IN PHANDLE Key, > > @@ -475,6 +485,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryEnumerateSubKeys( > > IN HANDLE Key, > > @@ -579,6 +590,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryEnumerateValues( > > IN HANDLE Key, > > @@ -677,6 +689,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryDeleteValue( > > IN PHANDLE Key, > > @@ -710,6 +723,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryQueryDwordValue( > > IN HANDLE Key, > > @@ -780,6 +794,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryUpdateDwordValue( > > IN HANDLE Key, > > @@ -838,6 +853,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > static PANSI_STRING > > RegistrySzToAnsi( > > IN PWCHAR Buffer > > @@ -877,6 +893,7 @@ fail1: > > return NULL; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > static PANSI_STRING > > RegistryMultiSzToAnsi( > > IN PWCHAR Buffer > > @@ -939,6 +956,7 @@ fail1: > > return NULL; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryQuerySzValue( > > IN HANDLE Key, > > @@ -1026,6 +1044,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryQueryBinaryValue( > > IN HANDLE Key, > > @@ -1111,6 +1130,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryUpdateBinaryValue( > > IN HANDLE Key, > > @@ -1170,6 +1190,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryQueryKeyName( > > IN HANDLE Key, > > @@ -1225,6 +1246,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryQuerySystemStartOption( > > IN const CHAR *Prefix, > > @@ -1303,6 +1325,7 @@ fail1: > > return status; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > static PKEY_VALUE_PARTIAL_INFORMATION RegistryAnsiToSz( > > PANSI_STRING Ansi > > @@ -1342,6 +1365,7 @@ fail1: > > return NULL; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > static PKEY_VALUE_PARTIAL_INFORMATION RegistryAnsiToMultiSz( > > PANSI_STRING Ansi > > @@ -1395,6 +1419,7 @@ fail1: > > return NULL; > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > NTSTATUS > > RegistryUpdateSzValue( > > IN HANDLE Key, > > @@ -1485,6 +1510,7 @@ RegistryFreeBinaryValue( > > __RegistryFree(Buffer); > > } > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > VOID > > RegistryCloseKey( > > IN HANDLE Key > > diff --git a/src/xenvbd/registry.h b/src/xenvbd/registry.h index > > d39f016..9bf492e 100644 > > --- a/src/xenvbd/registry.h > > +++ b/src/xenvbd/registry.h > > @@ -44,6 +44,7 @@ RegistryTeardown( > > VOID > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryOpenKey( > > IN HANDLE Parent, > > @@ -52,6 +53,7 @@ RegistryOpenKey( > > OUT PHANDLE Key > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryCreateKey( > > IN HANDLE Parent, > > @@ -60,17 +62,20 @@ RegistryCreateKey( > > OUT PHANDLE Key > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryOpenServiceKey( > > IN ACCESS_MASK DesiredAccess, > > OUT PHANDLE Key > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryCreateServiceKey( > > OUT PHANDLE Key > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryOpenSoftwareKey( > > IN PDEVICE_OBJECT DeviceObject, @@ -78,6 +83,7 @@ > > RegistryOpenSoftwareKey( > > OUT PHANDLE Key > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryOpenHardwareKey( > > IN PDEVICE_OBJECT DeviceObject, @@ -85,6 +91,7 @@ > > RegistryOpenHardwareKey( > > OUT PHANDLE Key > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryOpenSubKey( > > IN HANDLE Key, > > @@ -93,6 +100,7 @@ RegistryOpenSubKey( > > OUT PHANDLE SubKey > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryCreateSubKey( > > IN HANDLE Key, > > @@ -101,12 +109,14 @@ RegistryCreateSubKey( > > OUT PHANDLE SubKey > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryDeleteSubKey( > > IN HANDLE Key, > > IN PCHAR Name > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryEnumerateSubKeys( > > IN HANDLE Key, > > @@ -114,6 +124,7 @@ RegistryEnumerateSubKeys( > > IN PVOID Context > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryEnumerateValues( > > IN HANDLE Key, > > @@ -121,26 +132,30 @@ RegistryEnumerateValues( > > IN PVOID Context > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryDeleteValue( > > IN HANDLE Key, > > IN PCHAR Name > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryQueryDwordValue( > > IN HANDLE Key, > > IN PCHAR Name, > > OUT PULONG Value > > ); > > - > > + > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryUpdateDwordValue( > > IN HANDLE Key, > > IN PCHAR Name, > > IN ULONG Value > > ); > > - > > + > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryQuerySzValue( > > IN HANDLE Key, > > @@ -149,6 +164,7 @@ RegistryQuerySzValue( > > OUT PANSI_STRING *Array > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryQueryBinaryValue( > > IN HANDLE Key, > > @@ -157,6 +173,7 @@ RegistryQueryBinaryValue( > > OUT PULONG Length > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryUpdateBinaryValue( > > IN HANDLE Key, > > @@ -165,12 +182,14 @@ RegistryUpdateBinaryValue( > > IN ULONG Length > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryQueryKeyName( > > IN HANDLE Key, > > OUT PANSI_STRING *Array > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryQuerySystemStartOption( > > IN const CHAR *Prefix, > > @@ -187,6 +206,7 @@ RegistryFreeBinaryValue( > > IN PVOID Buffer > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern NTSTATUS > > RegistryUpdateSzValue( > > IN HANDLE Key, > > @@ -195,6 +215,7 @@ RegistryUpdateSzValue( > > IN PANSI_STRING Array > > ); > > > > +__drv_requiresIRQL(PASSIVE_LEVEL) > > extern VOID > > RegistryCloseKey( > > IN HANDLE Key > > -- > > 2.10.1.windows.1 > > > > > > _______________________________________________ > > win-pv-devel mailing list > > win-pv-devel@xxxxxxxxxxxxxxxxxxxx > > https://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |