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) |
См. также
NdisMIndicateReceiveNetBufferLists