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


функция обратного вызова SRIOV_GET_VENDOR_AND_DEVICE_IDS (pcivirt.h)

Предоставляет поставщик и идентификатор устройства для виртуальной функции PCI Express SR-IOV ( VF), которая будет использоваться для создания более универсального идентификатора Plug and Play для VF. Эти идентификаторы нельзя считывать непосредственно из пространства конфигурации VF.

Синтаксис

SRIOV_GET_VENDOR_AND_DEVICE_IDS SriovGetVendorAndDeviceIds;

void SriovGetVendorAndDeviceIds(
  [in]  PVOID Context,
  [in]  USHORT VfIndex,
  [out] PUSHORT VendorId,
  [out] PUSHORT DeviceId
)
{...}

Параметры

[in] Context

Указатель на контекст, определяемый драйвером.

[in] VfIndex

Отсчитываемый от нуля индекс VF, к которому применяется эта операция записи.

[out] VendorId

Указатель на переменную USHORT, заполненную идентификатором поставщика VF.

[out] DeviceId

Указатель на переменную USHORT, заполненную идентификатором устройства VF.

Возвращаемое значение

None

Remarks

Эта функция обратного вызова реализуется драйвером физической функции (PF). Он вызывается, когда системе требуется получить идентификаторы поставщика и устройства указанного VF.

Спецификация PCI Express SR-IOV требует, чтобы все виртуальные машины имели одинаковые идентификаторы поставщиков и устройств. Это требование соответствующего оборудования. Однако можно подготовить виртуальные машины таким образом, чтобы их возможности отличались друг от друга, и часто бывает полезно загрузить разные драйверы на разных оборудованиях. Таким образом, Windows позволяет драйверу PF предоставлять отдельные идентификаторы устройств и поставщиков (с разными кодами классов через интерфейсы пространства конфигурации), чтобы каждый VF мог отображаться с идентификаторами Plug and Play, которые наиболее подходят для его использования.

Драйвер PF регистрирует свою реализацию, задавая элемент GetVendorAndDeviceSRIOV_DEVICE_INTERFACE_STANDARD, настраивая структуру WDF_QUERY_INTERFACE_CONFIG и вызывая WdfDeviceAddQueryInterface.

Ниже приведен пример реализации этой функции обратного вызова.

Virtualization_GetVendorAndDevice (
    _In_    PVOID           Context,
    _In_    USHORT          VfIndex,
    _Out_   PUSHORT         VendorId,
    _Out_   PUSHORT         DeviceId
    )
{
    PDEVICE_CONTEXT deviceContext;

    UNREFERENCED_PARAMETER(VfIndex);
    PAGED_CODE();

    deviceContext = (PDEVICE_CONTEXT)Context;

    *VendorId = deviceContext->VendorId;
    *DeviceId = deviceContext->DeviceId;
}

Требования

Требование Значение
Минимальная версия клиента Windows 10
Минимальная версия сервера Windows Server 2016
Целевая платформа Windows
Header pcivirt.h
IRQL PASSIVE_LEVEL