Partilhar via


Modos de transferência

As interfaces de imagem estática definem dois modos de transferência - modo de status e modo de dados. Quando um cliente da interface IStillImage COM chama IStillImage::CreateDevice para obter acesso a um dispositivo de imagem estática, ele especifica um (ou ambos) dos modos de transferência. Vários clientes podem abrir um dispositivo no modo de status, mas apenas um cliente de cada vez tem permissão para abrir um dispositivo no modo de dados.

O monitor de eventos de imagem estática abre dispositivos no modo de status. Normalmente, mas nem sempre, as APIs de aquisição de imagens abrem dispositivos no modo de dados.

Depois que um cliente abre um dispositivo no modo de dados, o monitor de eventos armazena eventos subsequentes de dispositivo de imagem estática em uma fila interna. Se o cliente chamar IStiDevice::Subscribe, ele poderá ler eventos da fila chamando IStiDevice::GetLastNotificationData. Depois que o cliente fecha o dispositivo, os eventos recebidos subsequentemente fazem com que o monitor de eventos tente iniciar novamente um aplicativo registrado.

Os significados dos dois modos de transferência dependem inteiramente do minidriver de modo utilizador do dispositivo. As interfaces IStillImage e IStiDevice permitem que todos os métodos sejam chamados em qualquer modo.

Um minidriver pode determinar o modo em que foi aberto chamando IStiDevice::GetLastNotificationData. Minidrivers devem proibir um cliente de realizar transferências de dados se o cliente solicitou apenas o modo de status ao obter acesso ao dispositivo.

É importante notar que os dispositivos são normalmente abertos no modo de status por um tempo relativamente longo (por exemplo, o monitor de eventos observa eventos do dispositivo), enquanto eles são abertos no modo de dados por um tempo relativamente curto (por exemplo, para ler em uma imagem). Embora a arquitetura de imagem estática permita que apenas um cliente de cada vez abra um dispositivo no modo de dados, pode ser necessário que um driver coloque mais restrições no acesso ao dispositivo.

Por exemplo, se você estiver escrevendo um driver para um dispositivo conectado a uma porta serial, convém chamar CreateFile de dentro do método IStiUSD::LockDevice do driver se o dispositivo foi aberto no modo de status. Isso proibirá outros aplicativos de usar a porta (que pode estar suportando outros dispositivos) enquanto as informações de status estão sendo obtidas do dispositivo.

Para dispositivos conectados a portas dedicadas, como dispositivos de barramento SCSI ou USB, é normalmente permitido chamar CreateFile a partir de IStiUSD::Initialize se o modo de estado for especificado, porque o dispositivo e a porta estarão sempre dedicados a um único cliente.

Quando um dispositivo é aberto no modo de dados, CreateFile normalmente é chamado de dentro de IStiUSD:Initialize, independentemente do tipo de barramento.