gpt4 book ai didi

c++ - 调用 LockFileEx() 时访问冲突

转载 作者:可可西里 更新时间:2023-11-01 09:48:58 25 4
gpt4 key购买 nike

我有一个 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() 时,我都会遇到访问冲突:

Unhandled exception at 0x7466c2ec in tftpServer.exe: 0xC0000005:
Access violation reading location 0x00000008.

文件句柄 m_fileDesc 绝对是一个有效的句柄(使用该句柄将文件映射到内存中)并且 m_mappingLength 只是一个 size_t包含以字节为单位的映射文件部分的长度。

有人知道如何解决这个问题吗?

最佳答案

您的最后一个参数是NULL,而它应该是指向OVERLAPPED 结构的指针。关于读取位置 0x00000008 的错误可能对应于记录的要求:

You must initialize the hEvent member to a valid handle or zero.

鉴于 hEvent 成员出现在两个指针之后,在 32 位编译中它将从结构的开头开始 8 个字节。所以 LockFileEx 可能正在尝试读取 hEvent 成员,然后崩溃了。

关于c++ - 调用 LockFileEx() 时访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7697373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com