信息
您所需的主题如下所示。但此主题未包含在此库中。

同步发送 I/O 请求

下表列出了驱动程序可以调用哪些 I/O 目标对象方法来向 I/O 目标同步发送 I/O 请求。有关如果使用这些方法的详细信息,请参阅相应方法的参考页面。

方法用途

WdfIoTargetSendReadSynchronously

发送读取请求

WdfIoTargetSendWriteSynchronously

发送写入请求

WdfIoTargetSendIoctlSynchronously

发送设备控制请求

WdfIoTargetSendInternalIoctlSynchronously

发送内部设备控制请求

WdfIoTargetSendInternalIoctlOthersSynchronously

发送非标准内部设备控制请求

 

您也可以通过调用 WdfRequestSend 同步发送请求,但必须首先按照异步发送 I/O 请求中介绍的规则设置请求的格式。

与异步发送 I/O 请求相比,编写用于向 I/O 目标同步发送请求的代码相对容易一些。不过,您应该使用以下指南帮助确定同步 I/O 是否适合于自己的驱动程序:

  • 如果驱动程序需要发送的 I/O 请求不是很多,并且系统或设备的性能不会因驱动程序等待每个 I/O 请求完成而降低,则可以使用同步 I/O。

  • 如果驱动程序需要在短时间内处理的 I/O 请求很多,则您可能不会允许驱动程序等待每一个请求都完成后再发送下一个请求。否则,驱动程序可能会丢失数据或者降低其设备(甚至整个系统)的性能。在这种情况下,异步 I/O 可能是更好的选择。

  • 对于处理必须在没有其他并发活动的情况下开始和完成的操作,同步 I/O 很有用。此类操作可能包括重置 USB 管道或读取设备注册。

  • 在大多数情况下,驱动程序都应在调用用于同步发送 I/O 请求的对象方法时指定超时值。如果驱动程序未指定超时值,则当设备或下层驱动程序响应失败时,驱动程序就会停止工作。因此,用户会发现应用程序没有响应。另外,如果驱动程序不释放系统资源(如工作项目),则其他驱动程序就可能无法获得这些资源。

  • 如果堆栈中您的驱动程序上方和下方的驱动程序需要操作以继续同步,则您的驱动程序应使用同步 I/O。因此,您应该了解驱动程序堆栈中可能存在的其他驱动程序的需求。

 

 

社区附加资源

显示:
© 2014 Microsoft