[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [win-pv-devel] [PATCH 10/14 v2] Respond to non-default console IOCTLs
> -----Original Message----- > From: win-pv-devel [mailto:win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx] On > Behalf Of owen.smith@xxxxxxxxxx > Sent: 23 February 2018 14:22 > To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx > Cc: Owen Smith <owen.smith@xxxxxxxxxx> > Subject: [win-pv-devel] [PATCH 10/14 v2] Respond to non-default console > IOCTLs > > From: Owen Smith <owen.smith@xxxxxxxxxx> > > Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> Acked-by: Paul Durrant <paul.durrant@xxxxxxxxxx> > --- > src/xencons/frontend.c | 94 > ++++++++++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 91 insertions(+), 3 deletions(-) > > diff --git a/src/xencons/frontend.c b/src/xencons/frontend.c > index bdd2945..a6e57d1 100755 > --- a/src/xencons/frontend.c > +++ b/src/xencons/frontend.c > @@ -1215,6 +1215,80 @@ FrontendDestroy( > } > > static NTSTATUS > +FrontendGetProperty( > + IN PXENCONS_FRONTEND Frontend, > + IN PIRP Irp > + ) > +{ > + PIO_STACK_LOCATION StackLocation; > + ULONG IoControlCode; > + ULONG InputBufferLength; > + ULONG OutputBufferLength; > + PVOID Buffer; > + PCHAR Value; > + ULONG Length; > + NTSTATUS status; > + > + StackLocation = IoGetCurrentIrpStackLocation(Irp); > + IoControlCode = StackLocation- > >Parameters.DeviceIoControl.IoControlCode; > + InputBufferLength = StackLocation- > >Parameters.DeviceIoControl.InputBufferLength; > + OutputBufferLength = StackLocation- > >Parameters.DeviceIoControl.OutputBufferLength; > + Buffer = Irp->AssociatedIrp.SystemBuffer; > + > + switch (IoControlCode) { > + case IOCTL_XENCONS_GET_INSTANCE: > + Value = PdoGetName(Frontend->Pdo); > + break; > + case IOCTL_XENCONS_GET_NAME: > + Value = Frontend->Name; > + break; > + case IOCTL_XENCONS_GET_PROTOCOL: > + Value = Frontend->Protocol; > + break; > + default: > + Value = NULL; > + break; > + } > + > + status = STATUS_NOT_SUPPORTED; > + if (Value == NULL) > + goto fail1; > + > + status = STATUS_INVALID_PARAMETER; > + if (InputBufferLength != 0) > + goto fail2; > + > + Length = (ULONG)strlen(Value) + 1; > + Irp->IoStatus.Information = Length; > + > + status = STATUS_INVALID_BUFFER_SIZE; > + if (OutputBufferLength == 0) > + goto fail3; > + > + RtlZeroMemory(Buffer, OutputBufferLength); > + if (OutputBufferLength < Length) > + goto fail4; > + > + RtlCopyMemory(Buffer, Value, Length); > + > + return STATUS_SUCCESS; > + > +fail4: > + Error("fail4\n"); > + > +fail3: > + Error("fail3\n"); > + > +fail2: > + Error("fail2\n"); > + > +fail1: > + Error("fail1 (%08x)\n", status); > + > + return status; > +} > + > +static NTSTATUS > FrontendAbiAcquire( > IN PXENCONS_CONSOLE_CONTEXT Context > ) > @@ -1373,9 +1447,23 @@ FrontendAbiPutQueue( > IN PIRP Irp > ) > { > - UNREFERENCED_PARAMETER(Context); > - UNREFERENCED_PARAMETER(Irp); > - return STATUS_DEVICE_NOT_READY; > + PXENCONS_FRONTEND Frontend = > (PXENCONS_FRONTEND)Context; > + PIO_STACK_LOCATION StackLocation; > + > + StackLocation = IoGetCurrentIrpStackLocation(Irp); > + > + switch (StackLocation->MajorFunction) { > + case IRP_MJ_READ: > + case IRP_MJ_WRITE: > + return STATUS_DEVICE_NOT_READY; > + > + case IRP_MJ_DEVICE_CONTROL: > + return FrontendGetProperty(Frontend, Irp); > + > + default: > + ASSERT(FALSE); > + return STATUS_NOT_SUPPORTED; > + } > } > > static XENCONS_CONSOLE_ABI FrontendAbiV1 = { > -- > 2.8.3 > > > _______________________________________________ > win-pv-devel mailing list > win-pv-devel@xxxxxxxxxxxxxxxxxxxx > https://lists.xenproject.org/mailman/listinfo/win-pv-devel _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |