阅读:1181回复:4
请教irp的问题!
在看了walter Oney的书和结合一些例子后还是有疑惑,请教下面的问题:
IRP的创建是在驱动中还是应用程序中执行的呢? 我看到几个例子中的测试程序并没有IoAllocateIrp之类创建irp的函数,只有createfile,writefile之类函数调用设备,那么它是如何把相关参数传递到驱动中的呢? 如果设备(并口)不支持pnp的话,就不能写成wdm模式,那么用2000ddk写成的遗留驱动移植到xp要用xpddk重新编译吗? 对了并口(遗留设备)的简单读写操作,如果不写驱动,直接在应用程序中加ddk头文件,用write_port_xxx之类可以对设备进行操作吗?如果这样的话,写驱动意义何在呢? 请高手不吝赐教,谢谢! |
|
|
沙发#
发布于:2003-10-07 12:21
IRP由IO manager创建,当然driver也可以创建。
NT内核不允许在ring3直接访问硬件。 |
|
板凳#
发布于:2003-10-07 12:48
i/o管理器创建irp是个显视的过程吗,即是否系统自动完成的?那么应用程序如何填充irp中的参数呢?
谢谢! |
|
|
地板#
发布于:2003-10-07 16:59
app不用考虑什么irp
readfile、deviceiocontrol等API的参数填对就行了。 |
|
地下室#
发布于:2003-10-07 21:52
I/O管理器把用户模式程序发送给驱动程序的数据复制到这个缓冲区,这也是创建IRP过程的一部分。这些数据可以是与WriteFile调用有关的数据,或者是DeviceIoControl调用中所谓的输入数据。对于读请求,设备驱动程序把读出的数据填到这个缓冲区,然后I/O管理器再把缓冲区的内容复制到用户模式缓冲区。
我有些明白了,比方说writefile函数,我们可以把参数保存在开辟的数组中由I/O管理器填充在AssociatedIrp.SystemBuffer传递过去,驱动就可以读取了。 谢谢! |
|
|