IOCTL_CDROM_EXCLUSIVE_ACCESS IOCTL (ntddcdrm.h)
Запрос IOCTL_CDROM_EXCLUSIVE_ACCESS указывает драйверу класса CD-ROM:
- Сообщите о состоянии доступа устройства компакт-диска.
- Блокировка устройства компакт-дисков для монопольного доступа.
- Разблокируйте устройство компакт-диска для монопольного доступа.
Основной код
Входной буфер
В зависимости от операции, которую запрашивает вызывающий объект, вызывающий объект должен предоставить одну из следующих структур в качестве входных данных в Irp-AssociatedIrp.SystemBuffer>:
-
CDROM_EXCLUSIVE_ACCESS (для отчета о состоянии доступа устройства компакт-диска)
-
CDROM_EXCLUSIVE_LOCK (для блокировки устройства компакт-дисков для монопольного доступа)
-
CDROM_EXCLUSIVE_ACCESS (для разблокировки устройства компакт-диска, заблокированного приложением для монопольного доступа)
Длина входного буфера
Элемент Parameters.DeviceIoControl.InputBufferLength в структуре IO_STACK_LOCATION указывает размер в байтах выделенного пользователем входного буфера.
Выходной буфер
Если вызывающий объект запрашивает состояние монопольного доступа устройства компакт-диска (RequestType = ExclusiveAccessQueryState), драйвер класса CD-ROM возвращает структуру CDROM_EXCLUSIVE_LOCK_STATE типа в буфере по адресу Irp-AssociatedIrp.SystemBuffer>, член Которого LockState указывает состояние доступа устройства.
Длина выходного буфера
Элемент Parameters.DeviceIoControl.OutputBufferLength в расположении стека ввода-вывода (IO_STACK_LOCATION) указывает размер выходного буфера в байтах.
Блок состояния
В поле Сведения задается количество возвращаемых байтов. В поле Состояние задано значение STATUS_SUCCESS, если запрос будет выполнен успешно.
Если запрос завершается ошибкой, в поле Состояние может быть задано одно из следующих сообщений об ошибке:
STATUS_ACCESS_DENIED (код ошибки Windows: ERROR_ACCESS_DENIED)
Устройство уже заблокировано для монопольного доступа.
STATUS_BUFFER_TOO_SMALL (код ошибки Windows: ERROR_INSUFFICIENT_BUFFER)
Выходной буфер был слишком мал для запроса ExclusiveAccessQueryState .
STATUS_INFO_LENGTH_MISMATCH (код ошибки Windows: ERROR_BAD_LENGTH)
Входной буфер был слишком мал.
STATUS_INVALID_DEVICE_REQUEST (код ошибки Windows: ERROR_INVALID_FUNCTION)
Драйвер класса CD-ROM возвращает этот код состояния при возникновении одной из следующих двух ошибок:
- Вызывающий объект сделал запрос на уровне IRQL, отличном от PASSIVE_LEVEL.
- Вызывающий объект отправил запрос с запросомExclusiveAccessUnlockDevice = на разблокировку устройства, которое не находится в монопольном режиме.
STATUS_INVALID_DEVICE_STATE (код ошибки Windows: ERROR_BAD_COMMAND)
Вызывающий объект пытался заблокировать устройство, когда драйвер файловой системы был подключен на этом устройстве, не указывая, что драйвер класса должен приостановить проверка для подключенного драйвера файловой системы. Чтобы приостановить проверка для подключенного драйвера файловой системы, вызывающий объект должен установить для элемента FlagsCDROM_EXCLUSIVE_ACCESS значение 1.
STATUS_INVALID_HANDLE (код ошибки Windows: ERROR_INVALID_HANDLE)
Драйвер класса CD-ROM возвращает этот код состояния при возникновении одной из следующих двух ошибок:
- Объект файла, необходимый для отслеживания запроса, был недоступен. Драйвер класса CD-ROM не получил запрос на создание файлового объекта от этого вызывающего объекта.
- Вызывающий объект отправил запрос с запросомExclusiveAccessUnlockDevice = на разблокировку устройства, даже если вызывающий объект не имеет монопольного доступа к устройству.
STATUS_INVALID_PARAMETER (код ошибки Windows: ERROR_INVALID_PARAMETER)
Драйвер класса CD-ROM возвращает этот код состояния при возникновении одной из следующих двух ошибок:
- Указанный параметр RequestType не является допустимым членом EXCLUSIVE_ACCESS_REQUEST_TYPE.
- Строка имени вызывающего объекта в элементе CallerNameCDROM_EXCLUSIVE_LOCK нарушает соглашение об именовании. CallerName должен быть строкой, завершающейся значением NULL, которая содержит следующие символы: буквы и цифры (A – Z, a – z, 0 – 9), пробелы, точки, запятые, двоеточие (:), точка с запятой (;), дефисы (-) и символы подчеркивания (_). Длина строки должна быть меньше CDROM_EXCLUSIVE_CALLER_LENGTH байтов, включая значение NULL в конце строки.
Требования
Требование | Значение |
---|---|
Заголовок | ntddcdrm.h (включая Ntddcdrm.h) |