Добавление и удаление разгрузки протокола с низким энергопотреблением
Чтобы добавить разгрузку протокола с низким энергопотреблением, драйверы протокола NDIS выдают запрос на набор OID OID_PM_ADD_PROTOCOL_OFFLOAD. Элемент InformationBuffer структуры NDIS_OID_REQUEST содержит указатель на структуру NDIS_PM_PROTOCOL_OFFLOAD .
Примечание Если входящий пакет соответствует как протоколу разгрузки, так и шаблону (например, из-за ошибки конфигурации), сетевой адаптер должен реагировать на пакет и вывести компьютер из спящего режима.
Структура NDIS_PM_PROTOCOL_OFFLOAD содержит следующие сведения:
Член | Описание | ||||||||
---|---|---|---|---|---|---|---|---|---|
Приоритет |
Содержит приоритет разгрузки протокола. Если слишком высокий драйвер добавляет разгрузку протокола с более высоким приоритетом при отсутствии доступных ресурсов для дополнительной разгрузки протокола, NDIS может удалить разгрузку протокола с более низким приоритетом, чтобы освободить ресурсы. Драйверы минипорта должны игнорировать этот элемент. Драйверы протокола могут предоставлять любое значение в пределах предопределенного диапазона от NDIS_PM_PROTOCOL_OFFLOAD_PRIORITY_LOWEST до NDIS_PM_PROTOCOL_OFFLOAD_PRIORITY_HIGHEST. |
||||||||
ProtocolOffloadType |
Содержит значение NDIS_PM_PROTOCOL_OFFLOAD_TYPE , указывающее тип разгрузки протокола. |
||||||||
FriendlyName |
Содержит структуру NDIS_PM_COUNTED_STRING , которая содержит доступное для пользователя описание разгрузки протокола с низким энергопотреблением. |
||||||||
ProtocolOffloadId |
Содержит предоставленное NDIS-значение, идентифицирующее протокол разгрузки. Прежде чем NDIS отправит запрос OID OID_PM_ADD_PROTOCOL_OFFLOAD к базовым драйверам NDIS или завершит запрос к вышележатму драйверу, NDIS устанавливает для параметра ProtocolOffloadId значение, уникальное среди разгрузки протокола на сетевом адаптере. |
||||||||
NextProtocolOffloadOffset |
Содержит смещение , начало запроса OID InformationBuffer, до следующей структуры NDIS_PM_PROTOCOL_OFFLOAD в списке для OID_PM_PROTOCOL_OFFLOAD_LIST OID. Дополнительные сведения о OID_PM_PROTOCOL_OFFLOAD_LIST см. в разделе Получение параметров текущих параметров разгрузки протокола низкого энергопотребления. |
||||||||
ProtocolOffloadParameters |
Содержит одну из структур IPv4ARPParameters, IPv6NSParameters или Dot11RSNRekeyParameters в объединении.
|
NDIS назначает идентификатор, уникальный для сетевого адаптера, каждому протоколу разгрузки. Идентификатор разгрузки протокола — это уникальное значение для каждого из протоколов, которые разгружаются на сетевом адаптере. Однако идентификатор разгрузки протокола не является глобально уникальным для всех сетевых адаптеров. NDIS передает этот идентификатор базовому драйверу минипорта, когда NDIS отправляет OID_PM_ADD_PROTOCOL_OFFLOAD запрос OID драйверу минипорта. Если разгрузка протокола выполнена успешно, NDIS возвращает идентификатор драйверу, который разгрузил протокол. Драйвер overlying использует идентификатор для удаления ранее разгруженного протокола. Идентификатор разгрузки протокола также используется в обозначениях состояния драйверов верхнего уровня при удалении протокола разгрузки из сетевого адаптера.
Драйверы протоколов должны удалить все разгруженные протоколы из сетевого адаптера перед закрытием привязки к сетевому адаптеру. Чтобы удалить разгрузку протокола с низким энергопотреблением, драйвер протокола отправляет запрос на набор OID OID_PM_REMOVE_PROTOCOL_OFFLOAD. Элемент InformationBuffer структуры NDIS_OID_REQUEST содержит указатель на идентификатор разгрузки протокола.
NDIS позволяет нескольким драйверам протокола NDIS добавлять разгрузки протокола в один сетевой адаптер. Чтобы обеспечить разгрузку правильного набора протоколов на сетевой адаптер, если количество запрошенных протоколов разгрузки превышает то, что может поддерживать сетевой адаптер, драйверы протоколов назначают приоритет каждому разгруженным протоколам. Если NDIS не может разгрузить новый протокол с высоким приоритетом из-за отсутствия ресурсов сетевого адаптера, NDIS удаляет один из протоколов разгрузки с низким приоритетом (если таковой имеется) и пытается снова разгрузить протокол с высоким приоритетом.
Примечание Драйвер мини-порта должен не выполнить запрос на добавление разгрузки протокола с низким энергопотреблением и вернуть код состояния STATUS_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL, чтобы позволить NDIS повторно определить приоритеты разгрузки протокола.
Если в результате разгрузки протокола с высоким приоритетом удаляется один из протоколов разгрузки с низким приоритетом, NDIS отправляет NDIS_STATUS_PM_OFFLOAD_REJECTED состояние, чтобы уведомить вышестоящее драйвер, задающее удаленную разгрузку протокола. Элемент StatusBuffer структуры NDIS_STATUS_INDICATION содержит идентификатор разгрузки протокола для отклоненной разгрузки протокола. NDIS предоставил идентификатор разгрузки протокола в члене ProtocolOffloadIdструктуры NDIS_PM_PROTOCOL_OFFLOAD .