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 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.
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