Compartilhar via


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
HRESULT_FROM_NT(STATUS_INVALID_DEVICE_REQUEST)
O driver de chamada não é o proprietário da política de energia do dispositivo.
HRESULT_FROM_NT(STATUS_PENDING)
O dispositivo já estava retornando ao seu estado de trabalho.
HRESULT_FROM_NT(STATUS_POWER_STATE_INVALID)
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

Confira também

IWDFDevice2

IWDFDevice2::ResumeIdle