Compartilhar via


Método IWDFIoRequest2::StopAcknowledge (wudfddi.h)

[Aviso: UMDF 2 é a versão mais recente do UMDF e substitui o UMDF 1. Todos os novos drivers UMDF devem ser gravados usando UMDF 2. Nenhum recurso novo 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 aoda UMDF .]

O método StopAcknowledge informa à estrutura que o driver parou de processar uma solicitação de E/S especificada.

Sintaxe

void StopAcknowledge(
  [in] BOOL Requeue
);

Parâmetros

[in] Requeue

Um valor booliano que, se verdadeiro, faz com que a estrutura requeue a solicitação na fila para que a estrutura a entregue ao driver novamente. Se FALSE, a estrutura não redireciona a solicitação. Para obter mais informações, consulte a seção Comentários a seguir.

Valor de retorno

Nenhum

Observações

Se um driver registrar um IQueueCallbackIoStop::OnIoStop função de retorno de chamada para uma fila de E/S, a estrutura a chamará quando o dispositivo subjacente da fila estiver deixando seu estado de trabalho (D0). A estrutura chama essa função de retorno de chamada para cada solicitação de E/S que o driver possui no momento em que a fila está sendo interrompida. O driver deve concluir, cancelar ou adiar o processamento de cada solicitação fazendo um dos seguintes procedimentos:

  • Se o driver possui a solicitação, ele pode chamar IWDFIoRequest::Complete para concluir ou cancelar a solicitação.
  • Se o driver encaminhou a solicitação para um destino de E/S, ele pode chamar IWDFIoRequest::CancelSentRequest para tentar cancelar a solicitação.
  • Se o driver adiar o processamento da solicitação, ele deverá chamar StopAcknowledge.
Se o driver chamar StopAcknowledge, ele deverá chamar esse método de dentro de sua função de retorno de chamada IQueueCallbackIoStop::OnIoStop.

Se o driver não chamar IWDFIoRequest::Complete ou StopAcknowledge para cada solicitação que uma função de retorno de chamada IQueueCallbackIoStop::OnIoStop recebe, a estrutura não permitirá que o dispositivo deixe seu estado de trabalho (D0). Potencialmente, essa inação pode impedir que um sistema entre em seu estado de hibernação ou em outro estado de baixa energia do sistema.

Quando a função de retorno de chamada de um driver IQueueCallbackIoStop::OnIoStop chama StopAcknowledge, ele pode definir o parâmetro Requeue para TRUE ou FALSE:

  • Definir de Redirecionamento para VERDADEIRO faz com que a estrutura coloque a solicitação de volta em sua fila de E/S.

    Quando o dispositivo subjacente retornar ao seu estado de trabalho (D0), a estrutura reviverá a solicitação para o driver.

  • A configuração Requeue para FALSE faz com que a propriedade da solicitação permaneça com o driver. O driver deve parar de fazer qualquer processamento de E/S que exija acesso de hardware.

    Quando o dispositivo subjacente retornar ao estado de trabalho (D0), a estrutura chamará o do driver IQueueCallbackIoResume::OnIoResume função de retorno de chamada, para que o driver possa continuar processando a solicitação.

Se o driver já tivesse chamado IWDFIoRequest::MarkCancelable, ele deverá chamar IWDFIoRequest::UnmarkCancelable antes de chamar StopAcknowledge com Requeue definido como TRUE.

Antes de chamar StopAcknowledge, a função de retorno de chamada IQueueCallbackIoStop::OnIoStop deve interromper todo o processamento da solicitação de E/S que requer o acesso ao dispositivo subjacente, pois o dispositivo está prestes a entrar em um estado de baixa potência.

Exemplos

O exemplo de código a seguir é uma função de retorno de chamada IQueueCallbackIoStop::OnIoStop que verifica se uma solicitação recebida é cancelável e, se for, chama IWDFIoRequest::UnmarkCancelable. Se IWDFIoRequest::UnmarkCancelable retornar HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED), o exemplo retornará apenas porque a função de retorno de chamada IRequestCallbackCancel::OnCancel do driver manipulará a solicitação. Caso contrário, o exemplo chama StopAcknowledge e especifica FALSE para que a estrutura eventualmente chame a função de retorno de chamada IQueueCallbackIoResume::OnIoResume do driver.

void
CMyReadWriteQueue::OnIoStop(
    __in IWDFIoQueue*  pWdfQueue,
    __in IWDFIoRequest*  pWdfRequest,
    __in ULONG  ActionFlags
    )
{ HRESULT status;

    if (ActionFlags & WdfRequestStopRequestCancelable) {
        status = pWdfRequest->UnmarkCancelable();
        if (status == HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED)) {
        return;
        }
    }
    //
    // Declare an IWDFIoRequest2 interface pointer and obtain the
    // IWDFIoRequest2 interface from the IWDFIoRequest interface.
    //
    CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;

    r2->StopAcknowledge(FALSE);
}

Requisitos

Requisito Valor
fim do suporte Indisponível no UMDF 2.0 e posterior.
da Plataforma de Destino Área de trabalho
versão mínima do UMDF 1.9
cabeçalho wudfddi.h (inclua Wudfddi.h)
de DLL WUDFx.dll

Consulte também

IQueueCallbackIoResume::OnIoResume

IQueueCallbackIoStop::OnIoStop

IWDFIoRequest2