Método IWDFDevice2::StopIdle (wudfddi.h)
[Aviso: UMDF 2 é a versão mais recente do UMDF e substitui UMDF 1. Todos os novos drivers UMDF devem ser gravados usando UMDF 2. Nenhum novo recurso está sendo adicionado ao UMDF 1 e há suporte limitado para UMDF 1 em versões mais recentes do Windows 10. Os drivers universais do Windows devem usar o UMDF 2. Para obter mais informações, consulte Introdução com UMDF.]
O método StopIdle informa à estrutura que o dispositivo deve ser colocado em seu estado de energia de trabalho (D0).
Sintaxe
HRESULT StopIdle(
[in] BOOL WaitForD0
);
Parâmetros
[in] WaitForD0
Um valor booliano que indica quando StopIdle retornará. Se TRUE, ele retornará somente depois que o dispositivo especificado entrar no estado de energia do dispositivo D0. Se FALSE, o método retornará imediatamente.
Retornar valor
StopIdle retornará S_OK se a operação for bem-sucedida. Caso contrário, o método poderá retornar um dos seguintes valores:
Código de retorno | Descrição |
---|---|
|
O driver de chamada não é o proprietário da política de energia do dispositivo. |
|
O dispositivo já estava retornando ao seu estado de trabalho. |
|
Ocorreu uma falha no dispositivo e o dispositivo não pode inserir seu estado de energia D0. |
Esse método pode retornar um dos outros valores que Winerror.h contém.
Comentários
Se o dispositivo puder entrar em um estado de baixa potência quando ele ficar ocioso, o driver poderá precisar ocasionalmente chamar StopIdle para trazer o dispositivo de volta ao estado de trabalho (D0) ou impedir que ele entre em um estado de baixa potência.
Seu driver não precisa chamar StopIdle quando um dispositivo está ocioso e a estrutura coloca uma solicitação de E/S na fila de E/S gerenciada por energia do dispositivo. Além disso, o driver não precisa chamar StopIdle quando um dispositivo está ocioso e detecta um sinal de ativação. Em ambos os casos, a estrutura solicita que o motorista do barramento restaure o estado de energia do dispositivo para D0.
Embora os drivers normalmente não precisem chamar StopIdle ao lidar com solicitações de E/S obtidas de uma fila de E/S gerenciada por energia, a chamada é permitida. No entanto, os drivers não devem definir o parâmetro WaitForD0 como TRUE ao lidar com solicitações de E/S de uma fila de E/S gerenciada por energia.
Seu driver precisará chamar StopIdle se ele precisar acessar o dispositivo devido a uma solicitação que o driver recebeu fora de uma fila de E/S gerenciada por energia. Por exemplo, seu driver pode dar suporte a uma interface definida pelo driver ou a uma solicitação WMI que requer acesso ao dispositivo. Nesse caso, você deve garantir que o dispositivo esteja em seu estado de trabalho antes que o driver acesse o dispositivo e que o dispositivo permaneça em seu estado de trabalho até que o driver termine de acessar o dispositivo.
Chamar StopIdle força o dispositivo ao estado de trabalho (D0), se o sistema estiver em seu estado de trabalho (S0). O dispositivo permanece em seu estado de trabalho até que o driver chame IWDFDevice2::ResumeIdle, momento em que a estrutura poderá colocar o dispositivo em um estado de baixa potência se ele permanecer ocioso.
Não chame StopIdle antes que a estrutura tenha chamado o método de retorno de chamada IPnpCallback::OnD0Entry do driver pela primeira vez.
Uma chamada para StopIdle pode restaurar um dispositivo ocioso para seu estado de trabalho somente se o sistema estiver em seu estado de trabalho (S0). Se o sistema estiver inserindo um estado de baixa potência quando um driver chamar StopIdle com o parâmetro WaitForD0 definido como TRUE, a função não retornará até que o sistema retorne ao estado S0.
Cada chamada para StopIdle deve eventualmente ser seguida por uma chamada para ResumeIdle, ou então o dispositivo nunca retornará a um estado de baixa potência se ele ficar ocioso novamente. As chamadas para StopIdle podem ser aninhadas, portanto, o número de chamadas para ResumeIdle deve ser igual ao número de chamadas para StopIdle.
Para obter mais informações sobre StopIdle e ResumeIdle, consulte Suporte a Power-Down ociosos em drivers baseados em UMDF.
Exemplos
O exemplo de código a seguir obtém a interface IWDFDevice2 e chama StopIdle. StopIdle retornará depois que o dispositivo entrar no estado de energia do dispositivo 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);
Requisitos
Requisito | Valor |
---|---|
Fim do suporte | Indisponível no UMDF 2.0 e posterior. |
Plataforma de Destino | Área de Trabalho |
Versão mínima do UMDF | 1,9 |
Cabeçalho | wudfddi.h (inclua Wudfddi.h) |
DLL | WUDFx.dll |