Problem sending command to a USB device

Hi All,
I have a Touch Screen Device connected to a USB Device.As part
of my driver loading process I want to send a command to the device and
receive the response sent by it.My Device has only one end point
(Interrupt).

When I see the IOStatus block,I see STATUS_DEVICE_DATA_ERROR
returned from the device.

The part of code I am using to build the IRP,URB and passing it down
is below .

UCHAR InitBufferWrite[3] =
{0x44,0x49,0x0d};//Ascii Commands in Hex to be sent to the device
UCHAR InitBufferRead[8] ;//Data to be read
from the dvice

Irp = IoBuildDeviceIoControlRequest(
IOCTL_INTERNAL_USB_SUBMIT_URB,
deviceExtension->TopOfStackDeviceObject,
(PVOID) &InitBufferRead,
8,//Length of read buffer
(PVOID) &InitBufferWrite,
3, //Length of write buffer
TRUE, //InternalDeviceControl
NULL,
NULL);
PURB urb = NULL;
urb = BULKUSB_ExAllocatePool(NonPagedPool, siz);

urb->UrbControlVendorClassRequest.Hdr.Length = (USHORT)
sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST);
urb->UrbControlVendorClassRequest.Hdr.Function =
URB_FUNCTION_VENDOR_DEVICE ;
urb->UrbControlVendorClassRequest.TransferFlags = 0;
urb->UrbControlVendorClassRequest.TransferFlags |=
USBD_SHORT_TRANSFER_OK;

urb->UrbControlVendorClassRequest.TransferBuffer =
(PVOID)&InitBufferWrite;

urb->UrbControlVendorClassRequest.TransferBufferLength =
3;
urb->UrbBulkOrInterruptTransfer.UrbLink = NULL;

urb->UrbBulkOrInterruptTransfer.TransferBufferMDL =
NULL;
urb->UrbBulkOrInterruptTransfer.TransferBufferLength =
length;

nextStack = IoGetNextIrpStackLocation(Irp);

nextStack->Parameters.Others.Argument1 = urb;

nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
nextStack->Parameters.DeviceIoControl.IoControlCode =
IOCTL_INTERNAL_USB_SUBMIT_URB;

ntStatus = IoCallDriver(DeviceExtension->TopOfStackDeviceObject, Irp );

When I look in the Completion routine I see the Status returned by the
USB stack is STATUS_DEVICE_DATA_ERROR.And one more thing is If you notice at
the top while building the IRP I have given an input buffer to receive the
data sent by the device.Even this is 0 as i notice in the completion
routine.

The command which I am sending to the device as Vendor specific commands.

Do I need to build another URB to read the data from the device ???

Can anybody let me know what is going wrong in the above code ?

Cheers,
Sai Prasad
**************************************************************************
This email (including any attachments) is intended for the sole use of the
intended recipient/s and may contain material that is CONFIDENTIAL AND
PRIVATE COMPANY INFORMATION. Any review or reliance by others or copying or
distribution or forwarding of any or all of the contents in this message is
STRICTLY PROHIBITED. If you are not the intended recipient, please contact
the sender by email and delete all copies; your cooperation in this regard
is appreciated.
**************************************************************************