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


Метод 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 (включая Wudfddi.h)
DLL WUDFx.dll

См. также раздел

IWDFDevice2

IWDFDevice2::ResumeIdle