是否有办法通过.Net或通过放到.Net中的Win32 API来访问Windows全局文件锁定表?
我正在寻找一个更好的解决方案来确定一组文件是否被锁定,而不是检查每个单独的文件,看看它是否被锁定
否,它存储在环0代码中。内核代码,只有设备驱动程序才能访问它。例如,通过SysInternal的Handle实用程序动态安装的类型。其作者还对未记录的内核结构进行了逆向工程,以找到该表,并愿意为所有以前和未来的Windows版本维护该代码。有希望地
这是用户模式代码故意无法实现的。当程序试图获取这种信息时,什么都不会发生。就像你的计划一样,检查文件是否被锁定。这在多任务操作系统上根本无法可靠工作。
假设这是可行的,并且您将编写一个IsLocked()函数。当您发现文件未锁定时,将返回false。在IsLocked()返回调用方时,操作系统上下文开关会中断线程,从而抢占线程的先机。并向锁定文件的另一进程中的另一个线程让步。当您的线程恢复时,调用者会得到false,但文件仍然被锁定。彻底失败的鲸鱼。这样的错误很难排除。它会发生,只是频率不高,不足以发现为什么它不起作用。
锁必须是原子,这对于它们正确工作是绝对必要的。换句话说,测试和设置操作必须是不可中断的。这在Windows中很容易做到,只需打开文件即可。如果你不能获得锁,那么这将失败。如果没有,那么没有人可以打开它,因为你也获得了锁。