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


Метод IWDFDevice2::StopIdle (wudfddi.h)

[ предупреждение: UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. Новые функции не добавляются в UMDF 1, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2. Дополнительные сведения см. в разделе Начало работы с UMDF.]

Метод StopIdle сообщает платформе, что устройство должно быть помещено в рабочее состояние питания (D0).

Синтаксис

HRESULT StopIdle(
  [in] BOOL WaitForD0
);

Параметры

[in] WaitForD0

Логическое значение, указывающее, когда StopIdle возвращается. Если TRUE, он возвращается только после того, как указанное устройство входит в состояние питания устройства D0. Если FALSE, метод возвращается немедленно.

Возвращаемое значение

StopIdle возвращает S_OK, если операция выполнена успешно. В противном случае метод может вернуть одно из следующих значений:

Возвращаемый код Описание
HRESULT_FROM_NT(STATUS_INVALID_DEVICE_REQUEST)
Вызывающий драйвер не является владельцем политики питания устройства.
HRESULT_FROM_NT(STATUS_PENDING)
Устройство уже возвращалось в рабочее состояние.
HRESULT_FROM_NT(STATUS_POWER_STATE_INVALID)
Произошел сбой устройства, и устройство не может ввести состояние питания D0.
 

Этот метод может возвращать одно из других значений, содержащихся в Winerror.h.

Замечания

Если устройство может ввести состояние низкой мощности при его простое, драйвер может иногда вызывать StopIdle, чтобы вернуть устройство к рабочему состоянию (D0) или запретить ему вводить низкое питание.

Драйверу не нужно вызывать StopIdle, если устройство неактивно, а платформа помещает запрос ввода-вывода в очередь ввода-вывода устройства, управляемого питанием. Кроме того, драйверу не нужно вызывать StopIdle, когда устройство неактивно и обнаруживает сигнал пробуждения. В обоих случаях платформа запрашивает драйвер шины восстановить состояние питания устройства до D0.

Хотя драйверам обычно не нужно вызывать StopIdle при обработке запросов ввода-вывода, получаемых из очереди ввода-вывода, управляемой питанием, разрешен вызов. Однако драйверы не должны задавать параметру WaitForD0 значение TRUE при обработке запросов ввода-вывода из очереди ввода-вывода, управляемого питанием.

Драйвер должен вызывать StopIdle, если он должен получить доступ к устройству из-за запроса, полученного драйвером за пределами очереди ввода-вывода, управляемого питанием. Например, драйвер может поддерживать определяемый драйвером интерфейс или запрос WMI, требующий доступа к устройству. В этом случае необходимо убедиться, что устройство находится в рабочем состоянии, прежде чем драйвер обращается к устройству, и что устройство остается в рабочем состоянии, пока драйвер не завершит доступ к устройству.

Вызов StopIdle заставляет устройство работать (D0), если система находится в состоянии работы (S0). Устройство остается в рабочем состоянии, пока драйвер не вызовет IWDFDevice2::ResumeIdle, в котором платформа может поместить устройство в состояние низкой мощности, если оно остается бездействующей.

Не вызывайте StopIdle, прежде чем платформа впервые вызвала метод обратного вызова IPnpCallback::OnD0Entry обратного вызова.

Вызов StopIdle может восстановить неактивное устройство в рабочее состояние, только если система находится в состоянии работы (S0). Если система вводит состояние низкой мощности, когда драйвер вызывает StopIdle с параметром WaitForD0 значение TRUE, функция не возвращается до тех пор, пока система не возвращается в его состояние S0.

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

Дополнительные сведения о StopIdle и ResumeIdleсм. в поддержке Power-Down драйверовна основе UMDF.

Примеры

Следующий пример кода получает интерфейс IWDFDevice2, а затем вызывает StopIdle. StopIdle возвращается после ввода устройства в состояние питания устройства D0.

    IWDFDevice2 *pIWDFDevice2 = NULL;
    HRESULT hr;

    //
    // Get a pointer to the IWDFDevice2 interface.
    //
    hr = pIWDFDevice->QueryInterface(__uuidof(IWDFDevice2),
                                     (void**) &pIWDFDevice2);
    if (SUCCEEDED(hr)) 
    {
        hr = pIWDFDevice2->StopIdle(TRUE);
    }
...
   SAFE_RELEASE(pIWDFDevice2);

Требования

Требование Ценность
завершение поддержки Недоступно в UMDF 2.0 и более поздних версиях.
целевая платформа Настольный
минимальная версия UMDF 1.9
заголовка wudfddi.h (include Wudfddi.h)
DLL WUDFx.dll

См. также

IWDFDevice2

IWDFDevice2::ResumeIdle