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