Метод 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, если операция выполнена успешно. В противном случае метод может вернуть одно из следующих значений:
Код возврата | Описание |
---|---|
|
Вызывающий драйвер не является владельцем политики питания устройства. |
|
Устройство уже возвращалось в рабочее состояние. |
|
Произошел сбой устройства, и устройство не может войти в состояние питания 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 |