Moo*_*Moo 2 .net file-locking filelock
有没有办法,通过.Net或通过删除.Net中的Win32 API来访问Windows全局文件锁表?
我正在寻找一个更好的解决方案来确定一组文件是否被锁定,而不是检查每个单独的文件以查看是否已对其进行锁定.
不,它存储在ring 0代码中.内核代码,只有设备驱动程序才能访问它.通过例如SysInternals的Handle实用程序动态安装的类型.谁的作者还对未记录的内核结构进行了逆向工程,以找到该表,并愿意为所有以前和未来的Windows版本维护该代码.希望.
用户模式代码无意中无法实现这一点.当程序试图获得那种信息时,没有任何好事发生.与您的计划一样,检查文件是否已锁定.这根本无法在多任务操作系统上可靠地工作.
假设这样可以工作并且您编写了一个IsLocked()函数.当您发现文件未被锁定时,您将返回false.要被中断线程的操作系统上下文切换所抢占,就像IsLocked()返回给调用者一样.并在另一个锁定文件的进程中屈服于另一个线程.当你的线程恢复时,调用者会变错,但文件仍会被锁定.失败的鲸鱼总数.这样的错误很难排除故障.它会发生,只是不足以频繁发现为什么它不起作用.
锁必须是原子的,对于它们正常工作绝对必不可少.换句话说,测试和设置操作必须是不可中断的.在Windows中这很容易做到,只需打开文件即可.如果您无法获得锁定,则会失败.如果没有,那么没有其他人可以打开它,因为你也获得了锁.
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |