Registrando um driver intermediário como um driver de miniporte
Um driver intermediário chama NdisMRegisterMiniportDriver para exportar suas funções MiniportXxx . O NdisMiniportDriverHandle retornado por NdisMRegisterMiniportDriver deve ser retido pelo driver intermediário e pela entrada para o NDIS quando o driver chama NdisIMInitializeDeviceInstanceEx.
O driver intermediário deve:
Inicialize zero uma estrutura de NDIS_MINIPORT_DRIVER_CHARACTERISTICS com NdisZeroMemory.
Armazene os endereços das funções obrigatórias do MiniportXxx , bem como quaisquer funções opcionais do MiniportXxx que o driver exporta.
Um driver intermediário que dá suporte a recursos do NDIS 6.0 deve se registrar como um driver de miniporto versão 6.0. Para obter mais informações sobre como especificar números de versão do driver de miniport, consulte NDIS_MINIPORT_DRIVER_CHARACTERISTICS.
Você deve definir as seguintes entradas em MiniportCharacteristics como um endereço de função MiniportXxx válido , a menos que a função seja opcional e não seja 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
O NDIS chama MiniportInitializeEx como resultado do driver intermediário que chama NdisIMInitializeDeviceInstanceEx para inicializar suas operações de adaptador de miniporto para o miniporto virtual que está sendo inicializado.
HaltHandlerEx
MiniportHaltEx é uma função necessária. O NDIS chamará MiniportHaltEx se o dispositivo de miniporto virtual exposto pelo driver intermediário estiver desabilitado ou interrompido ou se o driver intermediário chamar NdisIMDeInitializeDeviceInstance para iniciar sua remoção.
UnloadHandler
MiniportDriverUnload é uma função necessária. O NDIS chama MiniportDriverUnload para descarregar o driver intermediário.
PauseHandler
MiniportPause é uma função necessária. O NDIS chama MiniportPause para interromper o fluxo de dados de rede por meio de um miniporto virtual especificado do driver intermediário.
RestartHandler
MiniportRestart é uma função necessária. O NDIS chama MiniportRestart para reiniciar o fluxo de dados de rede por meio de um miniporto virtual especificado do driver intermediário.
OidRequestHandler
MiniportOidRequest recebe solicitações OID_XXX provenientes de um driver sobreposto chamado NdisOidRequest ou do NDIS. O driver intermediário pode lidar com uma solicitação ou passá-la para o driver de miniporto subjacente.
SendNetBufferListsHandler
MiniportSendNetBufferLists recebe uma matriz de um ou mais ponteiros para NET_BUFFER_LIST estruturas 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 Transmissão de dados de rede por meio de um driver intermediário.
ReturnNetBufferListsHandler
MiniportReturnNetBufferLists recebe uma estrutura de NET_BUFFER_LIST retornada que ele indicou anteriormente para um driver de nível superior chamando NdisMIndicateReceiveNetBufferLists. A chamada para NdisMIndicateReceiveNetBufferLists abre mão do controle dos recursos indicados para o driver de nível superior. Depois que o driver de nível superior consome cada indicação, o driver intermediário alocado NET_BUFFER_LIST estrutura e os recursos descritos 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 o miniporto virtual para seu estado inicial (antes da execução da rotina DriverEntry do driver intermediário).
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 específicas da implementação. Para obter informações sobre como registrar opcional, consulte Configurando serviços opcionais de driver de miniport.
Determinadas funções de manipulador de driver de miniporte nunca são fornecidas por um driver intermediário. Os motivos para isso incluem: esses drivers não gerenciam dispositivos de interrupção ou esses drivers não alocam buffers no IRQL gerado.
Nota Os drivers intermediários devem incluir a funcionalidade de pausa e reinicialização. Inclua suporte para pausar e reiniciar miniportos virtuais, se necessário, quando o NDIS pausa uma pilha de driver subjacente. Para obter mais informações sobre pausar e reiniciar, consulte Gerenciamento de pilha de driver.