Windows LockFileEx返回成功,但似乎没有效果

Windows LockFileEx返回成功,但似乎没有效果,windows,file-io,mutex,Windows,File Io,Mutex,我试图锁定一个文件,因为它位于网络驱动器上,来自多台计算机的多个程序实例需要编辑它。为了防止损害,我打算设置它,以便一次只有一个实例有权使用它 我实现了一个锁,从理论上讲,它可以从任何访问中锁定文件的前100个字节。我使用Qt处理自己的文件,但它有一个返回通用文件句柄的方法 QFile文件(路径); HANDLE HANDLE=(HANDLE)\u get\u osfhandle(file.HANDLE()); 重叠ov1; memset(&ov1,0,sizeof(ov1)); ov1.偏移量

我试图锁定一个文件,因为它位于网络驱动器上,来自多台计算机的多个程序实例需要编辑它。为了防止损害,我打算设置它,以便一次只有一个实例有权使用它

我实现了一个锁,从理论上讲,它可以从任何访问中锁定文件的前100个字节。我使用Qt处理自己的文件,但它有一个返回通用文件句柄的方法

QFile文件(路径);
HANDLE HANDLE=(HANDLE)\u get\u osfhandle(file.HANDLE());
重叠ov1;
memset(&ov1,0,sizeof(ov1));
ov1.偏移量=0;
ov1.OffsetHigh=0;
if(句柄==无效的句柄值)
{
//错误
返回;
}
LockFileEx(句柄、LOCKFILE_立即失效| LOCKFILE_独占_锁定、0、100、0和ov1);

qDebug()问题在于,当程序没有终止时,
QFile
变量是本地变量,因此在完成函数后,调用了
QFile
的析构函数,因此它释放了文件。操作系统似乎已经释放了锁

如果我的
QFile
在该范围内幸存,则一切正常。一个小问题是,虽然我希望该文件被锁定以防读取,但外部程序确实对其具有只读访问权限。这不是问题,因为我的程序可以检查是否可以创建锁,并检测失败。这意味着预期的互斥功能可以工作