zab
zab
驱动小牛
驱动小牛
  • 注册日期2001-07-04
  • 最后登录2008-01-10
  • 粉丝0
  • 关注0
  • 积分126分
  • 威望14点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
阅读:892回复:1

请问一个DeviceIoControl的问题

楼主#
更多 发布于:2003-02-12 12:37
DeviceIoControl()函数的最后一个参数是一个OVERLAPPED结构的指针,这个结构的最后一个成员是一个事件。
1.当APP使用DeviceIoControl()函数时没有使用最后一个参数,那么APP调用DeviceIoControl()函数后,操作系统将产生一个IRP,当驱动程序这个IRP完成后,DeviceIoControl()函数才返回。我的理解对吗?
2.当APP使用DeviceIoControl()函数时指定了最后一个参数,那么APP调用DeviceIoControl()函数后,该函数马上返回,而不管对应的IRP是否已经完成。然后APP可以等待OVERLAPPED结构中的那个事件来判断该IRP否已经完成。如果在driver中设置这个IRP为PENDING的话,那么OVERLAPPED结构中的那个事件一直都是无信号的,当driver完成这个IRP后,此事件变为有信号的。那么这个事件是谁设置为有信号的呢(驱动程序还是操作系统)?我看一些驱动程序的源代码中并有设置此事件为有信号的代码,只是完成该IRP。

最新喜欢:

wdy9927wdy992...
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-02-13 09:26
1.不管有没有最后一个参数,都是完成irp后才返回。
2.如果指定了最后一个参数,当驱动里最后调用IoCompleteRequest时系统就会把参数里的事件设置信号,不需要自己设置。
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
游客

返回顶部