IRP_MJ_DEVICE_CONTROL (драйверы FS и фильтров)
При отправке
Диспетчер ввода-вывода, другие компоненты операционной системы и другие драйверы, работающие в режиме ядра, отправляют запросы IRP_MJ_DEVICE_CONTROL. Обычно эта IRP отправляется от имени приложения пользовательского режима, которое вызывает функцию Win32 DeviceIoControl , или от имени компонента режима ядра, который называется ZwDeviceIoControlFile.
Операция: драйверы файловой системы
Драйвер файловой системы должен извлечь и декодировать файловый объект, чтобы определить, был ли выполнен запрос для дескриптора, открытого на томе. В этом случае драйвер файловой системы должен передать IRP драйверу устройства хранения, к которому подключен том. В противном случае драйвер должен завершиться ошибкой IRP.
Операция: устаревшие драйверы фильтров файловой системы
Драйвер фильтра должен выполнить необходимую обработку и в зависимости от характера фильтра либо завершить IRP, либо передать его следующему драйверу в стеке.
Параметры
Драйвер файловой системы или фильтра вызывает IoGetCurrentIrpStackLocation для заданного IRP, чтобы получить указатель на собственное расположение стека в IRP. В следующих параметрах Irp указывает на IRP , а IrpSp — на IO_STACK_LOCATION. Драйвер может использовать сведения, заданные в следующих элементах IRP и расположении стека IRP, для обработки запроса на управление устройством.
DeviceObject — это указатель на целевой объект устройства.
Irp->AssociatedIrp.SystemBuffer указывает на предоставленный системой входной буфер, передаваемый драйверу устройства для целевого устройства. Используется для METHOD_BUFFERED или METHOD_DIRECT ввода-вывода. Является ли этот параметр обязательным, зависит от конкретного кода элемента управления вводом-выводом.
Irp->IoStatus указывает на структуру IO_STATUS_BLOCK , которая получает окончательное состояние завершения и сведения о запрошенной операции. Дополнительные сведения см. в описании параметра IoStatusBlock в ZwDeviceIoControlFile.
Irp->MdlAddress — это адрес списка дескрипторов памяти (MDL), описывающий выходной буфер, передаваемый драйверу устройства для целевого устройства. Используется для METHOD_DIRECT ввода-вывода. Является ли этот параметр обязательным, зависит от конкретного кода элемента управления вводом-выводом.
Irp->RequestorMode указывает режим выполнения процесса, который запросил операцию, либо KernelMode , либо UserMode.
Irp->UserBuffer указывает на предоставленный вызывающим объектом выходной буфер, который передается драйверу устройства для целевого устройства. Используется для METHOD_BUFFERED или METHOD_NEITHER ввода-вывода. Является ли этот параметр необязательным или обязательным, зависит от конкретного кода элемента управления вводом-выводом.
IrpSp->FileObject указывает на объект файла, связанный с DeviceObject.
Параметр IrpSp-FileObject> содержит указатель на поле RelatedFileObject, которое также является FILE_OBJECT структурой. Поле RelatedFileObject структуры FILE_OBJECT недопустимо во время обработки IRP_MJ_DEVICE_CONTROL и не должно использоваться.
IrpSp->MajorFunction имеет значение IRP_MJ_DEVICE_CONTROL.
IrpSp->Parameters.DeviceIoControl.InputBufferLength — это размер буфера в байтах, на который указывает Irp-AssociatedIrp.SystemBuffer>.
IrpSp->Parameters.DeviceIoControl.IoControlCode — это код функции IOCTL, который передается драйверу устройства для целевого устройства.
Подробные сведения о запросах IOCTL см. в разделах Использование кодов управления вводом-выводом и Коды управления вводом и выводом устройств в документации по Windows SDK.
IrpSp->Parameters.DeviceIoControl.OutputBufferLength — это размер буфера в байтах, на который указывает Irp-UserBuffer>.
IrpSp->Parameters.DeviceIoControl.Type3InputBuffer — это входной буфер для запросов в режиме ядра, использующих METHOD_NEITHER.
См. также раздел
IRP_MJ_DEVICE_CONTROL (справочник по ядру WDK)
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по