LockFile 函数 (fileapi.h)
通过调用进程锁定指定的文件以供独占访问。
若要指定其他选项(例如创建共享锁或针对失败时阻止操作),请使用 LockFileEx 函数。
语法
BOOL LockFile(
[in] HANDLE hFile,
[in] DWORD dwFileOffsetLow,
[in] DWORD dwFileOffsetHigh,
[in] DWORD nNumberOfBytesToLockLow,
[in] DWORD nNumberOfBytesToLockHigh
);
参数
[in] hFile
文件的句柄。 文件句柄必须已使用 GENERIC_READ 或 GENERIC_WRITE 访问权限创建。 有关详细信息,请参阅 文件安全性和访问权限。
[in] dwFileOffsetLow
应开始锁定的文件中起始字节偏移量的低序 32 位。
[in] dwFileOffsetHigh
锁定应开始的文件中起始字节偏移量的高阶 32 位。
[in] nNumberOfBytesToLockLow
要锁定的字节范围的长度的低序 32 位。
[in] nNumberOfBytesToLockHigh
要锁定的字节范围的长度的高阶 32 位。
返回值
如果函数成功,则返回值为非零 (TRUE) 。
如果函数失败,则返回值为零, (FALSE) 。 要获得更多的错误信息,请调用 GetLastError。
注解
如果对 LockFile 的调用同步完成,则当完成端口与文件句柄关联时,完成项可能不会排队。
UnlockFile 函数解锁由 LockFile 锁定的文件区域。
锁定文件的区域可让锁定进程的线程使用此文件句柄独占访问指定区域。 如果文件句柄由锁定进程创建的进程继承,则不会向子进程授予对锁定区域的访问权限。 如果锁定进程第二次打开文件,则在解锁该区域之前,它无法通过第二个句柄访问指定区域。
锁定文件的区域不会阻止从映射的文件视图读取或写入。
可以锁定超出当前文件末尾的字节。 这对于协调将记录添加到文件末尾非常有用。
独占锁不能与文件的现有锁定区域重叠。 有关详细信息,请参阅 LockFileEx。
如果 LockFile 无法锁定文件的区域,它将立即返回零。 它不会阻止。 若要发出在获取锁之前阻止的文件锁定请求,请使用不带LOCKFILE_FAIL_IMMEDIATELY标志的 LockFileEx。
如果进程终止并锁定了文件的一部分,或者关闭了具有未完成锁的文件,则操作系统会解锁锁。 但是,操作系统解锁这些锁所需的时间取决于可用的系统资源。 因此,建议进程在终止时显式解锁已锁定的所有文件。 如果未执行此操作,则如果操作系统尚未解锁这些文件,可能会拒绝访问这些文件。
在 Windows 8 和 Windows Server 2012 中,此函数由以下技术支持。
技术 | 支持 |
---|---|
服务器消息块 (SMB) 3.0 协议 | 是 |
SMB 3.0 透明故障转移 (TFO) | 是 |
具有横向扩展文件共享的 SMB 3.0 (SO) | 是 |
群集共享卷文件系统 (CSV) | 是 |
弹性文件系统 (ReFS) | 是 |
示例
有关示例,请参阅 将一个文件追加到另一个文件。
要求
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | fileapi.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |