Registar um controlador intermédio como um controlador de miniporta

Um driver intermediário chama NdisMRegisterMiniportDriver para exportar as suas funções MiniportXxx . O NdisMiniportDriverHandle retornado por NdisMRegisterMiniportDriver deve ser conservado pelo controlador intermediário e passado para o NDIS quando o controlador chamar NdisIMInitializeDeviceInstanceEx.

O condutor intermédio deve:

  1. Inicialize com zero uma estrutura NDIS_MINIPORT_DRIVER_CHARACTERISTICS utilizando NdisZeroMemory.

  2. Armazene os endereços das funções MiniportXxx obrigatórias, bem como quaisquer funções opcionais MiniportXxx que o driver exporta.

Um driver intermediário que suporta recursos NDIS 6.0 deve se registrar como um driver de miniporta versão 6.0. Para obter mais informações sobre como especificar números de versão do driver de miniporta, consulte NDIS_MINIPORT_DRIVER_CHARACTERISTICS.

Você deve definir as seguintes entradas nos MiniportCharacteristics para um endereço de função MiniportXxx válido, a menos que a função seja opcional e não exportada. Se o driver não exportar a função, defina o endereço como NULL.

SetOptionsHandler
MiniportSetOptions é uma função opcional. O NDIS chama MiniportSetOptions para que o driver intermediário possa especificar manipuladores opcionais.

InitializeHandlerEx
NDIS chama MiniportInitializeEx como resultado de o driver intermediário chamar NdisIMInitializeDeviceInstanceEx para inicializar as suas operações do adaptador miniport para a miniporta virtual que está a ser inicializada.

HaltHandlerEx
MiniportHaltEx é uma função necessária. O NDIS chama MiniportHaltEx se o dispositivo de miniport virtual que o driver intermediário expôs estiver desativado ou parado, ou se o driver intermediário chamar NdisIMDeInitializeDeviceInstance para iniciar a sua remoção.

UnloadHandler
MiniportDriverUnload é uma função necessária. NDIS chama MiniportDriverUnload para desinstalar o driver intermediário.

PauseHandler
MiniportPause é uma função necessária. O NDIS chama MiniportPause para interromper o fluxo de dados de rede através de uma miniporta virtual especificada do driver intermediário.

RestartHandler
MiniportRestart é uma função necessária. O NDIS chama MiniportRestart para reiniciar o fluxo de dados de rede através de uma miniporta virtual especificada do driver intermediário.

OidRequestHandler
MiniportOidRequest recebe solicitações de OID_ XXX originadas de um driver superior que chamou NdisOidRequest ou do NDIS. O driver intermediário pode lidar com uma solicitação ou passá-la para o driver de miniporta subjacente.

SendNetBufferListsHandler
MiniportSendNetBufferLists recebe uma matriz de um ou mais ponteiros para estruturas NET_BUFFER_LIST que especificam dados de rede para transmissão pela rede. Cada driver intermediário deve fornecer uma função MiniportSendNetBufferLists. Para obter mais informações, consulte Transmitindo dados de rede por meio de um driver intermediário.

ReturnNetBufferListsHandler
MiniportReturnNetBufferLists recebe uma estrutura de NET_BUFFER_LIST que foi anteriormente indicada a um driver de nível superior através da chamada NdisMIndicateReceiveNetBufferLists. A chamada para NdisMIndicateReceiveNetBufferLists transfere o controle dos recursos indicados para o driver de nível superior. Depois que o driver de nível superior consome cada indicação, a estrutura NET_BUFFER_LIST alocada pelo driver intermediário e os recursos que ela descreve são retornados para a função MiniportReturnNetBufferLists .

CancelSendHandler
MiniportCancelSend é uma função necessária. O NDIS chama MiniportCancelSend para cancelar uma solicitação de envio.

CheckForHangHandler
MiniportCheckForHangEx não é necessário para drivers intermediários, portanto, eles devem definir esse ponto de entrada como NULL.

ResetHandlerEx
MiniportResetEx não é necessário para drivers intermediários, portanto, eles devem definir esse ponto de entrada como NULL.

DevicePnPEventNotifyHandler
O ponto de entrada para a função MiniportDevicePnPEventNotify.

ShutdownHandlerEx
MiniportShutdownEx é uma função necessária. MiniportShutdownEx restaura a miniporta virtual ao seu estado inicial (antes das execuções de rotina do driver intermediário DriverEntry).

CancelOidRequestHandler
MiniportCancelOidRequest é uma função necessária. O NDIS chama MiniportCancelOidRequest para cancelar uma solicitação OID.

Um driver intermediário pode exigir outras funções MiniportXxx que são específicas da implementação. Para obter informações sobre o registo opcional, consulte Configuração dos serviços opcionais do controlador de miniporto.

Certas funções de manipulador de miniportas nunca são fornecidas por um driver intermediário. As razões para isso incluem: esses drivers não gerenciam dispositivos de interrupção ou esses drivers não alocam buffers no IRQL aumentado.

Observação Os condutores intermédios devem incluir a funcionalidade de pausa e reinicialização. Inclua suporte para pausar e reiniciar miniportas virtuais, se necessário, quando o NDIS pausar uma pilha de drivers subjacente. Para obter mais informações sobre pausar e reiniciar, consulte Driver Stack Management.