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