阅读:2372回复:4
zwcreatefile 和zwclose不在一个函数里,为什么zwclose 关不掉zwcreatefile打开的文件?
我在mpinitialize里调用zwcreatefile来打开一个文件,可是我想在iocontrol里将它关掉,可是总是关不掉,打开那个文件时,说有一个进程在用那个文件。有大侠遇到过此种情况吗?谢谢!
|
|
沙发#
发布于:2001-08-30 19:13
在2k DDK对ZwClose的说明中讲了,zwClose和ZwCreateFile必须在同一个线程中(设备上下文)被调用,否则无法关闭打开的句柄。所以你在MiniportInitialize中打开文件,则deviceiocontrol中关闭句柄总是失败了。有两个解决办法,一是在MiniportInitialize中打开文件,在MiniportHalt中关闭。二是在IRP_MJ_CREATE_DEVICE中打开文件,在IRP_MJ_CLOSE_DEVICE中关闭文件。
|
|
板凳#
发布于:2001-08-31 08:09
thank you!
可是我还有个问题,zwwritefile与zwcreatefile是不是也必须在一个线程里?我是在mpinitialize里调用zwcreatefile,在ptreceivecomplete里调用zwwritefile的,可是总是写不进去?为什么? |
|
地板#
发布于:2001-09-07 12:50
好象是这样的,我写的一个中间层驱动中,在两个线程中分别调用这两个函数,每次写文件时都返回非法的参数错误,但在CreateDevice中CreateFile, DeviceIoControl中WriteFile总是成功的。另外在ndis Driver中你还可以调用NdisOpenFile和NdisMapFile来实现读写操作,它好象没有限制。
|
|
地下室#
发布于:2001-09-07 13:34
好象是这样的,我写的一个中间层驱动中,在两个线程中分别调用这两个函数,每次写文件时都返回非法的参数错误,但在CreateDevice中CreateFile, DeviceIoControl中WriteFile总是成功的。另外在ndis Driver中你还可以调用NdisOpenFile和NdisMapFile来实现读写操作,它好象没有限制。
|
|