Compartilhar via


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

A função MiniportRestart inicia uma solicitação de reinicialização para um adaptador de miniport que está em pausa.

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

Sintaxe

MINIPORT_RESTART MiniportRestart;

NDIS_STATUS MiniportRestart(
  [in] NDIS_HANDLE MiniportAdapterContext,
       PNDIS_MINIPORT_RESTART_PARAMETERS RestartParameters
)
{...}

Parâmetros

[in] MiniportAdapterContext

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

RestartParameters

Um ponteiro para um NDIS_MINIPORT_RESTART_PARAMETERS estrutura que define os parâmetros de reinicialização para o adaptador de miniport.

Retornar valor

MiniportRestart retorna um dos seguintes valores de status:

Código de retorno Descrição
NDIS_STATUS_SUCCESS

O MiniportRestart reiniciou com êxito o fluxo de dados de rede por meio do adaptador de miniport.

NDIS_STATUS_PENDING
O MiniportRestart não concluiu a operação de reinicialização e a operação será concluída de forma assíncrona. O driver de miniporto deve chamar a função NdisMRestartComplete quando a operação for concluída.
NDIS_STATUS_RESOURCES

O MiniportRestart falhou devido a recursos insuficientes.

NDIS_STATUS_FAILURE
Nenhum dos valores de status anteriores se aplica. Nessa situação, o driver deve chamar a função NdisWriteErrorLogEntry com parâmetros que especificam o motivo da falha.

Comentários

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

O adaptador de miniporte especificado pelo parâmetro MiniportAdapterContext entra no estado Reiniciando quando o NDIS chama MiniportRestart.

Quando o NDIS chama MiniportRestart, um driver de miniport:

  • Deve concluir todas as tarefas necessárias para retomar as operações de envio e recebimento.
  • Opcionalmente, modifica os atributos de reinicialização especificados no membro RestartAttributes do NDIS_MINIPORT_RESTART_PARAMETERS estrutura. Se o ponteiro em RestartAttributes for NULL, o driver de miniporto não deverá modificar nem adicionar à lista de atributos de reinicialização. Se o ponteiro em RestartAttributes não for NULL, ele apontará para uma estrutura NDIS_RESTART_ATTRIBUTES . Se um driver de miniporto não for reiniciado, ele não deverá modificar nenhum atributo.
  • Pode fornecer status indicações com o Função NdisMIndicateStatusEx .
  • Deve lidar com status solicitações na função MiniportOidRequest.
Se um driver de miniporte modificar a lista de atributos de reinicialização, o driver de miniporto:
  • Pode adicionar novos atributos específicos de mídia à lista de atributos de reinicialização. Nessa situação, o driver de miniporto deve alocar um novo NDIS_RESTART_ATTRIBUTES estrutura – por exemplo, com o Função NdisAllocateMemoryWithTagPriority e fornecem espaço de memória para os novos atributos. Depois de propagar os atributos de reinicialização para drivers sobressociantes, o NDIS libera a memória de atributos para os drivers de miniport.
  • Pode modificar os atributos específicos da mídia na lista de atributos de reinicialização. Se o driver de miniporto exigir mais espaço de memória, ele poderá liberar uma estrutura NDIS_RESTART_ATTRIBUTES com a função NdisFreeMemory e alocar uma nova estrutura para conter as informações modificadas. Depois de propagar os atributos de reinicialização para drivers sobressociantes, o NDIS libera a memória de atributos para os drivers de miniport.
  • Pode modificar qualquer campo no NDIS_RESTART_GENERAL_ATTRIBUTES estrutura. Quando o NDIS fornece um ponteiro não NULL no membro RestartAttributes do NDIS_MINIPORT_RESTART_PARAMETERS estrutura, a lista de atributos contém uma entrada na qual o membro Oid na estrutura NDIS_RESTART_ATTRIBUTES é OID_GEN_MINIPORT_RESTART_ATTRIBUTES e o membro Data contêm uma estrutura NDIS_RESTART_GENERAL_ATTRIBUTES.
  • Deve ter certeza de que o NDIS_RESTART_GENERAL_ATTRIBUTES estrutura contém as informações corretas. Para garantir que a estrutura NDIS_RESTART_GENERAL_ATTRIBUTES contenha as informações necessárias, primeiro você deve determinar a versão da estrutura verificando o membro Revision na estrutura NDIS_OBJECT_HEADER especificada no membro Header da estrutura NDIS_RESTART_GENERAL_ATTRIBUTES.
O NDIS não inicia outras operações de Plug and Play (PnP) para o adaptador de miniporto, como parada, inicialização, alteração de energia ou uma solicitação de pausa, até que a operação de reinicialização seja concluída.

Depois que o driver de miniporte reiniciar com êxito as operações de envio e recebimento, ele deverá concluir a operação de reinicialização. Se o driver retornar NDIS_STATUS_SUCCESS do MiniportRestart, a operação de reinicialização será concluída. Se o driver retornar NDIS_STATUS_PENDING, ele poderá continuar as operações de reinicialização. A operação de reinicialização é concluída depois que o driver chama a função NdisMRestartComplete . Depois que a operação de reinicialização for concluída, o adaptador de miniporto estará no estado Em execução.

O driver de miniporte pode retomar indicando pacotes recebidos para o adaptador de miniport imediatamente após o NDIS chamar MiniportRestart e antes que o driver chame NdisMRestartComplete. O driver de miniporte deve estar pronto para aceitar solicitações de envio depois que o driver concluir a solicitação de reinicialização.

Se o driver de miniporto não reiniciar as operações de envio e recebimento, o driver deverá retornar uma falha apropriada status do MiniportRestart. Nessa situação, o driver deve interromper todas as operações de envio ou recebimento que foram iniciadas e, em seguida, retornar ao estado Pausado .

O NDIS chama MiniportRestart em IRQL = PASSIVE_LEVEL.

Exemplos

Para definir uma função MiniportRestart , 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 gravar drivers para o sistema operacional Windows.

Por exemplo, para definir uma função MiniportRestart chamada "MyRestart", use o tipo MINIPORT_RESTART conforme mostrado neste exemplo de código:

MINIPORT_RESTART MyRestart;

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

_Use_decl_annotations_
NDIS_STATUS
 MyRestart(
    NDIS_HANDLE  MiniportAdapterContext,
    PNDIS_MINIPORT_RESTART_PARAMETERS  RestartParameters
    )
  {...}

O tipo de função MINIPORT_RESTART é 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_RESTART 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 PASSIVE_LEVEL

Confira também

MiniportInitializeEx

MiniportOidRequest

MiniportPause

NDIS_MINIPORT_RESTART_PARAMETERS

NDIS_OBJECT_HEADER

NDIS_RESTART_ATTRIBUTES

NDIS_RESTART_GENERAL_ATTRIBUTES NdisAllocateMemoryWithTagPriority

NdisFreeMemory

NdisMIndicateStatusEx

NdisMRegisterMiniportDriver

NdisMRestartComplete

NdisWriteErrorLogEntry

OID_GEN_MINIPORT_RESTART_ATTRIBUTES