Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Подпрограммы отправки драйвера (см. DRIVER_DISPATCH) обрабатывают irPs с кодами функций ввода-вывода IRP_MJ_DEVICE_CONTROL иIRP_MJ_INTERNAL_DEVICE_CONTROL соответственно.
Для каждого общего типа периферийных устройств система определяет набор кодов управления ввода-вывода для IRP_MJ_DEVICE_CONTROL запросов. Новые драйверы для каждого типа устройства должны поддерживать эти запросы. В большинстве случаев эти общедоступные коды управления ввода-вывода для каждого типа устройства не экспортируются в приложения пользовательского режима.
** Некоторые из этих системных кодов управления вводом-выводом используются драйверами более высокого уровня, которые создают IRP для базового драйвера устройства вызовом функции IoBuildDeviceIoControlRequest. Другие используются компонентами Win32 для взаимодействия с базовым драйвером устройства путем вызова Функции Win32 DeviceIoControl (описано в документации по пакету SDK Для Microsoft Windows), который, в свою очередь, вызывает системную службу. Диспетчер ввода-вывода настраивает IRP и сохраняет основной код функции IRP_MJ_DEVICE_CONTROL и заданный код элемента управления ввода-вывода в структуре IO_STACK_LOCATION в Parameters.DeviceIoControl.IoControlCode. Затем диспетчер ввода-вывода вызывает подпрограмму DispatchDeviceControl самого высокого уровня драйвера в цепочке.
Для некоторых системных драйверов, предназначенных для взаимодействия и поддержки новых драйверов, операционная система также определяет набор кодов управления вводом-выводом для запросов IRP_MJ_INTERNAL_DEVICE_CONTROL. В большинстве случаев эти общедоступные коды управления ввода-вывода позволяют драйверам надстроек более высокого уровня взаимодействовать с базовым драйвером устройства.
Например, системные параллельные драйверы поддерживают набор внутренних кодов управления ввода-вывода, отправляемых поставщиками драйверов в IRP_MJ_INTERNAL_DEVICE_CONTROL запросах. Дополнительные сведения см. в руководстве по проектированию драйверов параллельных устройств.
Почти все операции, запрашиваемые с помощью системных кодов управления ввода-вывода, используют буферизированные операции ввода-вывода, так как этот тип запроса редко требует передачи больших объемов данных. То есть даже драйверы, которые настроили свои объекты устройства для прямых операций ввода-вывода, получают IRP для запросов управления устройствами с данными, которые передаются в буфер по адресу Irp-AssociatedIrp.SystemBuffer> (за исключением некоторых типов драйверов верхнего уровня с тесно связанными драйверами мультимедиа Win32).
Кроме того, драйвер может определить набор частных кодов управления ввода-вывода, с которыми могут взаимодействовать другие драйверы. Новые открытые коды управления ввода-вывода можно добавить в систему только с сотрудничеством корпорации Майкрософт, так как коды управления общедоступными ввода-выводами встроены в саму операционную систему.
Конкретные сведения о наборе общедоступных кодов управления ввода-выводами, которые должны поддерживать различные типы драйверов и о определении кодов управления частными ввода-выводами, см. в справочных разделах комплекта драйверов Windows (WDK).