Удаление виртуального порта
Переопределяющий драйвер выдает запрос набора идентификатора объекта (OID) OID_NIC_SWITCH_DELETE_VPORT для удаления недедефакционного виртуального порта (VPort) на коммутаторе сетевого адаптера. Слишком большой драйвер может удалить только VPort, созданный ранее путем выдачи запроса метода OID OID_NIC_SWITCH_CREATE_VPORT.
Элемент InformationBuffer структуры NDIS_OID_REQUEST содержит указатель на структуру NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS.
Слишком избыточный драйвер, например стек виртуализации, может удалить неотделимый VPort, созданный ранее. Слишком многозначный драйвер создает VPort, выдав запрос метода OID OID_NIC_SWITCH_CREATE_VPORT.
Прежде чем он выдает запрос набора OID OID_NIC_SWITCH_DELETE_VPORT, драйверу, переопределяющимся драйверу необходимо выполнить следующее:
Перед удалением VPort драйверы должны очистить или переместить все фильтры получения, которые драйвер ранее установил в VPort. Фильтры получения задаются через запросы OID OID_RECEIVE_FILTER_SET_FILTER и перемещаются через запросы OID OID_RECEIVE_FILTER_MOVE_FILTER.
Слишком многофакторный драйвер задает элемент VPortId структуры NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS идентификатору удаленного виртуального порта, который требуется удалить.
Обратите внимание, что драйвер с превышением не должен задать для члена VPortId значение NDIS_DEFAULT_PORT_NU МБ ER. Этот идентификатор VPort зарезервирован для VPort по умолчанию, подключенного к физической функции PCI Express (PCIe) на сетевом адаптере. VPort по умолчанию всегда существует и не удаляется явным образом, хотя запрос набора OID OID_NIC_SWITCH_DELETE_VPORT.
Слишком избыточный драйвер вызывает NdisOidRequest , чтобы выдать запрос OID_NIC_SWITCH_DELETE_VPORT базовому драйверу мини-порта PF. Когда драйвер минипорта получает запрос OID_NIC_SWITCH_DELETE_VPORT, драйвер должен выполнить следующее:
Драйвер должен освободить аппаратные и программные ресурсы, выделенные для указанного VPort.
Драйвер должен отсоединить указанный VPort от PF или виртуальной функции PCIe (VF).
Если VPort подключен к виртуальной машине, стек виртуализации гарантирует, что мини-порт VF, работающий в гостевой операционной системе, был приостановлен и остановлен. В результате все ранее указанные ранее пакеты получения из VPort должны были быть возвращены драйверу мини-порта VF.
Если VPort подключен к PF, драйвер мини-порта PF должен остановить любую дополнительную DMA к общей памяти, связанной с VPort. Драйвер мини-порта PF должен убедиться, что все ранее полученные пакеты из VPort возвращаются в мини-порт. Драйвер мини-порта PF не должен создавать дополнительные признаки получения для NDIS, которые указывают идентификатор VPort в NET_BUFFER_LIST структуре пакета. После возврата всех указанных пакетов из VPort в мини-порт PF он должен освободить общую память, связанную с VPort, вызвав NdisFreeSharedMemory.
К удалению VPorts применяются следующие моменты:
Перед вызовом NdisCloseAdapterEx драйвер протокола должен удалить все созданные недействующие VPorts.
Драйвер фильтра должен удалить все неподдерживаемые VPorts, созданные в функции FilterDetach.
Прежде чем NDIS выдает запрос набора OID_NIC_SWITCH_DELETE_SWITCH для удаления коммутатора сетевого адаптера на сетевом адаптере, он гарантирует, что все неdefault VPorts удаляются из этого коммутатора.
С помощью запросов OID OID_NIC_SWITCH_DELETE_SWITCH можно явным образом удалить только неотделимые виртуальные порты. Виртуальный порт по умолчанию неявно удаляется, когда драйвер мини-порта PF удаляет переключатель сетевого адаптера по умолчанию. Дополнительные сведения см. в разделе "Удаление коммутатора сетевого адаптера".