SRB_OPEN_STREAM
O driver de classe envia essa solicitação para abrir um fluxo.
Valor retornado
O minidriver deve definir um dos seguintes como o status no SRB:
STATUS_SUCCESS
Indica a conclusão bem-sucedida do comando.
STATUS_NOT_IMPLEMENTED
Indica que a função não é compatível com o minidriver.
STATUS_TOO_MANY_NODES
Indica que não há recursos suficientes para abrir esse fluxo.
STATUS_IO_DEVICE_ERROR
Indica que ocorreu uma falha de hardware.
Comentários
O driver de classe fornece um buffer HW_STREAM_OBJECT no pSrb-StreamObject>, com pSrb-StreamObject-StreamNumber>> definido como o número do fluxo a ser aberto. O ponteiro pSrb aponta para uma estrutura de HW_STREAM_REQUEST_BLOCK . StreamNumber corresponde ao deslocamento do fluxo dentro da estrutura HW_STREAM_DESCRIPTOR que o minidriver fornece em resposta a uma solicitação de SRB_GET_STREAM_INFO . O driver de classe especifica o formato de dados que o fluxo aberto deve fornecer em pSrb-CommandData-OpenFormat.>>
Quando o minidriver recebe essa solicitação, ele deve determinar se o fluxo especificado pode ser aberto no momento. O minidriver também deve verificar o formato KSDATAFORMAT passado. o campo OpenFormat do SRB. Se o fluxo puder ser aberto, o minidriver atualizará a estrutura HW_STREAM_OBJECT e retornará STATUS_SUCCESS. Se o número máximo de instâncias de fluxo já estiver aberto ou se os recursos de hardware necessários para abrir esse fluxo não estiverem disponíveis, o minidriver retornará um erro apropriado status.
Quando o comando SRB_OPEN_STREAM é recebido pelo minidriver, o minidriver deve:
Verifique se o número máximo de instâncias de fluxo não foi excedido e se o valor do índice de fluxo é válido.
Verifique se o formato de dados solicitado é válido para esse fluxo.
Defina o formato para o fluxo.
Mantenha uma matriz de todas as estruturas de extensão de fluxo na extensão do dispositivo para que os IRPs possam ser cancelados de qualquer fluxo.
Especifique ponteiros, no objeto stream, para os manipuladores de dados de fluxo e manipuladores de controle.
Defina o sinalizador DMA no objeto de fluxo se o dispositivo executará o DMA diretamente para os endereços de buffer de dados passados para as rotinas ReceiveDataPacket . Se o driver acessar buffers de dados passados usando endereçamento lógico, defina também o sinalizador PIO no objeto de fluxo.
Se o suporte ao relógio estiver disponível no fluxo, indique isso por meio do membro HwClockObject no objeto stream.