Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Коды управления ввода-вывода (IOCTLs) используются для обмена данными между приложениями и драйверами в пользовательском режиме или для внутреннего взаимодействия между драйверами в стеке. Коды управления ввода-вывода отправляются с помощью irPs.
Приложения в режиме пользователя отправляют ioCTLs драйверам, вызывая DeviceIoControl, который описан в документации по Пакету SDK для Microsoft Windows. Вызовы DeviceIoControl заставляют менеджер ввода-вывода создать запрос IRP_MJ_DEVICE_CONTROL и отправить его к верхнему драйверу.
Кроме того, драйверы верхнего уровня могут отправлять ioCTL в драйверы нижнего уровня, создавая и отправляя IRP_MJ_DEVICE_CONTROL или IRP_MJ_INTERNAL_DEVICE_CONTROL запросы. Драйверы обрабатывают эти запросы в подпрограммах DispatchDeviceControl и DispatchInternalDeviceControl . (Приложения в пользовательском режиме не могут отправлять запросы IRP_MJ_INTERNAL_DEVICE_CONTROL .)
Некоторые ioCTLs являются общедоступными, и некоторые из них являются частными. Общедоступные IOCTLs обычно определяются системой и документируются корпорацией Майкрософт, либо в комплекте драйверов Windows (WDK), либо в пакете SDK для Windows. Они могут отправляться с вызовами компонента пользовательского режима в DeviceIoControl или отправляться из одного драйвера режима ядра в другой с помощью IRP_MJ_DEVICE_CONTROL или IRP_MJ_INTERNAL_DEVICE_CONTROL запросов.
С другой стороны, частные IOCTLs предназначены для использования исключительно компонентами программного обеспечения поставщика для взаимодействия между собой. Частные IOCTLs обычно определяются в файле заголовка, предоставленном поставщиком, и не документируются в открытых источниках. Как и общедоступные IOCTLs, они могут отправляться с вызовами компонента пользовательского режима в DeviceIoControl, или они могут отправляться от одного драйвера режима ядра к другому с помощью запросов IRP_MJ_DEVICE_CONTROL или IRP_MJ_INTERNAL_DEVICE_CONTROL.
Между кодированием общедоступных и частных операций ввода-вывода нет разницы. Однако существуют различия во внутренних кодах, которые можно использовать в IOCTL, определяемых поставщиком, по сравнению с теми, которые используются для системных IOCTL. Если доступные общедоступные ioCTLs не соответствуют вашим потребностям, можно определить новые частные ioCTLs, которые компоненты программного обеспечения могут использовать для взаимодействия друг с другом. Дополнительные сведения см. в разделе Определение кодов управления ввода-вывода.