我有一个 FileMapping 类,它允许我使用 Win32 API 函数LockFileEx()锁定一个文件以供我的进程独占使用。
bool FileMapping::lockFile(bool wait) {
if (isFileLocked())
return true;
// We want an exclusive lock.
DWORD flags = LOCKFILE_EXCLUSIVE_LOCK;
// If we don't want the thread to block, we have to set the appropriate flag.
if (!wait)
flags |= LOCKFILE_FAIL_IMMEDIATELY;
m_isFileLocked = LockFileEx(m_fileDesc, flags, 0, (DWORD) m_mappingLength, (DWORD) (((uint64_t) m_mappingLength) >> 32), NULL);
return m_isFileLocked;
}
每当我接到LockFileEx()
电话时,我都会遇到访问冲突:
tftpServer.exe 中 0x7466c2ec 处未处理的异常:0xC0000005:
访问冲突读取位置 0x00000008。
文件句柄m_fileDesc
绝对是一个有效的句柄(使用该句柄将文件映射到内存中),并且m_mappingLength
只是size_t
包含映射文件部分的长度(以字节为单位)。
有人知道如何解决这个问题吗?