yushui213
驱动小牛
驱动小牛
  • 注册日期2006-04-17
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分1015分
  • 威望115点
  • 贡献值0点
  • 好评度102点
  • 原创分0分
  • 专家分0分
阅读:1264回复:1

关于DeviceControl

楼主#
更多 发布于:2007-09-13 17:21
各位大侠,我在USB驱动编程中遇到了一个问题,就是在DeviceControl中,做了一个写操作,但是上层应用程序传下来,数据就不对了,大侠们帮我看看啊。
用DS开发的。

#define AUDIO_DATA_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_OUT_DIRECT, FILE_READ_DATA | FILE_WRITE_DATA)

NTSTATUS UsbDriverDevice::AUDIO_DATA_WRITE_Handler(KIrp I)
{
    NTSTATUS status = STATUS_SUCCESS;

    t << "Entering UsbDriverDevice::AUDIO_DATA_WRITE_Handler, " << I << EOL;
    // Always ok to write 0 elements.
    if (I.WriteSize() == 0)
    {
        I.Information() = 0;
        return status;
    }

    KMemory Mem(I.Mdl());                        // Declare a memory object

    ULONG   dwTotalSize     = I.WriteSize(CURRENT);
    ULONG   dwBytesSent     = 0;
    ULONG    dwMaxSize     = m_Endpoint2OUT.MaximumTransferSize ( );

    if (dwTotalSize > dwMaxSize )
    {
        ASSERT (dwMaxSize);
        dwTotalSize = dwMaxSize;
    }

    PURB pUrb = m_Endpoint2OUT.BuildInterruptTransfer(
        Mem,            // Data to write
        dwTotalSize,    // Data size to write
        TRUE,            // Transmit less than size is OK
        NULL,            // Link to next URB
        NULL,            // Allocate a new URB
        FALSE            // direction ( FALSE = OUT )
        );
    
    if ( pUrb != NULL )
    {
        pUrb->UrbBulkOrInterruptTransfer.TransferFlags =
            (USBD_TRANSFER_DIRECTION_OUT | USBD_SHORT_TRANSFER_OK);
        
        status = m_Endpoint2OUT.SubmitUrb (pUrb, NULL, NULL, 0L);
        if ( NT_SUCCESS(status) )
        {
            dwBytesSent = pUrb->UrbBulkOrInterruptTransfer.TransferBufferLength;
            t << "Write() posted " << dwTotalSize << " bytes to USB\n";
        }
        else
        {
            dwBytesSent = (ULONG) status;
            status = STATUS_SUCCESS;
        }

        delete pUrb;
    }

    I.Information() = dwBytesSent;

    return status;
}

上层应用程序下来的数据,在Mem中看不到啊,怎么回事呢?
求求大侠们了
yushui213
驱动小牛
驱动小牛
  • 注册日期2006-04-17
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分1015分
  • 威望115点
  • 贡献值0点
  • 好评度102点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-09-13 20:42
终于找到问题所在了
全是大意所致,哎,问题出现在上层应用程序中。。
游客

返回顶部