greeceting
驱动牛犊
驱动牛犊
  • 注册日期2005-01-27
  • 最后登录2005-10-19
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1359回复:2

关于deviceiocontrol的问题.解决问题给50分.

楼主#
更多 发布于:2005-04-21 09:45
  用driver works生成一个USB驱动框架,在里边写了一些iocontrol,
但是我在应用程序通过API函数deviceiocontrol()调用这些IOCONTROL时,用GETLASTERROR()得到31的错误,内容为;
A device attached to the system is not functioning
  和设备通信应该是没问题的,因为我可以得到设备的设备描述符.

   自己查到的原因是m_LOWER.submiturb()不成功,但是为什么不成功就不知道了.
   到底是什么原因呢?我该如何解决?

下边是我写的一个IOCONTROL的实现:

NTSTATUS DFUDevice::DeviceControl(KIrp I) {
 
  NTSTATUS status=STATUS_SUCCESS;
  PVOID pBuffer = I.IoctlBuffer();
  ULONG dwInputBufferSize = I.IoctlInputBufferSize();
  ULONG dwOutputBufferSize = I.IoctlOutputBufferSize();
  I.Information() = 0;
    I.Status() = STATUS_SUCCESS;

  switch (I.IoctlCode)
{..........
  case DFU_IOCTL_GETSTATUS:

{
  t << \"DFU_IOCTL_GETSTATUS \\n\";
 URB u;
RtlZeroMemory(&u, sizeof(URB));
  
m_Lower.BuildVendorRequest(
reinterpret_cast<PUCHAR> (pBuffer), dwOutputBufferSize,
static_cast<UCHAR>( DFU_GETSTATUS ),
static_cast<USHORT>( 0 ),
TRUE, FALSE,
NULL,
0,
URB_FUNCTION_VENDOR_DEVICE,
&u  );
      
status = m_Lower.SubmitUrb(&u);

if( !NT_SUCCESS(status) )

{     t<<\"can\'t transfer the urb\\n\";
                 break;
}

break;

}
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-04-21 16:02
如果这些请求是你自己定义的,那么你可能需要Complete而不是把request发到下面去(如发到USB总线)。
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
greeceting
驱动牛犊
驱动牛犊
  • 注册日期2005-01-27
  • 最后登录2005-10-19
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-04-21 17:31
那COMPLETE是我自己写么?我这个其实是仿照DS中的EZUSB例子程序写的,它也是直接发这样做的
游客

返回顶部