You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.7 KiB
74 lines
1.7 KiB
|
|
/*************************************************************************
|
|
*
|
|
* video.c
|
|
*
|
|
* This module contains routines for managing the ICA video channel.
|
|
*
|
|
* Copyright 1998, Microsoft.
|
|
*
|
|
*************************************************************************/
|
|
|
|
/*
|
|
* Includes
|
|
*/
|
|
#include <precomp.h>
|
|
#pragma hdrstop
|
|
|
|
|
|
NTSTATUS
|
|
IcaDeviceControlVideo(
|
|
IN PICA_CHANNEL pChannel,
|
|
IN PIRP Irp,
|
|
IN PIO_STACK_LOCATION IrpSp
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This is the DeviceControl routine for the ICA video channel.
|
|
|
|
Arguments:
|
|
|
|
pChannel -- pointer to ICA_CHANNEL object
|
|
|
|
Irp - Pointer to I/O request packet
|
|
|
|
IrpSp - pointer to the stack location to use for this request.
|
|
|
|
Return Value:
|
|
|
|
NTSTATUS -- Indicates whether the request was successfully queued.
|
|
|
|
--*/
|
|
|
|
{
|
|
SD_IOCTL SdIoctl;
|
|
NTSTATUS Status;
|
|
CLONG Method;
|
|
|
|
// Verify the buffer method.
|
|
Method = IrpSp->Parameters.DeviceIoControl.IoControlCode & 0x03;
|
|
ASSERT( Method == METHOD_BUFFERED );
|
|
|
|
if ( Method != METHOD_BUFFERED ) {
|
|
Status = STATUS_INVALID_DEVICE_REQUEST;
|
|
}
|
|
else {
|
|
SdIoctl.BytesReturned = 0;
|
|
SdIoctl.IoControlCode = IrpSp->Parameters.DeviceIoControl.IoControlCode;
|
|
SdIoctl.InputBuffer = Irp->AssociatedIrp.SystemBuffer;
|
|
SdIoctl.InputBufferLength = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
|
|
SdIoctl.OutputBuffer = Irp->AssociatedIrp.SystemBuffer;
|
|
SdIoctl.OutputBufferLength = IrpSp->Parameters.DeviceIoControl.OutputBufferLength;
|
|
|
|
Status = IcaCallDriver( pChannel, SD$IOCTL, &SdIoctl );
|
|
|
|
Irp->IoStatus.Information = SdIoctl.BytesReturned;
|
|
}
|
|
|
|
return( Status );
|
|
}
|
|
|
|
|