阅读:892回复:1
请问一个DeviceIoControl的问题
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。 |
|
最新喜欢:wdy992... |
沙发#
发布于:2003-02-13 09:26
1.不管有没有最后一个参数,都是完成irp后才返回。
2.如果指定了最后一个参数,当驱动里最后调用IoCompleteRequest时系统就会把参数里的事件设置信号,不需要自己设置。 |
|
|