Поделиться через


IRP_MJ_PNP (драйверы FS и фильтров)

При отправке

Диспетчер Plug and Play отправляет запрос IRP_MJ_PNP всякий раз, когда в системе происходит Plug and Play действие. Другие компоненты операционной системы и другие драйверы режима ядра также могут отправлять определенные запросы IRP_MJ_PNP в зависимости от дополнительного кода функции.

Дополнительные сведения о требованиях к обработке Plug and Play IRP для драйверов см. в разделе Plug and Play.

Справочные сведения о IRP_MJ_PNP дополнительных кодах функций см. в разделе Plug and Play Дополнительные функции IRP.

Операция: драйверы файловой системы

Файловая система должна проверка дополнительный код функции, чтобы определить, какая операция запрашивается. Файловые системы должны обрабатывать следующие коды дополнительных функций:

Код Описание
IRP_MN_CANCEL_REMOVE_DEVICE Указывает, что предыдущий запрос на удаление устройства был отменен. Этот запрос отправляется для оповещения файловой системы на случай, если ей потребуется выполнить очистку, связанную с отменой.
IRP_MN_QUERY_REMOVE_DEVICE Указывает, что устройство будет удалено. Если на устройстве подключена файловая система, диспетчер PnP отправляет этот запрос в файловую систему и любые фильтры файловой системы. При наличии открытых дескрипторов для устройства файловая система обычно завершается ошибкой запроса на удаление. В противном случае файловая система обычно блокирует том, чтобы предотвратить последующие запросы на создание. Если подключенная файловая система не поддерживает запрос на удаление запросов, диспетчер PnP не выполняет запрос на удаление запроса для устройства.
IRP_MN_REMOVE_DEVICE Указывает, что устройство будет удалено. Если на устройстве подключена файловая система, диспетчер PnP отправляет этот IRP в файловую систему и любые фильтры файловой системы. Файловая система должна немедленно передать этот IRP драйверу хранилища для устройства, задав процедуру завершения, в которой файловая система затем отключает том.
IRP_MN_START_DEVICE Указывает, что устройство запускается. Файловая система должна передать этот IRP драйверу хранилища для устройства.
IRP_MN_SURPRISE_REMOVAL Указывает, что устройство было удалено. Если на устройстве была подключена файловая система, диспетчер PnP отправляет этот IRP в файловую систему и любые фильтры файловой системы. Файловая система должна немедленно передать этот IRP драйверу хранилища для устройства, задав процедуру завершения, в которой файловая система затем отключает том.

Операция: устаревшие драйверы фильтров файловой системы

Драйверы фильтров файловой системы должны обрабатывать PnP IRP в соответствии со следующими рекомендациями:

  • Когда пользователь выполняет корректное удаление тома, диспетчер PnP отправляет запрос IRP_MN_QUERY_REMOVE_DEVICE. При получении этого IRP фильтр должен закрыть все открытые дескрипторы тома и передать IRP в следующий драйвер в стеке. Это важный шаг. Если драйверу не удается закрыть все открытые дескрипторы, отключается том, что, в свою очередь, предотвращает извлечение физического устройства.

    При получении запроса IRP_MN_QUERY_REMOVE_DEVICE файловая система FAT немедленно отключает все тома, которые она может безопасно удалить. Таким образом, любой фильтр, подключенный к тому FAT, должен ожидать, что его объект устройства фильтра будет освобожден до вызова процедуры завершения фильтра. Файловая система NTFS этого не делает. Таким образом, фильтр, подключенный к тому NTFS, может ожидать, что его объект устройства по-прежнему подключен к тому при вызове процедуры завершения фильтра.

  • Поставщики irP, полученные после запроса IRP_MN_QUERY_REMOVE_DEVICE, но до получения запроса IRP_MN_CANCEL_REMOVE_DEVICE или IRP_MN_REMOVE_DEVICE, могут быть безопасно переданы в стек для стека устройств хранения, чтобы они завершились ошибкой, или храниться в очереди до получения запроса cancel-remove или remove-device.

  • Если фильтр получает запрос IRP_MN_CANCEL_REMOVE_DEVICE после того, как он уже закрыл все открытые дескриптора для тома в ответ на запрос IRP_MN_QUERY_REMOVE_DEVICE, он может повторно открыть дескрипторы. Однако фильтр может повторно открыть это только в своей процедуре завершения после успешного завершения IRP драйверами под ним в стеке.

  • Когда фильтр получает запрос IRP_MN_REMOVE_DEVICE, ему, как правило, не требуется выполнять обработку IRP, если только он не держал IRP в очереди с момента получения запроса IRP_MN_QUERY_REMOVE_DEVICE. Если в очереди содержится IRP, фильтр должен вывести из очереди все irP для тома и завершить их сбоем перед передачей IRP в следующий драйвер в стеке.

  • При получении запроса IRP_MN_SURPRISE_REMOVAL фильтр должен выполнять следующие операции:

    • Закройте все открытые дескрипторы для тома, так как файловая система не может очистить стек до тех пор, пока не будет невыполненных ссылок.

    • Если фильтр содержит IRP в очереди, он может либо завершить их сбоем, либо передать их в стек, чтобы стек устройств хранения не смог их выполнить.

Параметры

Файловая система или драйвер фильтра вызывает IoGetCurrentIrpStackLocation для заданного IRP, чтобы получить указатель на собственное расположение стека в IRP. В следующих параметрах Irp указывает на IRP , а IrpSpна IO_STACK_LOCATION. Драйвер может использовать сведения, заданные в следующих элементах IRP и расположении стека IRP для обработки запроса Plug and Play:

  • DeviceObject — это указатель на целевой объект устройства.

  • Irp->IoStatus указывает на структуру IO_STATUS_BLOCK , которая получает окончательное состояние завершения и сведения о запрошенной операции.

  • IrpSp->FileObject должен указывать на NULL для PnP IRP.

  • IrpSp->MajorFunction имеет значение IRP_MJ_PNP.

  • IrpSp->Параметр MinorFunction имеет одно из следующих значений:

    • IRP_MN_CANCEL_REMOVE_DEVICE
    • IRP_MN_QUERY_REMOVE_DEVICE
    • IRP_MN_REMOVE_DEVICE
    • IRP_MN_START_DEVICE
    • IRP_MN_SURPRISE_REMOVAL

См. также раздел

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_PNP (справочник по ядру WDK)

IRP_MN_CANCEL_REMOVE_DEVICE

IRP_MN_QUERY_REMOVE_DEVICE

IRP_MN_REMOVE_DEVICE

IRP_MN_START_DEVICE

IRP_MN_SURPRISE_REMOVAL