Enumerando portas virtuais em um adaptador de rede
Um driver ou aplicativo de usuário em excesso pode obter uma lista de todas as VPorts (portas virtuais) em um comutador NIC de um adaptador de rede que dá suporte à virtualização de E/S de raiz única (SR-IOV). O driver ou aplicativo emite uma solicitação de método OID (identificador de objeto) de OID_NIC_SWITCH_ENUM_VPORTS para obter essa lista.
Após um retorno bem-sucedido dessa solicitação de consulta OID, o membro InformationBuffer da estrutura NDIS_OID_REQUEST contém um ponteiro para um buffer que contém o seguinte:
Uma estrutura NDIS_NIC_SWITCH_VPORT_INFO_ARRAY que define o número de elementos dentro da matriz.
Uma matriz de estruturas de NDIS_NIC_SWITCH_VPORT_INFO . Cada uma dessas estruturas contém informações sobre um VPort no comutador NIC do adaptador de rede.
Nota Se nenhuma VPorts tiver sido criada no adaptador de rede, o driver definirá o membro NumElements da estrutura NDIS_NIC_SWITCH_VPORT_INFO_ARRAY como zero e nenhuma estrutura de NDIS_NIC_SWITCH_VPORT_INFO será retornada.
Antes que o driver ou aplicativo de usuário excessivamente emita a solicitação de OID_NIC_SWITCH_ENUM_VPORTS , ele deve inicializar uma estrutura NDIS_NIC_SWITCH_VPORT_INFO_ARRAY que é passada junto com a solicitação. O driver ou aplicativo deve seguir estas diretrizes ao inicializar a estrutura NDIS_NIC_SWITCH_VPORT_INFO_ARRAY :
Se o sinalizador NDIS_NIC_SWITCH_VPORT_INFO_ARRAY_ENUM_ON_SPECIFIC_SWITCH estiver definido no membro Flags , as informações serão retornadas para todos os VPorts criados em um comutador NIC especificado. A opção NIC é especificada pelo membro SwitchId dessa estrutura.
Nota A partir do Windows Server 2012, a interface SR-IOV dá suporte a apenas uma opção NIC no adaptador de rede. Essa opção é conhecida como a opção NIC padrão e é referenciada pelo identificador NDIS_DEFAULT_SWITCH_ID. Independentemente dos sinalizadores definidos no membro Flags , o membro SwitchId deve ser definido como NDIS_DEFAULT_SWITCH_ID.
Se o sinalizador NDIS_NIC_SWITCH_VPORT_INFO_ARRAY_ENUM_ON_SPECIFIC_FUNCTION estiver definido no membro Flags , as informações serão retornadas para todos os VPorts anexados a uma função física (PCIe) ou PF (Função Virtual) do PCI Express (PCIe) especificada no adaptador de rede. O PF ou VF é especificado pelo membro AttachedFunctionId dessa estrutura.
Se o membro AttachedFunctionId estiver definido como NDIS_PF_FUNCTION_ID, as informações serão retornadas para todos os VPorts. Isso inclui o VPort padrão anexado ao PF. Se o membro AttachedFunctionId estiver definido como um identificador VF válido, as informações serão retornadas para todos os VPorts anexados ao VF especificado.
Nota Começando com Windows Server 2012, apenas um VPort não padrão pode ser anexado a um VF. No entanto, várias VPorts (incluindo o VPort padrão) podem ser anexadas ao PF.
Se o membro Flags estiver definido como zero, as informações serão retornadas para todas as VPorts anexadas ao PF ou VF no adaptador de rede. Nesse caso, os valores de SwitchId e AttachedFunctionId são ignorados.
O NDIS manipula a solicitação de OID_NIC_SWITCH_ENUM_VPORTS para drivers de miniporte. O NDIS retorna as informações de um cache interno dos dados que ele mantém ao inspecionar as seguintes fontes:
Solicitações de método OID de OID_NIC_SWITCH_CREATE_VPORT.
OID define solicitações de OID_NIC_SWITCH_VPORT_PARAMETERS.