Compartilhar via


Método IWDFIoRequest2::StopAcknowledge (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 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 TRUE, faz com que a estrutura requeira a solicitação na fila para que a estrutura a entregue novamente ao driver. Se FALSE, a estrutura não redireciona a solicitação. Para obter mais informações, consulte a seção Comentários a seguir.

Retornar valor

Nenhum

Comentários

Se um driver registrar uma função de retorno de chamada IQueueCallbackIoStop::OnIoStop 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 for o proprietário da solicitação, ele poderá 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 da 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 permite que o dispositivo deixe seu estado de trabalho (D0). Potencialmente, essa inação pode impedir que um sistema insira seu estado de hibernação ou outro estado de baixa energia do sistema.

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

  • Definir Requeue como TRUE faz com que a estrutura coloque a solicitação de volta em sua fila de E/S.

    Quando o dispositivo subjacente retornar ao estado de trabalho (D0), a estrutura fará a nova entrega da solicitação ao driver.

  • Definir Requeue como 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á a função de retorno de chamada IQueueCallbackIoResume::OnIoResume do driver, para que o driver possa continuar processando a solicitação.

Se o driver tiver chamado anteriormente 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 do driver deve interromper todo o processamento da solicitação de E/S que requer 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.
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

IQueueCallbackIoResume::OnIoResume

IQueueCallbackIoStop::OnIoStop

IWDFIoRequest2