IOCTL_VPCI_INVALIDATE_BLOCK IOCTL (vpci.h)
Драйвер виртуальной функции PCI Express (PCIe) выдает запрос IOCTL_VPCI_INVALIDATE_BLOCK IOCTL для уведомления об изменениях данных в одном или нескольких блоках конфигурации VF. Драйвер уведомляется об этих изменениях при завершении IOCTL. После уведомления драйвер должен предположить, что все данные, ранее считываемые из указанных блоков конфигурации VF, стали недействительными. Таким образом, драйвер должен обновить кэш, считывая данные блока конфигурации снова.
Драйвер выдает этот IOCTL следующему драйверу в стеке драйверов.
- подготовка структуры пакета запросов ввода-вывода
- подготовка структуры расположения стека ввода-вывода
- выдачи запроса IOCTL
- Результаты завершения запроса IOCTL
Основной код
Блок состояния
Irp->IoStatus.Status имеет значение STATUS_SUCCESS, если запрос выполнен успешно.
В противном случае состояние соответствующего условия ошибки в виде кода NTSTATUS.
Дополнительные сведения см. в разделе [Значения XREF-LINK:NTSTATUS].
Замечания
подготовка структуры пакета запросов ввода-вывода
Драйвер должен сначала выделить или повторно использовать пакет запроса ввода-вывода (IRP). Вы можете использовать подпрограмму ioBuildDeviceIoControlRequest, чтобы специально выделить IOCTL IRP. Вы также можете использовать процедуры создания и инициализации IRP общего назначения, например IoAllocateIrp, IoReuseIrpили IoInitializeIrp. Дополнительные сведения о выделении IRP см. в разделе Создании irPs для драйверов Lower-Level.Затем драйвер должен задать элементы структуры IRP, как описано в следующей таблице.
член IRP | Ценность |
---|---|
UserBuffer | NULL |
UserEvent |
Адрес объекта события, который был инициализирован в вызове подпрограммы KeInitializeE vent.
Примечание Если асинхронное завершение запроса IOCTL не требуется, этот элемент должен иметь значение NULL. Дополнительные сведения см. в создании запросов IOCTL в драйверах.
|
UserIosb | Адрес выделенной вызывающей IO_STATUS_BLOCK структуры. Эта структура обновляется нижним драйвером, чтобы указать окончательное состояние запроса ввода-вывода. |
подготовка структуры расположения стека ввода-вывода
Драйвер вызывает процедуру IoGetNextIrpStackLocation для доступа к расположению стека ввода-вывода нижнего драйвера. Эта функция возвращает указатель на структуру IO_STACK_LOCATION, содержащую параметры расположения стека ввода-вывода.Затем драйвер должен задать элементы в структуре IO_STACK_LOCATION, как описано в следующей таблице.
элемент IO_STACK_LOCATION | Ценность |
---|---|
MajorFunction | |
параметры.DeviceIoControl.IoControlCode | |
параметры.DeviceIoControl.Type3InputBuffer | Указатель на структуру VPCI_INVALIDATE_BLOCK_OUTPUT. Драйвер форматирует эту структуру с параметрами для запроса ввода-вывода IOCTL_VPCI_INVALIDATE_BLOCK. |
параметров.DeviceIoControl.InputBufferLength | Размер структуры VPCI_INVALIDATE_BLOCK_OUTPUT в байтах. |
параметры.DeviceIoControl.OutputBufferLength |
Размер выделенного вызывающего буфера в байтах, который будет содержать данные конфигурации для чтения.
Примечание Это значение должно совпадать со значением элемента BytesRequested структуры VPCI_INVALIDATE_BLOCK_OUTPUT.
|
выдачи запроса IOCTL
Чтобы выполнить этот запрос IOCTL, драйвер вызывает процедуру IoCallDriver, чтобы передать запрос следующему драйверу в стеке драйверов. Драйвер задает параметры IoCallDriver, как описано в следующей таблице.параметр IoCallDriver | Ценность |
---|---|
DeviceObject | Объект устройства нижнего драйвера. |
Irp | Адрес IRP, который ранее был выделен и инициализирован. Дополнительные сведения см. в подготовке структуры пакетов ввода-вывода. |
Результаты завершения запроса IOCTL
После завершения запроса IOCTL IOCTL_VPCI_INVALIDATE_BLOCK члены выделенной вызывающей IO_STATUS_BLOCK структуры задаются значения в следующей таблице.
Значение состояния | Ценность |
---|---|
состояния | STATUS_SUCCESS |
сведения | Нуль |
После выдачи и завершения IOCTL_VPCI_INVALIDATE_BLOCK IOCTL драйвер VF уведомляется о том, что драйвер PF изменил (недопустимые) данные в одном или нескольких блоках конфигурации VF.
- Драйвер VF, который выполняется в гостевой операционной системе. Эта операционная система выполняется в дочерней секции Hyper-V.
-
Драйвер PF, который выполняется в операционной системе управления.
Эта операционная система выполняется в родительском разделе Hyper-V.
- В гостевой ОС NDIS выдает запрос IOCTL_VPCI_INVALIDATE_BLOCK.
-
В операционной системе управления выполняются следующие действия:
- Драйвер мини-порта PF вызывает функцию NdisMInvalidateConfigBlock, чтобы уведомить NDIS о том, что изменены данные конфигурации VF и больше не являются допустимыми. Драйвер задает параметр BlockMaskбитовую маску ULONGLONG, указывающую, какие блоки конфигурации VF изменились. Каждый бит в битовой маске соответствует блоку конфигурации VF. Если для бита задано одно значение, данные в соответствующем блоке конфигурации VF изменились.
-
NDIS сигнализирует стек виртуализации, который выполняется в операционной системе управления, об изменении данных блока конфигурации VF. Стек виртуализации кэширует данные параметров BlockMask.
Примечание Каждый раз, когда драйвер мини-порта PF вызывает NdisMInvalidateConfigBlock, стек виртуализации ORпараметров BlockMask с текущим значением в кэше.
- Стек виртуализации уведомляет драйвер виртуальной PCI (VPCI), который выполняется в гостевой ОС, о недопустимости данных конфигурации VF. Стек виртуализации отправляет кэшированные данные параметров BlockMask драйверу VPCI.
-
В гостевой ОС выполняются следующие действия.
- Драйвер VPCI сохраняет кэшированные данные параметра BlockMask BlockMask в элементе BlockMask элемента структуры VPCI_INVALIDATE_BLOCK_OUTPUT, связанной с запросом IOCTL_VPCI_INVALIDATE_BLOCK.
-
Драйвер VPCI успешно завершает запрос IOCTL_VPCI_INVALIDATE_BLOCK. В этом случае NDIS выдает запрос идентификатора объекта (OID) OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK драйверу мини-порта VF. Указатель на структуру NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO передается в запросе OID. Эта структура содержит кэшированные данные параметров BlockMask.
NDIS также выдает другой запрос IOCTL_VPCI_INVALIDATE_BLOCK для обработки последовательных уведомлений об изменениях данных конфигурации VF.
- Когда драйвер VF обрабатывает запрос OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK, он считывает данные из указанных блоков конфигурации VF.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Поддерживается в Windows Server 2012 и более поздних версиях Windows. |
заголовка | vpci.h (include Wdm.h) |
IRQL | DISPATCH_LEVEL |
См. также
IRP_MJ_INTERNAL_DEVICE_CONTROL
создание запросов IOCTL в драйверах
OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK
NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO