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

IQueueCallbackRead::OnRead

IQueueCallbackWrite::OnWrite

IRequestCallbackCancel

IRequestCallbackCancel::OnCancel

IWDFIoRequest

IWDFIoRequest::Complete

IWDFIoRequest::ForwardToIoQueue

IWDFIoRequest::UnmarkCancelable