CreateFile () не удалось с кодом ошибки 32 при чтении Pendrive - PullRequest
2 голосов
/ 22 марта 2020

Я пытаюсь прочитать необработанные байты с диска E: ', но при попытке открыть диск с помощью CreateFIle() выдает код ошибки 32. Мой код выглядит следующим образом:

wchar_t  wszDrive[7];
wszDrive[0] = '\\';
wszDrive[1] = '\\';
wszDrive[2] = '.';
wszDrive[3] = '\\';
wszDrive[4] = 'e';
wszDrive[5] = ':';
wszDrive[6] = '\0';

hDevice = CreateFile(wszDrive,  //drive name to open                        

        GENERIC_READ | GENERIC_WRITE,   ////must be opened with exclusive access(No Sharing)
        0,                              // no access to the drive
        NULL,             // default security attributes
        OPEN_EXISTING,    // disposition i.e. if file already exist
        0,                // file attributes
        NULL);            // do not copy file attributes

if (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive
{
    printf("CreateFile() failed! from read with error %d.\n", GetLastError());// Program prints this line. with error code 32.
    return (FALSE);
}
else
    cout << "\nCreateFile() successful! in read";

Редактировать: CreateFile() работает без ошибок, если я использую FILE_SHARE_READ | FILE_SHARE_WRITE:

hDevice = CreateFile(wszDrive,                                            
                        GENERIC_READ | 
                        GENERIC_WRITE,
                        FILE_SHARE_READ | FILE_SHARE_WRITE,
                        NULL,             
                        OPEN_EXISTING,    
                        0,                
                        NULL);

Почему я не могу работать с монопольным доступом?

1 Ответ

2 голосов
/ 22 марта 2020

Ошибка 32: ERROR_SHARING_VIOLATION.

Процесс не может получить доступ к файлу, поскольку он используется другим процессом.

Это означает, что уже имеется открытый дескриптор диска, и этот дескриптор использует права доступа / общего доступа, которые не совместимы с запрашиваемыми вами правами доступа / общего доступа.

Именно поэтому вы не можете открыть диск для эксклюзивного доступа, но вы можете открыть его для совместного использования для чтения / записи - в другом месте диск уже открыт для чтения / записи.

Если вы хотите точно знать, где именно, вы можете использовать такой инструмент, как SysInternals Process Explorer , чтобы увидеть, какие процессы имеют открытые дескрипторы для каких файлов / папок, устройств и т. Д. c.

...