CreateFile error with ERROR_SHARING_VIOLATION error

Im using CreateFile api and several times it randomly crashes with an error: ERROR_SHARING_VIOLATION.

I have googled, and there is almost nothing about this error. The strange thing is the next time it’s quite happy to open the same file.

Here is my code:

void FileHandle::open(const char* fileName, FILE_MODE mode)
{
    if (m_bIsOpen)
        close();

    HANDLE fh = NULL;

    DWORD dwDesiredAccess  = GENERIC_READ;
    DWORD dwShareMode = FILE_SHARE_READ;
    DWORD dwCreationDisposition = OPEN_EXISTING;

    switch (mode)
    {
    case FILE_READ:
        break;

    case FILE_WRITE:
        dwDesiredAccess  = GENERIC_WRITE;
        dwShareMode = 0;
        dwCreationDisposition = CREATE_ALWAYS;
        break;

    case FILE_APPEND:
        dwDesiredAccess  = GENERIC_WRITE;
        dwShareMode = 0;
        dwCreationDisposition = OPEN_ALWAYS;
        break;

    default:
        throw gcException(ERR_INVALID, "The mode was invalid");
        break;
    }

    fh = CreateFile(fileName, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, 0, NULL);

    if (!fh || fh == INVALID_HANDLE_VALUE)
        throw gcException(ERR_INVALIDFILE, GetLastError(), gcString("Failed to open the file {0}", fileName));

    m_hFileHandle = fh;
    m_bIsOpen = true;

    if (mode == FILE_APPEND)
    {
        DWORD high = 0;
        DWORD low = GetFileSize(fh, &high);

        uint64 pos = (((uint64)high)<<32) + (uint64)low;
        seek(pos);
    }
}

Am I doing something wrong or is there a problem with the api?

Edit: Im using the full file name (i.e. C: \ somefile.txt) and mode = FILE_WRITE

+3
source share
4 answers

CreateFile - , - . , 0, .

, Process Explorer, , .

+6

? AV- ( , ) .

, ( FILE_WRITE FILE_APPEND, ).

+1

, - :

, , ?

ctrl-Z Linux, , , . , " : " . , , . , .

+1

Microsoft , , , . Horrid, .

0

Source: https://habr.com/ru/post/1780137/


All Articles