Partilhar via


Controlando o estado de um destino de E/S geral

Você pode visualizar objetos de destino de E/S como tendo dois portões: um in-gate e um out-gate. O out-gate controla quando a estrutura fornece uma solicitação para o objeto de dispositivo de destino, enquanto o no portão controla quando uma solicitação tem permissão para inserir o destino de E/S.

A estrutura define os seguintes estados para destinos gerais de E/S:

Começou
Ambos os portões do objeto de destino de E/S estão abertos. O driver pode enviar solicitações de E/S para a fila de destino de E/S e a estrutura fornece as solicitações para o driver apropriado.

Parou
O portão do destino de E/S está aberto, mas o portão de saída está fechado. A estrutura para de fornecer solicitações ao driver apropriado. Para enviar solicitações de E/S para o destino de E/S, o driver deve definir WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE ou WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET na estrutura de WDF_REQUEST_SEND_OPTIONS de cada solicitação.

Purgado
Ambos os portões do objeto de destino de E/S são fechados. O driver não pode enviar solicitações de E/S para o destino de E/S, a menos que ele defina WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE ou WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET. Além disso, a estrutura cancela solicitações não processadas na fila interna do objeto de destino de E/S. Esse estado está disponível a partir do KMDF versão 1.11.

Fechado para Query-Remove
Um destino de E/S remoto é temporariamente fechado porque seu dispositivo pode ser removido em breve.

Fechado
O destino de E/S é fechado e não pode ser iniciado ou interrompido.

Excluído
O dispositivo do destino de E/S foi removido.

A enumeração WDF_IO_TARGET_STATE define os valores que representam esses estados. Seu driver pode chamar WdfIoTargetGetState para obter o estado de um destino de E/S.

Estados de destino de E/S locais

A estrutura é aberta automaticamente e inicia destinos de E/S locais.

Se necessário, o driver pode chamar WdfIoTargetStop para interromper temporariamente um destino de E/S local e chamar WdfIoTargetStart para reiniciá-lo. Por exemplo, o driver poderá interromper um destino de E/S local se detectar uma condição de erro temporária e reiniciar o destino de E/S se a condição de erro for corrigida.

No KMDF versão 1.11 e posterior, o driver pode chamar WdfIoTargetPurge para impedir temporariamente que solicitações de E/S sejam enviadas para um destino de E/S local e cancelar solicitações não processadas na fila do destino. Por exemplo, como parte da limpeza do identificador de arquivo, um driver pode limpar um destino de E/S local para garantir que todas as solicitações enviadas ao driver sejam canceladas.

Se o dispositivo de um destino de E/S local for removido, a estrutura interromperá e fechará automaticamente o destino de E/S e cancelará todas as solicitações de E/S que estão na fila do destino. A estrutura notifica o driver de que o dispositivo não está mais disponível chamando funções de retorno de chamada de evento de objeto do dispositivo. Para obter mais informações sobre essas funções de retorno de chamada, consulte Cenários de PnP e Gerenciamento de Energia.

Estados de destino de E/S remotos

Os drivers devem chamar WdfIoTargetOpen para abrir destinos remotos de E/S. Quando um driver abre um destino de E/S remoto, a estrutura inicia automaticamente o destino de E/S.

Se necessário, o driver pode chamar WdfIoTargetStop para interromper temporariamente um destino de E/S remoto e chamar WdfIoTargetStart para reiniciá-lo.

No KMDF versão 1.11 e posterior, o driver pode chamar WdfIoTargetPurge para impedir temporariamente que solicitações de E/S sejam enviadas para um destino de E/S remoto e cancelar solicitações não processadas na fila do destino.

Se o dispositivo de um destino de E/S remoto for removido, a estrutura interromperá e fechará automaticamente o destino de E/S e cancelará todas as solicitações de E/S que estão na fila do destino, a menos que o driver registre as seguintes funções de retorno de chamada de evento:

EvtIoTargetQueryRemove
Informa ao driver que o dispositivo de um destino de E/S remoto pode ser removido. Seu driver deve chamar WdfIoTargetCloseForQueryRemove se quiser que o driver permita a remoção do dispositivo.

EvtIoTargetRemoveComplete
Informa ao driver que o dispositivo de um destino de E/S remoto foi removido. Essa função de retorno de chamada deve chamar WdfIoTargetClose.

EvtIoTargetRemoveCanceled
Informa ao driver que uma tentativa de remover o dispositivo de um destino de E/S remoto foi cancelada. Essa função de retorno de chamada deve chamar WdfIoTargetOpen e o driver normalmente chama WDF_IO_TARGET_OPEN_PARAMS_INIT_REOPEN para inicializar sua função WDF_IO_TARGET_OPEN_PARAMS_INIT.

Se um driver tiver terminado de usar um destino de E/S remoto e não usar o destino novamente e o destino não tiver nenhum objeto de solicitação filho que ainda esteja pendente, o driver poderá chamar WdfObjectDelete sem chamar wdfIoTargetClose primeiro. Se o destino tiver objetos de solicitação filho que ainda estejam pendentes, o driver deverá chamar WdfIoTargetClose antes que ele possa chamar WdfObjectDelete com segurança.