Método IWDFIoRequest::MarkCancelable (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. Drivers universais do Windows devem usar UMDF 2. Para obter mais informações, consulte Introdução com UMDF.]
O método MarkCancelable permite o cancelamento da solicitação de E/S.
Sintaxe
void MarkCancelable(
[in] IRequestCallbackCancel *pCancelCallback
);
Parâmetros
[in] pCancelCallback
Um ponteiro para a interface IRequestCallbackCancel cujo método a estrutura chama após o cancelamento da solicitação de E/S.
Retornar valor
Nenhum
Comentários
Depois que um driver recebe uma solicitação de E/S como entrada para uma função de retorno de chamada de evento IQueueCallbackRead::OnRead, IQueueCallbackWrite::OnWrite ou IQueueCallbackDeviceIoControl::OnDeviceIoControl , o driver pode chamar o método MarkCancelable para habilitar o cancelamento da solicitação. Posteriormente, o driver pode chamar o método IWDFIoRequest::UnmarkCancelable para desabilitar o cancelamento da solicitação.
Antes que um driver chame MarkCancelable, o driver deve implementar o método IRequestCallbackCancel::OnCancel .
A UMDF (Estrutura de Driver do Modo de Usuário) permite apenas um método IRequestCallbackCancel::OnCancel por fila. Portanto, quando um driver chama MarkCancelable para solicitações associadas a uma fila específica para permitir que a estrutura cancele essas solicitações, o driver deve passar um ponteiro para a interface IRequestCallbackCancel para o mesmo objeto de retorno de chamada de solicitação. Posteriormente, para cancelar cada solicitação, a estrutura passa um ponteiro para a interface IWDFIoRequest para a solicitação em uma chamada para o método IRequestCallbackCancel::OnCancel desse objeto de retorno de solicitação.
O driver deve chamar IWDFIoRequest::Complete, seja do método IRequestCallbackCancel::OnCancel ou de seu caminho de conclusão de E/S regular.
Depois que um driver chama MarkCancelable para habilitar o cancelamento, a solicitação permanece cancelável enquanto o driver tem a posse do objeto de solicitação, a menos que o motorista chame UnmarkCancelable para desabilitar o cancelamento.
Se o driver chamar o método IWDFIoRequest::ForwardToIoQueue para encaminhar a solicitação para uma fila diferente, as seguintes regras se aplicarão:
-
O cancelamento de solicitações de E/S não pode ser habilitado quando o driver encaminha as solicitações para uma fila diferente.
Normalmente, o driver não deve chamar MarkCancelable para habilitar o cancelamento de uma solicitação antes de chamar IWDFIoRequest::ForwardToIoQueue. Como alternativa, o driver pode tornar a solicitação cancelável. No entanto, o driver deve chamar UnmarkCancelable para desabilitar o cancelamento da solicitação antes de chamar IWDFIoRequest::ForwardToIoQueue.
- Embora a solicitação esteja em uma segunda fila, a estrutura a possui e pode cancelá-la sem notificar o driver.
- Depois que a estrutura remover a solicitação da segunda fila e entregar a solicitação ao driver, o driver poderá chamar MarkCancelable para habilitar o cancelamento.
Exemplos
O exemplo de código a seguir configura uma solicitação para que a estrutura possa cancelá-la.
//
// The QueryInteraface should not fail.
//
(VOID)this->QueryInterface(_uuidof(IRequestCallbackCancel),
(PVOID *)&cancelCallback);
pWdfRequest->MarkCancelable(cancelCallback);
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.5 |
Cabeçalho | wudfddi.h (include Wudfddi.h) |
DLL | WUDFx.dll |
Confira também
IQueueCallbackDeviceIoControl::OnDeviceIoControl
IRequestCallbackCancel::OnCancel