Поделиться через


OID_PNP_SET_POWER

OID_PNP_SET_POWER OID уведомляет мини-драйвер о том, что его базовый сетевой адаптер перейдет в состояние питания устройства, указанное в InformationBuffer. Состояние питания устройства указывается как одно из следующих NDIS_DEVICE_POWER_STATE значений:

  • NdisDeviceStateD0
  • NdisDeviceStateDeD1
  • NdisDeviceStateDeD2
  • NdisDeviceStateDeD3

Запрос OID_PNP_SET_POWER может предшествовать запросу OID_PNP_QUERY_POWER.

Начиная с NDIS 6.30, NDIS не приостанавливает и перезапускает драйверы NDIS в стеке драйверов во время перехода состояния питания, если выполняются следующие условия:

  • Базовый драйвер минипорта задает флаг NDIS_MINIPORT_ATTRIBUTES_NO_PAUSE_ON_SUSPEND в структуре NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES. Драйвер передает указатель на эту структуру в вызове функции NdisMSetMiniportAttributes.

  • Все драйверы фильтров, подключенные к мини-драйверу, поддерживают NDIS 6.30 или более поздних версий NDIS.

  • Все драйверы протокола, привязанные к минипорту драйвера, поддерживают NDIS 6.30 или более поздних версий NDIS.

Переход в состояние Low-Power (D1-D3)

Когда драйвер минипорта обрабатывает запрос набора OID_PNP_SET_POWER для перехода в состояние низкой мощности, он должен выполнить следующие действия:

  • Полностью подготовьте сетевой адаптер для указанного состояния питания сетевого устройства. Задача, выполняемая мини-драйвером для выполнения этой задачи, зависит от устройства.

  • Дождитесь возврата вызовов функции NdisMIndicateReceiveNetBufferLists.

  • Дождитесь завершения запросов отправки, обработанных сетевым адаптером. После завершения минипорт-драйвер должен вызвать функцию NdisMSendNetBufferListsComplete. Драйвер должен задать элемент состояния в каждой структуре NET_BUFFER_LIST соответствующим значением NDIS_STATUS_XXX.

  • Выполните все ожидающие отправки запросы, вызвав функцию NdisMSendNetBufferListsComplete. Драйвер должен задать элемент состояния в каждой структуре NET_BUFFER_LIST значение NDIS_STATUS_LOW_POWER_STATE.

  • Отклоните все новые запросы на отправку, сделанные в его функция MiniportSendNetBufferLists немедленно путем вызова функцииNdisMSendNetBufferListsComplete. Драйвер должен задать элемент состояния в каждой структуре NET_BUFFER_LIST значение NDIS_STATUS_LOW_POWER_STATE.

Минипорт-драйвер, поддерживающий NDIS 6.30 и более поздние версии NDIS, также должен выполнять следующие действия:

  • Не дождитесь завершения ожидающих показаний получения через вызовы функции MiniportReturnNetBufferLists. Кроме того, минипорт-драйвер не должен изменять структуру или данные NET_BUFFER_LIST для любых пакетов, ожидающих завершения.

  • Обработайте запрос OID_PNP_SET_POWER на состояние низкой мощности из состояний приостановленного или запущенного адаптера. Дополнительные сведения об этих состояниях см. в состояниях и операциях минипорта.

Перед переходом сетевого адаптера в состояние D3 драйвер минипорта должен отключить все, что находится под контролем драйвера минипорта, выполнив следующие задачи:

  • Отключите прерывания и подсистему DMA в сетевом адаптере.

  • Остановите подсистему приема на сетевом адаптере.

  • Не отменяйте или не изменяйте дескрипторы приема и буферы пакетов, связанные с ожидающими указаниями получения.

  • Отмена всех таймеров NDIS.

Примечание Минипорт драйвер не может получить доступ к сетевому адаптеру после перехода сетевого адаптера в состояние D3.

Переход в состояние Full-Power (D0)

Когда драйвер минипорта обрабатывает набор запросов OID_PNP_SET_POWER для перехода в состояние полной мощности, он должен восстановить подсистему получения сетевого адаптера в том же состоянии, что и модуль получения, прежде чем адаптер был переведен в состояние низкой мощности.

Примечание. Драйвер минипорта не должен обращаться к буферам получения или изменять буферы получения, связанные с ожидающими указаниями получения.

NDIS вызывает функцию miniport driver MiniportRestart после перехода в состояние полной мощности, только если NDIS назвал функцию MiniportPause драйвера перед переходом на состояние низкой мощности.

Примечание Промежуточный драйвер всегда должен возвращать NDIS_STATUS_SUCCESS запросу OID_PNP_SET_POWER. Промежуточный драйвер никогда не должен распространять запрос OID_PNP_SET_POWER на базовый минипорт-драйвер.

Коды состояния возврата

Функция miniport driver MiniportOidRequest возвращает одно из следующих значений для этого запроса:

Срок Описание

NDIS_STATUS_SUCCESS

Минипорт-драйвер успешно завершил запрос.

NDIS_STATUS_PENDING

Минипорт-драйвер завершит запрос асинхронно. После завершения обработки мини-порта драйвер должен завершить запрос, вызвав функцию NdisMOidRequestComplete, передав NDIS_STATUS_SUCCESS для параметра Status.

NDIS_STATUS_NOT_ACCEPTED

Драйвер минипорта сбрасывается.

Требования

Версия

Поддерживается для NDIS 5.1 и NDIS 6.0 и более поздних версий.

Заголовок

Ntddndis.h (include Ndis.h)

См. также


MiniportInitializeEx

MiniportPause

MiniportRestart

MiniportReturnNetBufferLists

MiniportSendNetBufferLists

NDIS_DEVICE_POWER_STATE

NdisMIndicateReceiveNetBufferLists

NdisMSendNetBufferListsComplete

NET_BUFFER_LIST