PROTOCOL_NET_PNP_EVENT função de retorno de chamada (ndis.h)
O NDIS chama a função ProtocolNetPnPEvent para indicar um evento de Plug and Play de rede, um evento NDIS PnP ou um evento de gerenciamento de energia para um driver de protocolo.
Sintaxe
PROTOCOL_NET_PNP_EVENT ProtocolNetPnpEvent;
NDIS_STATUS ProtocolNetPnpEvent(
[in] NDIS_HANDLE ProtocolBindingContext,
[in] PNET_PNP_EVENT_NOTIFICATION NetPnPEventNotification
)
{...}
Parâmetros
[in] ProtocolBindingContext
O identificador para uma área de contexto alocada pelo driver de protocolo na qual esse driver mantém informações de estado de tempo de execução por associação. O driver de protocolo forneceu esse identificador quando chamou a função NdisOpenAdapterEx . Um evento NetEventXxx que é indicado com um Protocolo NULLBindingContext se aplica a todas as associações. NetEventBindList e NetEventBindsComplete são sempre indicados com um Protocolo NULLBindingContext. NetEventReconfigure pode ser indicado com um ProtocolBindingContext especificado ou com um Protocolo NULLBindingContext.
[in] NetPnPEventNotification
Um ponteiro para um NET_PNP_EVENT_NOTIFICATION estrutura que descreve o evento Plug and Play ou o evento de Gerenciamento de Energia que o NDIS está indicando para o driver de protocolo.
Retornar valor
ProtocolNetPnPEvent pode retornar qualquer um dos seguintes:
Código de retorno | Descrição |
---|---|
|
O driver de protocolo lidou com êxito com o evento de Plug and Play de rede indicado, o evento NDIS PnP ou o evento de gerenciamento de energia. O significado desse código status depende do código NetEvent no buffer NET_PNP_EVENT_NOTIFICATION estrutura no NetPnPEvent:
|
|
O driver de protocolo retornará sua resposta ao evento indicado de forma assíncrona com uma chamada para o Função NdisCompleteNetPnPEvent . |
|
O driver de protocolo não pôde obter os recursos do sistema necessários para atender ao evento indicado Plug and Play ou Power Management. |
|
Os drivers de protocolo NDIS 6.0 e posteriores não devem retornar esse status. Um NDIS 5. O driver de protocolo x que não dá suporte a Plug and Play pode retornar esse status em resposta a um NetEventSetPower para indicar que o NDIS deve desassociá-lo do adaptador subjacente. |
|
O driver de protocolo falhou no evento indicado por motivos diferentes daqueles indicados na lista anterior. |
Um driver de protocolo pode falhar nos eventos NetEventQueryRemoveDevice e NetEventPortActivation .
Se um driver de protocolo falhar no evento NetEventPortActivation , ele não deverá usar nenhuma porta associada em operações subsequentes.
Um driver de protocolo sempre deve ter sucesso nos eventos NetEventRestart, NetEventIMReEnableDevice, NetEventCancelRemoveDevice, NetEventReconfigure, NetEventBindList, NetEventBindsComplete, NetEventPause, NetEventPortDeactivation e NetEventPnPCapabilities retornando NDIS_STATUS_SUCCESS.
Comentários
A função ProtocolNetPnPEvent é necessária em drivers de protocolo para dar suporte a Plug and Play e Ao Gerenciamento de Energia. O NDIS chama ProtocolNetPnPEvent para notificar um driver de protocolo de que ocorreu um evento de Plug and Play de rede, um evento NDIS PnP ou power management.
O NET_PNP_EVENT_NOTIFICATION estrutura passada para ProtocolNetPnPEvent descreve o evento. ProtocolNetPnPEvent interpreta duas informações básicas na estrutura NET_PNP_EVENT_NOTIFICATION:
- Um código no membro NetEvent que identifica o tipo de evento Plug and Play ou Power Management.
- Informações específicas do evento. Por exemplo, com um evento NetEventSetPower , o membro Buffer contém o estado de energia do dispositivo para o qual o dispositivo está em transição.
Um driver de protocolo sempre deve ter êxito em um evento NetEventQueryPower . Depois de estabelecer uma conexão ativa, um driver de protocolo pode chamar a função PoRegisterSystemState para registrar um estado continuamente ocupado. Enquanto o registro de estado estiver em vigor, o power manager não tentará colocar o sistema em suspensão. Depois que a conexão se torna inativa, o driver de protocolo cancela o registro de estado chamando a função PoUnregisterSystemState . Um driver de protocolo nunca deve tentar impedir que o sistema faça a transição para o estado de suspensão falhando em um evento NetEventQueryPower . Observe que um evento NetEventQueryPower é sempre seguido por um evento NetEventSetPower . Um evento NetEventSetPower que especifica o estado de energia atual do dispositivo subjacente, na verdade, cancela o evento NetEventQueryPower .
Se um driver de protocolo não puder liberar um dispositivo (por exemplo, porque o dispositivo está em uso), ele deverá falhar em um evento NetEventQueryRemoveDevice retornando NDIS_STATUS_FAILURE.
Um driver de protocolo sempre deve ter sucesso em Um NetEventCancelRemoveDevice, um NetEventReconfigure, NetEventBindList, NetEventBindsComplete, NetEventPnPCapabilities, NetEventPause ou NetEventPortDeactivation retornando NDIS_STATUS_SUCCESS.
Ao manipular um NetEventReconfigure ou um NetEventBindList, um driver de protocolo deve validar os dados associados ao evento. Para obter mais informações sobre esses dados, consulte NET_PNP_EVENT_NOTIFICATION.
O NDIS chama ProtocolNetPnPEvent em IRQL = PASSIVE_LEVEL.
Exemplos
Para definir uma função ProtocolNetPnPEvent , 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 ProtocolNetPnPEvent chamada "MyNetPnPEvent", use o tipo PROTOCOL_NET_PNP_EVENT conforme mostrado neste exemplo de código:
PROTOCOL_NET_PNP_EVENT MyNetPnPEvent;
Em seguida, implemente sua função da seguinte maneira:
_Use_decl_annotations_
NDIS_STATUS
MyNetPnPEvent(
NDIS_HANDLE ProtocolBindingContext,
PNET_PNP_EVENT_NOTIFICATION NetPnPEvent
)
{...}
O tipo de função PROTOCOL_NET_PNP_EVENT é 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 PROTOCOL_NET_PNP_EVENT 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 |