IOCTL_VPCI_WRITE_BLOCK IOCTL (vpci.h)
Драйвер виртуальной функции PCI Express (PCIe) выдает IOCTL_VPCI_WRITE_BLOCK код управления ввода-вывода (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 | |
Parameters.DeviceIoControl.IoControlCode | |
Parameters.DeviceIoControl.Type3InputBuffer | Указатель на структуру VPCI_WRITE_BLOCK_INPUT. Драйвер форматирует эту структуру с параметрами для запроса ввода-вывода IOCTL_VPCI_WRITE_BLOCK. |
Parameters.DeviceIoControl.InputBufferLength | Размер структуры VPCI_WRITE_BLOCK_INPUT в байтах. |
Parameters.DeviceIoControl.OutputBufferLength | Нуль |
выдачи запроса IOCTL
Чтобы выполнить этот запрос IOCTL, драйвер вызывает процедуру IoCallDriver, чтобы передать запрос следующему драйверу в стеке драйверов. Драйвер задает параметры IoCallDriver, как описано в следующей таблице.Параметр IoCallDriver | Ценность |
---|---|
DeviceObject | Объект устройства нижнего драйвера. |
Irp | Адрес IRP, который ранее был выделен и инициализирован. Дополнительные сведения см. в разделе Подготовка структуры пакета запросов ввода-вывода (IRP). |
Результаты завершения запроса IOCTL
Когда запрос IOCTL IOCTL_VPCI_WRITE_BLOCK завершен, состояние член выделенной IO_STATUS_BLOCK вызывающего объекта имеет одно из значений в следующей таблице.Значение состояния | Описание |
---|---|
STATUS_SUCCESS | IOCTL успешно завершен. |
STATUS_PENDING |
IOCTL не завершен. Драйвер должен вызвать подпрограмму KeWaitForSingleObject, чтобы поместить текущий поток в состояние ожидания. Драйвер задает параметру объекта адрес объекта события, который был инициализирован в вызове подпрограммы KeInitializeEvent.
Событие сигнализирует о завершении запроса IOCTL. После сигнала события поток возобновляет выполнение. |
STATUS_BUFFER_TOO_SMALL | Элемент Parameters.DeviceIoControl.InputBufferLength был задан как значение меньше размера в байтах структуры VPCI_WRITE_BLOCK_INPUT. |
Если запрос выполнен успешно, сведения член структуры IO_STATUS_BLOCK задано для количества записанных байтов. В противном случае элемент сведений равен нулю.
При выпуске IOCTL_VPCI_WRITE_BLOCK IOCTL драйвер физической функции PCIe (PF) уведомляется записать данные в указанный блок конфигурации VF.
Как только блок конфигурации VF выделен, данные конфигурации VF можно обмениваться защищенным способом между следующими драйверами:
- Драйвер VF, который выполняется в гостевой операционной системе. Эта операционная система выполняется в дочерней секции Hyper-V.
-
Драйвер PF, который выполняется в операционной системе управления.
Эта операционная система выполняется в родительском разделе Hyper-V.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Доступно в Windows Server 2012 и более поздних версиях Windows. |
заголовка | vpci.h (include Wdm.h) |
IRQL | DISPATCH_LEVEL |
См. также
IRP_MJ_INTERNAL_DEVICE_CONTROL
создание запросов IOCTL в драйверах