Drivers de miniporto NDIS desserializados
Todos os drivers NDIS 6.0 e posteriores são desserializados.
Um driver de miniporto NDIS desserializado serializa a operação de suas próprias funções miniportXxx e enfileira internamente todas as solicitações de envio, em vez de depender do NDIS para executar essas funções. Como resultado, um driver de miniporto desserializado pode obter um desempenho de duplex completo significativamente melhor do que um driver de miniporto serializado.
O modelo de driver desserializado é o modelo padrão para drivers de miniporto NDIS. Os drivers de miniporto orientados para conexão, bem como drivers de miniporta com uma borda inferior do WDM, devem ser drivers desserializados. Ao escrever um novo driver de miniporto NDIS, você deve escrever um driver desserializado. Se possível, você também deve portar drivers mais antigos para o NDIS 6.0 ou posterior. Para obter mais informações sobre drivers de portabilidade, consulte:
- Portabilidade de drivers NDIS 5.x para NDIS 6.0
- Portabilidade de drivers NDIS 6.x para NDIS 6.20
- Portabilidade de drivers NDIS 6.x para NDIS 6.30
Um driver de miniporta desserializado deve atender aos seguintes requisitos quando ele se adapta ao NDIS:
Um driver de miniporta desserializado deve identificar-se como tal para o NDIS durante a inicialização.
Um driver de miniporto desserializado deve concluir todas as solicitações de envio de forma assíncrona. Para concluir uma solicitação de envio, os drivers de miniporto NDIS 6.0 e posterior sem conexão chamam a função NdisMSendNetBufferListsComplete . Os drivers de miniporto NDIS 6.0 e posteriores orientados para conexão chamam a função NdisMCoSendNetBufferListsComplete .
Um driver de miniporto desserializado que dá suporte ao NDIS 6.0 ou posterior define o membro Status da estrutura NET_BUFFER_LIST que ele passará para NdisMSendNetBufferListsComplete.
Se um driver de miniporto desserializado não puder concluir imediatamente as solicitações de envio, ele não poderá retornar as solicitações ao NDIS para requeução. Em vez disso, o driver de miniporto deve enfileirar solicitações de envio internamente até que recursos suficientes estejam disponíveis para transmitir os dados.
Um driver de miniporta desserializado não deve examinar as estruturas que ele passa para o NDIS em indicações de recebimento até que o NDIS as retorne. O NDIS retorna NET_BUFFER_LIST estruturas para a função MiniportReturnNetBufferLists de um driver de miniport.
Um driver de miniporta desserializado deve atender aos seguintes requisitos internos do driver:
Um driver de miniporta desserializado deve proteger suas filas de buffer de rede com bloqueios de rotação. Um driver de miniporto desserializado também deve proteger seu estado compartilhado contra o acesso simultâneo por suas próprias funções MiniportXxx .
As funções MiniportXxx de um miniportor desserializado podem ser executadas em IRQL <= DISPATCH_LEVEL. Consequentemente, o gravador de driver não pode assumir que as funções MiniportXxx serão chamadas na sequência em que processam solicitações. Uma função MiniportXxx pode antecipar outra função MiniportXxx que está em execução em um IRQL inferior.
Um driver de miniporta desserializado é responsável pelo gerenciamento de fila de buffer de rede. Quando o driver de miniporta apresenta um problema de recurso, ele não pode retornar solicitações de envio ao NDIS para requeumento. Em vez disso, o driver de miniporto deve enfileirar internamente todas as solicitações de envio até que recursos suficientes estejam disponíveis para enviar os dados.
Um driver de miniporto desserializado deve concluir as solicitações de envio na ordem determinada pelo protocolo.
Para obter mais informações sobre requisitos de envio e recebimento para drivers NDIS, consulte Operações de envio e recebimento.
Observe que um driver de miniporto desserializado geralmente conclui as solicitações de envio em ordem determinada pelo protocolo. No entanto, um driver de miniporto que dá suporte à prioridade de pacote (por exemplo, IEEE 802.1p) pode reordenar solicitações de envio com base nas informações de prioridade.