У меня есть класс 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()
, я получаю нарушение доступа:
Необработанное исключение в 0x7466c2ec в tftpServer.exe: 0xC0000005:
Место чтения нарушения доступа 0x00000008.
Дескриптор файла m_fileDesc
определенно является допустимым дескриптором (отображение файла в память с помощью этого дескриптора работает), а m_mappingLength
- это просто size_t
, содержащий длину отображаемой части файла в байтах.
У кого-нибудь есть идеи, как это исправить?