阅读:1368回复:3
驱动程序内部问题
各位老大们,大家好,吃饭没有?天气越来越热,不要中暑了!
小弟想在一个驱动程序里读取另外一个驱动程序中的数据,用ZwCreateFile打开设备,但在用ZwReadFile读取被打开的设备时无论如何也不能进到被打开设备的Read例程,而且不小心就会死机,我可以肯定我的设备是成功的打开了,因为我在调用ZwCreateFile时被打开设备的Create例程被正常调用,所以现在比较郁闷,有哪位高手有这方面经验的,请一定指教,谢谢。 另外,如果各位有用得着小弟的,也不要客气。 |
|
沙发#
发布于:2002-03-14 17:03
如果你的参数设置没有问题的话,用KeGetCurrentIrql()< DISPATCH_LEVEL函数检查一下调用的级别。如果大于等于DISPATCH_LEVEL的话必须使用工作线程(ExXXXWorkItem)。
|
|
|
板凳#
发布于:2002-03-14 18:20
我改了一下ZwCreateFile的参数,现在可以读写了,问一下另外一个问题,能不能通过ZwCreateFile返回的句柄来控制设备?就象API里的DeviceIoControl一样?因为用IoBuildDeviceIoControlRequest函数时需要DEVICE_OBJECT参数,而我在调用IoGetDeviceObjectPointer函数时它好象也要打开一次设备,这样设备相当于被打开两次了,而且我不知道如何去关掉被IoGetDeviceObjectPointer打开的设备,请指教.
|
|
地板#
发布于:2002-03-15 08:43
当然可以直接用ZwCreateFile,“ZwCreateFile either causes a new file or directory to be created, or it opens an existing file, (device), directory, or volume, giving the caller a handle for the file object”,具体实现方法,你可以参照Chris Cant的DebugPrint例子,他就是使用ZwXXX例程实现的。
|
|
|