функция обратного вызова 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.

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

Никакой

Замечания

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

Спецификация PCI Express SR-IOV требует, чтобы все виртуальные машины имели одинаковые идентификаторы поставщиков и устройств. Это требование к оборудованию, соответствующему требованиям. Однако вы можете подготовить виртуальные машины таким образом, чтобы их возможности отличались друг от друга, и часто полезно загружать разные драйверы на другом оборудовании. Поэтому Windows позволяет драйверу PF предоставлять отдельные идентификаторы устройств и поставщиков (с различными кодами классов через интерфейсы пространства конфигурации), чтобы каждая виртуальная машина отображалась с идентификаторами 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
целевая платформа Виндоус
заголовка pcivirt.h
IRQL PASSIVE_LEVEL