rangzh
驱动小牛
驱动小牛
  • 注册日期2005-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望150点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
阅读:1039回复:0

IRP操作的两个问题

楼主#
更多 发布于:2007-08-28 21:47
1. 同步方式的超时及出错处理的问题

伪代码如下:

NTSTATUS status;
PIRP irp;
KEVENT irpDone;
LARGE_INTEGER waitTime;      // 5 seconds

KeInitializeEvent( &irpDone, ... );

irp = IoBuildDeviceIoControlRequest(...);

status = IoCallDriver( lowerDevice, irp, ... );
if( STATUS_PENDING == status )
{
    status = KeWaitForSingleObject( irpDone, ..., &waitTime );
    if( STATUS_SUCCESS == status )
    {
    //...
    }
    else if( STATUS_TIMEOUT == status )
    {
    // 这里需要取消该IRP么?
    }
    else
    {
    }
}

采用同步方式时,如果不希望无限等待,而是要设定操作超时机制,那么在超时或者发生错误时是否需要调用IoCancelIrp来取消该IRP?

2. 异步方式时,提交给USBD的IRP是按照提交顺序完成的吗?
游客

返回顶部