Compartilhar via


MINIPORT_SHUTDOWN função de retorno de chamada (ndis.h)

O NDIS chama a função MiniportShutdownEx de um driver de miniport quando o sistema está sendo desligado. Essa função coloca o miniporto no estado Desligamento, em que nenhum outro retorno de chamada pode ocorrer (incluindo MiniportHaltEx). Para obter mais informações sobre estados de driver de miniporta, consulte Miniport Adapter States and Operations.

Nota Você deve declarar a função usando o tipo MINIPORT_SHUTDOWN . Para obter mais informações, consulte a seção Exemplos a seguir.
 

Sintaxe

MINIPORT_SHUTDOWN MiniportShutdown;

void MiniportShutdown(
  [in] NDIS_HANDLE MiniportAdapterContext,
  [in] NDIS_SHUTDOWN_ACTION ShutdownAction
)
{...}

Parâmetros

[in] MiniportAdapterContext

Um identificador para uma área de contexto que o driver de miniporto alocou em sua função MiniportInitializeEx . O driver usa essa área de contexto para manter informações de estado para um adaptador de miniporta.

[in] ShutdownAction

O motivo pelo qual o NDIS chamou a função de desligamento. Os seguintes valores são válidos:

NdisShutdownPowerOff

Indica que o NDIS chamado MiniportShutdownEx porque o sistema está sendo desligado.

NdisShutdownBugCheck

Indica que o NDIS chamado MiniportShutdownEx devido a um erro do sistema.

Retornar valor

Nenhum

Comentários

Um driver especifica o ponto de entrada MiniportShutdownEx quando ele chama o Função NdisMRegisterMiniportDriver .

MiniportShutdownEx restaura o adaptador de miniporto para um estado inicial conhecido (o estado antes de NDIS chamar a função MiniportInitializeEx do driver de miniporto para o adaptador de miniporto). Isso garante que o adaptador de miniporta esteja em um estado conhecido e pronto para ser reinicializado quando o computador for reiniciado após um desligamento do sistema ocorrer por qualquer motivo, incluindo um erro irrecuperável do sistema.

MiniportShutdownEx pode ler ou gravar em portas de E/S, espaço de E/S do dispositivo mapeado na memória ou espaço de configuração específico do barramento chamando a função NdisMGetBusData ou NdisMSetBusData para desabilitar um mecanismo de DMA, desabilitar interrupções ou redefinir o hardware para um estado conhecido para que o hardware possa ser reiniciado com segurança.

Se o NDIS chamar MiniportShutdownEx devido a um erro irrecuperável, o parâmetro ShutdownAction será definido como NdisShutdownBugCheck e MiniportShutdownEx será executado em um IRQL alto. Nesse caso, o driver de miniporto não deve chamar nenhuma função NdisXxx , exceto as funções que podem ser chamadas em qualquer IRQL.

Se o NDIS chamar MiniportShutdownEx devido a um desligamento iniciado pelo usuário, MiniportShutdownEx será executado em IRQL = PASSIVE_LEVEL e o driver de miniporto poderá chamar outras funções NdisXxx .

Se o NDIS chamar MiniportShutdownEx devido a um erro irrecuperável, o parâmetro ShutdownAction será definido como NdisShutdownBugCheck e MiniportShutdownEx será executado em um IRQL alto. Nesse caso, o driver de miniporto não deve chamar nenhuma função NdisXxx , exceto as funções que podem ser chamadas em qualquer IRQL. A partir dos miniportos NDIS 6.30, o NDIS não chama MiniportShutdownEx durante um BugCheck, a menos que o miniporto forneça o sinalizador NDIS_MINIPORT_ATTRIBUTES_REGISTER_BUGCHECK_CALLBACK em seus atributos de registro do adaptador.

Se o valor de ShutdownAction for NdisShutdownPowerOff, o driver de miniporto poderá, opcionalmente, liberar seus recursos. No entanto, isso não é necessário nem incentivado, pois o desligamento do sistema o torna desnecessário.

Se o valor de ShutdownAction for NdisShutdownBugCheck, o driver de miniporto não deverá liberar seus recursos.

Importante Se MiniportHaltEx causar um erro do sistema, o driver de miniporto verá uma chamada aninhada para MiniportShutdownEx com ShutdownActionNdisShutdownBugCheck. Nesse caso, MiniportShutdownEx deve retornar imediatamente sem fazer nenhum trabalho.

 

Exemplos

Para definir uma função MiniportShutdownEx , primeiro você deve fornecer uma declaração de função que identifique o tipo de função que você está definindo. O Windows fornece um conjunto de tipos de função para drivers. Declarar uma função usando os tipos de função ajuda a Análise de Código para Drivers, SDV ( Verificador de Driver Estático ) e outras ferramentas de verificação a encontrar erros e é um requisito para escrever drivers para o sistema operacional Windows.

Por exemplo, para definir uma função MiniportShutdownEx chamada "MyShutdownEx", use o tipo MINIPORT_SHUTDOWN conforme mostrado neste exemplo de código:

MINIPORT_SHUTDOWN MyShutdownEx;

Em seguida, implemente sua função da seguinte maneira:

_Use_decl_annotations_
VOID
 MyShutdownEx(
    NDIS_HANDLE  MiniportAdapterContext,
    NDIS_SHUTDOWN_ACTION  ShutdownAction
    )
  {...}

O tipo de função MINIPORT_SHUTDOWN é definido no arquivo de cabeçalho Ndis.h. Para identificar erros com mais precisão ao executar as ferramentas de análise de código, adicione a anotação Use_decl_annotations à sua definição de função. A anotação Use_decl_annotations garante que as anotações aplicadas ao tipo de função MINIPORT_SHUTDOWN no arquivo de cabeçalho sejam usadas. Para obter mais informações sobre os requisitos para declarações de função, consulte Declarando funções usando tipos de função de função para drivers NDIS.

Para obter informações sobre Use_decl_annotations, consulte Anotando o comportamento da função.

Requisitos

Requisito Valor
Cliente mínimo com suporte Com suporte no NDIS 6.0 e posterior.
Plataforma de Destino Windows
Cabeçalho ndis.h (inclua Ndis.h)
IRQL Consulte a seção Comentários

Confira também

Estados do adaptador de um driver miniport

Desligamento do adaptador de miniporta

Estados e operações do adaptador miniport

MiniportInitializeEx

NdisMGetBusData

NdisMRegisterMiniportDriver

NdisMSetBusData