共用方式為


SRIOV_GET_RESOURCE_FOR_BAR回呼函式 (pcivirt.h)

取得特定基位址緩存器 (BAR) 的翻譯資源

語法

SRIOV_GET_RESOURCE_FOR_BAR SriovGetResourceForBar;

NTSTATUS SriovGetResourceForBar(
  [in]  PVOID Context,
  [in]  USHORT VfIndex,
  [in]  USHORT BarIndex,
  [out] PCM_PARTIAL_RESOURCE_DESCRIPTOR Resource
)
{...}

參數

[in] Context

驅動程式定義內容的指標。

[in] VfIndex

正在查詢之 VF 之以零起始的索引。

[in] BarIndex

BAR (介於 0 到 5) 之間的索引。

[out] Resource

CM_PARTIAL_RESOURCE_DESCRIPTOR 結構的指標 ,該結構會填入所指定 BAR 的已轉譯硬體資源。

傳回值

如果作業成功,則傳回STATUS_SUCCESS。 否則,傳回適當的 NTSTATUS 錯誤碼。

備註

此回呼函式是由實體函式實作, (PF) 驅動程式。 當系統想要存取虛擬函式特定 BAR 的已翻譯硬體資源時,就會叫用它。

PF 驅動程式會藉由設定SRIOV_DEVICE_INTERFACE_STANDARD的 GetResourceForBar 成員、設定 WDF_QUERY_INTERFACE_CONFIG 結構,以及呼叫 WdfDeviceAddQueryInterface 來註冊其實作。

以下是這個回呼函式的範例實作。


NTSTATUS
Virtualization_GetResourceForBar(
    __inout     PVOID             Context,
    __in        USHORT            VfIndex,
    __in        USHORT            BarIndex,
    __out       PCM_PARTIAL_RESOURCE_DESCRIPTOR Resource
    )

{
    PDEVICE_CONTEXT  deviceContext;

    PAGED_CODE();

    deviceContext = (PDEVICE_CONTEXT)Context;

    TraceEvents(TRACE_LEVEL_VERBOSE, DBG_INTERFACE,
        "Virtualization_GetResourceForBar received with"
        "VFIndex = %d, BarIndex = %d\n",
        VfIndex, BarIndex);

    NT_ASSERT(BarIndex < PCI_TYPE0_BAR_COUNT);

    if(VfIndex >= deviceContext->NumVFs)
    {
        NT_ASSERT(FALSE);
        return STATUS_INVALID_DEVICE_REQUEST;
    }

    //
    // Copy the descriptor for all VFs at the given Bar index
    // to the output descriptor.
    //

    *Resource = deviceContext->AssignedVfBarResources[BarIndex];

    if(Resource->Type == CmResourceTypeMemory ||
       Resource->Type == CmResourceTypeMemoryLarge)
    {
        NT_ASSERT((Resource->u.Memory.Length % deviceContext->NumVFs) == 0);
        Resource->u.Memory.Length /= deviceContext->NumVFs;
        Resource->u.Memory.Start.QuadPart += (Resource->u.Memory.Length * VfIndex);
    }

    return STATUS_SUCCESS;
}


規格需求

需求
最低支援的用戶端 Windows 10
最低支援的伺服器 Windows Server 2016
目標平台 Windows
標頭 pcivirt.h
IRQL PASSIVE_LEVEL