阅读:1264回复:1
关于DeviceControl
各位大侠,我在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中看不到啊,怎么回事呢? 求求大侠们了 |
|
沙发#
发布于:2007-09-13 20:42
终于找到问题所在了
全是大意所致,哎,问题出现在上层应用程序中。。 汗 |
|