EVT_WDF_IO_IN_CALLER_CONTEXT função de retorno de chamada (wdfdevice.h)
[Aplica-se somente ao KMDF]
A função de retorno de chamada de evento EvtIoInCallerContext de um driver pré-processa uma solicitação de E/S antes que a estrutura a coloque em uma fila de E/S.
Sintaxe
EVT_WDF_IO_IN_CALLER_CONTEXT EvtWdfIoInCallerContext;
void EvtWdfIoInCallerContext(
[in] WDFDEVICE Device,
[in] WDFREQUEST Request
)
{...}
Parâmetros
[in] Device
Um identificador para um objeto de dispositivo de estrutura.
[in] Request
Um identificador para um objeto de solicitação de estrutura.
Retornar valor
Nenhum
Comentários
A estrutura chama a função de retorno de chamada EvtIoInCallerContext de um driver para que o driver possa examinar cada solicitação de E/S e, possivelmente, executar o processamento preliminar na solicitação, antes que a estrutura a coloque em uma fila de E/S. Para registrar uma função de retorno de chamada EvtIoInCallerContext para um dispositivo, o driver chama WdfDeviceInitSetIoInCallerContextCallback.
Se um driver registrar uma função de retorno de chamada EvtIoInCallerContext para um dispositivo, a estrutura chamará a função de retorno de chamada sempre que receber uma solicitação de E/S para o dispositivo. A função de retorno de chamada é chamada no contexto de thread do processo que enviou a solicitação de E/S para o driver. Esse processo é o driver de nível mais alto ou, se o driver estiver na parte superior da pilha do driver, um aplicativo de modo de usuário.
A principal finalidade dessa função de retorno de chamada é habilitar drivers baseados em estrutura para dar suporte ao método de acesso a buffer que não é chamado de E/S direta nem buffer. Para esse método de acesso a buffers, o driver deve acessar buffers recebidos no contexto de processo do originador.
Depois que a função de retorno de chamada tiver obtido os buffers de uma solicitação, ela poderá armazenar endereços de buffer ou identificadores no armazenamento de contexto do objeto de solicitação. (O driver define o tamanho da área de armazenamento de contexto do objeto de solicitação chamando WdfDeviceInitSetRequestAttributes.)
Como a solicitação ainda não pertence a uma fila de E/S, a estrutura não bloqueia nem sincroniza a solicitação. O driver é responsável por qualquer sincronização que possa ser necessária. Para obter mais informações sobre sincronização, consulte Técnicas de sincronização para drivers de Framework-Based.
Depois que a função de retorno de chamada tiver terminado de pré-processar a solicitação, ela deverá enfileira-la chamando WdfDeviceEnqueueRequest ou conclua-a chamando WdfRequestComplete (se um erro for detectado).
Para obter mais informações sobre a função de retorno de chamada EvtIoInCallerContext , consulte Interceptando uma solicitação de E/S antes de ser enfileirada e acessando buffers de dados em drivers de Framework-Based.
Se um driver tiver configurado uma fila de E/S para dar suporte ao progresso de encaminhamento garantido, a estrutura poderá não chamar a função de retorno de chamada EvtIoInCallerContext do driver durante situações de baixa memória. Se todos os objetos de solicitação reservada da estrutura estiverem em uso, a estrutura adiará o processamento da solicitação de E/S até que um objeto de solicitação reservada esteja disponível. Nessa situação, a estrutura não pode chamar a função de retorno de chamada EvtIoInCallerContext para a solicitação de E/S adiada porque, quando um objeto de solicitação reservada ficar disponível, a estrutura não será mais executada no contexto de thread do processo que enviou a solicitação de E/S ao driver.
A função de retorno de chamada EvtIoInCallerContext é chamada no IRQL do thread de chamada. Se o thread de chamada for de um aplicativo de modo de usuário, a função de retorno de chamada será chamada em IRQL = PASSIVE_LEVEL. Se o thread de chamada for de um driver de modo kernel de nível superior, a função de retorno de chamada EvtIoInCallerContext do driver poderá ser chamada em IRQL <= DISPATCH_LEVEL se a função de retorno de chamada e o driver de nível superior forem projetados para passar a solicitação em IRQL <= DISPATCH_LEVEL.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Universal |
Versão mínima do KMDF | 1.0 |
Cabeçalho | wdfdevice.h (inclua Wdf.h) |
IRQL | Consulte a seção Observações. |