【发布时间】:2011-10-08 14:14:08
【问题描述】:
我有一个 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,其中包含映射文件部分的长度(以字节为单位)。
有人知道如何解决这个问题吗?
【问题讨论】:
-
this 指针为空。您正在对空 FileMapping 对象调用此方法。
标签: c++ windows winapi file-locking