2013-09-19 4 views
2

Я проработал около codeproject статей о драйверах dev, но некоторые путаницы в IOCTL и IRP. Из того, что я видел, кажется, что IOCTLs отправляются из usermode и переводятся в IRP. И IRP - это сообщения между ОС и устройством, но это, похоже, не совпадает с описаниями, которые я читаю ... заставляя думать, что я могу что-то упустить.В чем разница между IOCTL и IRP

TLDR В чем разница между IOCTL и IRP?

ответ

10

IRP - это структуры ядра Windows. Они используются для представления запроса ввода-вывода при его перемещении по системе ядра. Например, файловая система, которая должна считывать с блочного устройства, генерирует IRP, который представляет свой запрос на чтение, и передает его блочному устройству. Блок-устройство обрабатывает IRP, помещает результаты в IRP, отмечает его завершение и сообщает файловой системе, чтобы посмотреть IRP, чтобы получить данные. Устройства могут поддерживать очереди IRP, над которыми они работают.

IOCTL - это запрос к устройству, обычно получаемому из приложения для пользовательского пространства. Обычно они используются для запросов, которые не вписываются в стандартный API. Например, вы обычно не использовали IOCTL для открытия файла в файловой системе.

Когда программа выдает IOCTL на устройство, IRP (обычно IRP_MJ_DEVICE_CONTROL) создается в пространстве ядра, чтобы отразить этот запрос.

Таким образом, IOCTL представляет собой особый тип «разного» запроса к драйверу устройства. IRP - это структура данных для управления всеми типами запросов внутри архитектуры ядра драйвера Windows.

2

IOCTL является мнемоником для управляющего кода ввода-вывода или 32-разрядного значения с определенными в нем битовыми полями, которые предоставляют диспетчеру ввода-вывода буферизацию и другую информацию. Пакет запросов IRP или IO представляет собой структуру или определенный фрагмент памяти, созданный менеджером ввода-вывода, который имеет всю информацию, необходимую драйверу для выполнения данного действия в запросе ввода-вывода, включая IOCTL. IOCTL используется как в режиме ядра, так и в режиме пользователя, но IRP действителен только в ядре и целевом стеке драйверов или драйверов.

от пользователя DeviceIoControl пространства приложений() -> kernel32.dll -> ntdll.dll - режим> в тот момент он получает из пользовательского режима ядра -> I/O Manager -> IRP

 Смежные вопросы

  • Нет связанных вопросов^_^