IOCTL_CDROM_EXCLUSIVE_ACCESS IOCTL (ntddcdrm.h)
Запрос IOCTL_CDROM_EXCLUSIVE_ACCESS указывает драйверу класса CD-ROM:
- Сообщите о состоянии доступа устройства CD-ROM.
- Блокировка CD-ROM устройства для монопольного доступа.
- Разблокируйте устройство CD-ROM для эксклюзивного доступа.
Основной код
Входной буфер
В зависимости от операции, запрашивающей вызывающий объект, вызывающий объект должен предоставить одну из следующих структур в качестве входных данных в Irp->AssociatedIrp.SystemBuffer:
-
CDROM_EXCLUSIVE_ACCESS (чтобы сообщить о состоянии доступа устройства CD-ROM)
-
CDROM_EXCLUSIVE_LOCK (блокировка устройства CD-ROM для монопольного доступа)
-
CDROM_EXCLUSIVE_ACCESS (чтобы разблокировать устройство CD-ROM, заблокированное приложением для монопольного доступа)
Длина входного буфера
Элемент Parameters.DeviceIoControl.InputBufferLength в структуре IO_STACK_LOCATION указывает размер в байтах выделенного пользователем входного буфера.
Выходной буфер
Если вызывающий объект запрашивает монопольное состояние доступа устройства CD-ROM (RequestType = ExclusiveAccessQueryState), драйвер класса CD-ROM возвращает структуру типа CDROM_EXCLUSIVE_LOCK_STATEв буфере Irp->AssociatedIrp.SystemBuffer , член LockState указывает состояние доступа устройства.
Длина выходного буфера
Элемент Parameters.DeviceIoControl.OutputBufferLength в расположении стека ввода-вывода (IO_STACK_LOCATION) указывает размер в байтах выходного буфера.
Блок состояния
Поле information задано число возвращаемых байтов. Поле состояния имеет значение 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.
- Вызывающий объект отправил запрос с RequestType = ExclusiveAccessUnlockDevice, чтобы разблокировать устройство, которое не находится в эксклюзивном режиме.
STATUS_INVALID_DEVICE_STATE (код ошибки Windows: ERROR_BAD_COMMAND)
Вызывающий объект попытался заблокировать устройство во время подключения драйвера файловой системы на этом устройстве, не указывая, что драйвер класса должен приостановить проверку на наличие подключенного драйвера файловой системы. Чтобы приостановить проверку для подключенного драйвера файловой системы, вызывающий объект должен задать Флаги член CDROM_EXCLUSIVE_ACCESS 1.
STATUS_INVALID_HANDLE (код ошибки Windows: ERROR_INVALID_HANDLE)
Драйвер класса CD-ROM возвращает этот код состояния при возникновении одной из следующих двух ошибок:
- Файловый объект, необходимый для отслеживания запроса, недоступен. Драйвер класса CD-ROM не получил запрос на создание объекта файла из этого вызывающего объекта.
- Вызывающий объект отправил запрос с RequestType = ExclusiveAccessUnlockDevice для разблокировки устройства, даже если вызывающий объект не имеет монопольного доступа к устройству.
STATUS_INVALID_PARAMETER (код ошибки Windows: ERROR_INVALID_PARAMETER)
Драйвер класса CD-ROM возвращает этот код состояния при возникновении одной из следующих двух ошибок:
- Указанный RequestType не является допустимым членом EXCLUSIVE_ACCESS_REQUEST_TYPE.
- Строка имени вызывающего объекта в CallerName члена CDROM_EXCLUSIVE_LOCK нарушает соглашение об именовании. CallerName должно быть null-endd string, которая содержит следующие символы: буквенно-цифровые символы (A, z, z, 0 – 9), пробелы, точки, запятые, двоеточия (:), запятые, двоеточия (;), дефисы (-) и символы подчеркивания (_). Длина строки должна быть меньше CDROM_EXCLUSIVE_CALLER_LENGTH байтов, включая NULL в конце строки.
Требования
Требование | Ценность |
---|---|
заголовка | ntddcdrm.h (include Ntddcdrm.h) |