[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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.