estrutura NET_PNP_EVENT (netpnp.h)
A estrutura NET_PNP_EVENT descreve um evento de Plug and Play de rede (PnP), um evento PnP NDIS ou um evento de gerenciamento de energia.
Sintaxe
typedef struct _NET_PNP_EVENT {
NET_PNP_EVENT_CODE NetEvent;
PVOID Buffer;
ULONG BufferLength;
ULONG_PTR NdisReserved[4];
ULONG_PTR TransportReserved[4];
ULONG_PTR TdiReserved[4];
ULONG_PTR TdiClientReserved[4];
} NET_PNP_EVENT, *PNET_PNP_EVENT;
Membros
NetEvent
Um código de evento que descreve o evento como um dos seguintes:
NetEventSetPower
Indica que o power manager enviou uma solicitação Definir Energia, que especifica uma transição para um estado de energia do sistema. O NDIS converte esse estado em um estado de energia do dispositivo apropriado para o dispositivo.
Para obter mais informações, consulte a seção Comentários.
NetEventQueryPower
Indica que o power manager enviou uma solicitação de Energia de Consulta, que solicita uma transição para um estado de energia do sistema. O NDIS converte esse estado em um estado de energia do dispositivo apropriado para o dispositivo.
Para obter mais informações, consulte a seção Comentários.
NetEventQueryRemoveDevice
Indica que o Gerenciador PnP enviou uma solicitação Remover Dispositivo de Consulta. O Gerenciador de PnP envia essa solicitação para consultar se um dispositivo pode ser removido sem interromper as operações.
NetEventCancelRemoveDevice
Indica que o Gerenciador PnP enviou uma solicitação Cancelar Remover Dispositivo. O Gerenciador PnP envia essa solicitação para cancelar a remoção de um dispositivo depois que o Gerenciador PnP envia uma solicitação remover dispositivo de consulta.
NetEventReconfigure
Indica que a configuração foi alterada para um componente de rede. Por exemplo, se um usuário, por meio da pasta rede e discagem Connections, alterar o endereço IP para TCP/IP, o NDIS indicará o evento NetEventReconfigure para o protocolo TCP/IP. Além disso, um driver intermediário normalmente usa esse evento como um gatilho para chamar o Função NdisIMInitializeDeviceInstanceEx e inicie seus miniportos virtuais. Para obter mais informações sobre NetEventReconfigure, consulte NetEventIMReEnableDevice.
NetEventBindList
Indica a um driver de protocolo que sua ordem de processamento de lista de associação foi reconfigurada. Essa lista indica uma ordem relativa que se aplica a associações ao processar, por exemplo, uma solicitação de usuário que pode ser roteada para uma das várias associações. O buffer passado com esse evento contém uma lista de nomes de dispositivo formatados como cadeias de caracteres Unicode terminadas em nulo. O formato de cada nome de dispositivo é idêntico ao membro AdapterName que é passado para uma chamada para a função ProtocolBindAdapterEx .
NetEventBindsComplete
Indica que um driver de protocolo está associado a todas as NICs às quais ele pode se associar. O NDIS não indicará mais NICs para o protocolo, a menos que uma NIC PnP esteja conectada ao sistema.
NetEventPnPCapabilities
Indica que o usuário habilitou ou desabilitou os recursos de ativação do adaptador subjacente. (A associação é especificada pelo parâmetro ProtocolBindingContext que é passado para a função ProtocolNetPnPEvent .)
NetEventPause
Indica que a associação de protocolo especificada deve entrar no estado Pausando. A associação entrará no estado Pausado depois que o NDIS concluir todas as solicitações de envio pendentes para a associação.
NetEventRestart
Indica que a associação de protocolo especificada entrou no estado De reinicialização. Depois que o driver de protocolo estiver pronto para retomar as operações de envio e recebimento para a associação, a associação entrará no estado Em execução.
NetEventPortActivation
Indica a ativação de uma lista de portas associadas à associação especificada.
NetEventPortDeactivation
Indica a desativação de uma lista de portas associadas à associação especificada.
NetEventIMReEnableDevice
Indica que a configuração foi alterada para um miniporto virtual de um driver intermediário NDIS 6.0 ou posterior. NetEventIMReEnableDevice é semelhante ao evento NetEventReconfigure , exceto que o driver intermediário recebe esse evento para um único miniporto virtual e o evento NetEventReconfigure se aplica a todos os miniportos virtuais do driver intermediário. Por exemplo, um driver intermediário recebe o evento NetEventIMReEnableDevice quando um usuário desabilita e habilita um único miniporto virtual do Gerenciador de Dispositivos ou de outra fonte. Para obter exemplos de gerenciamento de energia de driver intermediário, consulte o driver intermediário do NDIS MUX e o exemplo de driver notify object disponíveis no repositório de exemplos de driver do Windows no GitHub.
NetEventNDKEnable
Indica que o NDK (Kernel Direto de Rede) está habilitado no momento.
NetEventNDKDisable
Indica que o NDK está desabilitado no momento.
NetEventFilterPreDetach
Indica que um filtro está prestes a ser desanexado, para que o filtro possa executar qualquer limpeza necessária que não seja possível no manipulador FilterDetach (porque o OID e os caminhos de indicação são fechados nesse momento).
NetEventBindFailed
Indica que ocorreu uma falha de evento de associação.
NetEventSwitchActivate
Indica que o Comutador Extensível do Hyper-V concluiu a ativação e as extensões de comutador agora podem consultar com segurança a configuração de comutador adicional. A indicação só é usada na pilha do Comutador Extensível do Hyper-V, emitida pelo miniporto de extensão. Consulte Consultando a configuração do comutador extensível do Hyper-V e NDIS_SWITCH_PARAMETERS para obter mais detalhes.
NetEventInhibitBindsAbove
Um evento síncrono que impede que outros filtros e protocolos se vinculem ao adaptador de miniporta. Todos os filtros ou protocolos que foram associados anteriormente serão desassociados antes da conclusão do evento. As regras de uso estão abaixo.
- Evite deixar o adaptador de miniporta no estado de inibição por mais de 1000 milissegundos.
- Esse evento só pode ser emitido após o início de MiniportInitializeEx e não deve ser emitido após o retorno de MiniportHaltEx .
- Esse evento só pode ser emitido quando o adaptador de miniporta está em um estado D0.
- Como esse evento está bloqueando, ele não deve ser emitido por nenhum contexto que cause um deadlock.
- Os bloqueios não devem ser mantidos durante a emissão desse evento.
- Esse evento deve ser emitido em PASSIVE_LEVEL.
NetEventAllowBindsAbove
Um evento assíncrono que inverte os efeitos de NetEventInhibitBindsAbove. As regras de uso estão abaixo.
- Esse evento só pode ser emitido após o início de MiniportInitializeEx e não deve ser emitido após o retorno de MiniportHaltEx .
- Esse evento só pode ser emitido quando o adaptador de miniporta está em um estado D0.
- Os bloqueios não devem ser mantidos durante a emissão desse evento.
- Esse evento deve ser emitido em PASSIVE_LEVEL.
NetEventRequirePause
Um evento síncrono que indica os protocolos e filtros, incluindo o adaptador de miniporto, deve ser pausado. Os protocolos e filtros e o adaptador de miniporta têm a garantia de serem pausados quando a rotina NdisMNetPnPEvent retornar. As regras de uso estão abaixo.
- Evite atrasar entre os eventos NetEventAllowStart e NetEventRequirePause por mais de 1000 milissegundos para evitar atrasos em aplicativos de usuário.
- Esse evento só pode ser emitido após o início de MiniportInitializeEx e não deve ser emitido após o retorno de MiniportHaltEx .
- Não há nenhuma garantia de que o NDIS chamará MiniportPause depois que esse evento for emitido. Em particular, se o adaptador de miniporta já estiver em pausa, o NDIS não introduzirá um loop de pausa de início extra. Isso significa que a quantidade de vezes que MiniportPause chamado não é maior que, menor que ou igual ao valor em que esse evento é emitido.
- Como esse evento está bloqueando, ele não deve ser emitido por nenhum contexto que cause um deadlock.
- Os bloqueios não devem ser mantidos durante a emissão desse evento.
NetEventAllowStart
Um evento assíncrono que indica os protocolos e filtros, incluindo o adaptador de miniporto, não precisa ser pausado. As regras de uso estão abaixo. Não há estado de pausa garantido para nenhum driver nos protocolos e filtros após o retorno da rotina NdisMNetPnPEvent .
- Esse evento só pode ser emitido depois que MiniportInitializeEx começar e não deve ser emitido após o retorno de MiniportHaltEx .
- Como esse evento está bloqueando, ele não deve ser emitido por nenhum contexto que cause um deadlock.
- Os bloqueios não devem ser mantidos durante a emissão desse evento.
Buffer
O endereço de um buffer que contém informações específicas do evento indicado no membro NetEvent . Para cada tipo de evento, o buffer contém as seguintes informações:
NetEventSetPower
O buffer contém o estado de energia do dispositivo para o qual o dispositivo está em transição.
Quando o NDIS chama a função ProtocolNetPnPEvent de um driver de protocolo, o estado do dispositivo é NDIS_DEVICE_POWER_STATE, que pode ser um dos seguintes valores:
NdisDeviceStateUnspecified
O dispositivo de rede não dá suporte ao gerenciamento de energia.
NdisDeviceStateD0
O estado totalmente alimentado, no qual o dispositivo fornece funcionalidade e desempenho completos.
NdisDeviceStateD1
Um estado de baixa potência, no qual as solicitações de transmissão do host não são respeitadas pelo dispositivo, os dados recebidos pelo dispositivo não são transferidos para a memória do host e nenhuma interrupção pode ocorrer. Algum contexto de dispositivo pode ser perdido. Dependendo dos recursos da NIC e de seu driver de miniporto, o dispositivo pode ser capaz de gerar um sinal de ativação.
NdisDeviceStateD2
Um estado de baixa potência semelhante a NdisDeviceStateD1, exceto que mais energia e menos contexto normalmente são salvos e mais tempo é necessário para fazer a transição para o estado totalmente alimentado.
NdisDeviceStateD3
O estado desativado, no qual a energia foi totalmente removida do dispositivo.
Para drivers de protocolo, NdisDeviceStateD0 significa que a NIC está totalmente ativada e está disponível para operações normais. Qualquer outro estado do dispositivo significa que o dispositivo não está totalmente ligado e não está disponível para enviar e receber dados de rede.
NetEventQueryPower
O buffer contém o estado de energia do dispositivo solicitado para o dispositivo. O estado do dispositivo é NDIS_DEVICE_POWER_STATE (que é descrito na descrição do valor NetEventSetPower ).
NetEventQueryRemoveDevice
O conteúdo do buffer é NULL.
NetEventCancelRemoveDevice
O conteúdo do buffer é NULL.
NetEventReconfigure
O buffer pode conter dados específicos do protocolo. O driver de protocolo é responsável por validar esses dados.
NetEventBindList
O buffer contém uma lista de associação revisada para o componente de rede que o NET_PNP_EVENT_NOTIFICATION estrutura está sendo passada. A lista de associações, que é uma série de cadeias de caracteres Unicode terminadas em nulo, tem um formato REG_MULTI_SZ. Cada uma das cadeias de caracteres é um nome de adaptador. Os clientes TDI associados a um protocolo usam essa lista de associações para reordenar suas associações. O driver de protocolo é responsável por validar essa lista.
NetEventBindsComplete
O conteúdo do buffer é NULL.
NetEventPnPCapabilities
O buffer é um ULONG que contém uma máscara de bits. Quando o sinalizador NDIS_DEVICE_WAKE_UP_ENABLE é definido na máscara de bits, os recursos de ativação da NIC são habilitados. Caso contrário, os recursos de ativação da NIC serão desabilitados. (A associação é especificada pelo parâmetro ProtocolBindingContext que é passado para ProtocolNetPnPEvent.) Quando definido como zero, esse sinalizador indica que os recursos de ativação da NIC estão desabilitados.
NetEventPause
O buffer contém um NDIS_PROTOCOL_PAUSE_PARAMETERS estrutura.
NetEventRestart
O buffer pode conter NULL ou um NDIS_PROTOCOL_RESTART_PARAMETERS estrutura. O NDIS fornece um ponteiro para uma estrutura NDIS_RESTART_ATTRIBUTES no membro RestartAttributes da estrutura NDIS_PROTOCOL_RESTART_PARAMETERS.
NetEventPortActivation
O buffer contém a primeira entrada em uma lista de estruturas de NDIS_PORT que identificam as portas que o NDIS ativará. Você pode usar o membro Next da estrutura NDIS_PORT para obter a próxima estrutura na lista.
NetEventPortDeactivation
O buffer contém uma matriz de números de porta, do tipo NDIS_PORT_NUMBER (definido como ULONG), que identificam as portas NDIS que o NDIS desativará. Para calcular o número de elementos na matriz, divida o valor do membro BufferLength , que está na estrutura NET_PNP_EVENT especificada no membro NetPnPEvent de NET_PNP_EVENT_NOTIFICATION, por sizeof(NDIS_PORT_NUMBER).
NetEventIMReEnableDevice
O buffer contém um ponteiro para uma variável do tipo NDIS_STRING que contém uma cadeia de caracteres Unicode terminada em nulo que nomeia o objeto do dispositivo de um miniporto virtual para o dispositivo que está sendo habilitado. A cadeia de caracteres é um nome de caminho completo, por exemplo, \Device\DeviceName.
NetEventNDKEnable
O membro buffer é NULL.
NetEventNDKDisable
O membro buffer é NULL.
NetEventFilterPreDetach
O membro buffer é NULL.
NetEventBindFailed
O buffer contém uma estrutura NDIS_BIND_FAILED_NOTIFICATION .
NetEventSwitchActivate
O conteúdo do buffer é NULL.
NetEventAllowBindsAbove
O conteúdo do buffer é NULL.
NetEventInhibitBindsAbove
O conteúdo do buffer é NULL.
NetEventAllowStart
O conteúdo do buffer é NULL.
NetEventRequirePause
O conteúdo do buffer é NULL.
BufferLength
O número de bytes de informações específicas do evento no Buffer.
NdisReserved[4]
Uma área reservada para usada pelo NDIS.
TransportReserved[4]
Uma área reservada para usada pelo motorista de transporte.
TdiReserved[4]
Uma área reservada para usada pela TDI.
TdiClientReserved[4]
Uma área reservada para usada por um cliente TDI.
Comentários
No NDIS 6.0 e versões posteriores, quando o sistema operacional emite um evento PnP do sistema ou um evento de gerenciamento de energia para um objeto de dispositivo de destino que representa um adaptador de miniporte, o NDIS converte o evento em um NET_PNP_EVENT_NOTIFICATION estrutura. O membro NetPnPEvent da estrutura NET_PNP_EVENT_NOTIFICATION é uma estrutura NET_PNP_EVENT .
O NDIS passa um ponteiro para a estrutura NET_PNP_EVENT para cada driver de protocolo associado ao adaptador de miniportuário chamando a função ProtocolNetPnPEvent do driver de protocolo. O driver de protocolo deve salvar esse ponteiro, pois o ponteiro é um parâmetro de entrada para a função NdisCompleteNetPnPEvent , que o driver chama para concluir a chamada para ProtocolNetPnPEvent de forma assíncrona.
O NDIS passa um ponteiro para a estrutura NET_PNP_EVENT para cada driver de filtro associado ao adaptador de miniportuário chamando a função FilterNetPnPEvent do driver de filtro. O driver de filtro não precisa salvar esse ponteiro porque o driver deve concluir a chamada para FilterNetPnPEvent de forma síncrona.
A partir do NDIS 6.30, o driver de protocolo ou filtro deve seguir estas diretrizes quando o NDIS chama as funções ProtocolNetPnPEvent ou FilterNetPnPEvent :
-
Se o membro NetEvent da estrutura NET_PNP_EVENT estiver definido como NetEventSetPower, o driver deverá parar de gerar novas solicitações de E/S. Além disso, o driver não deve aguardar a conclusão de nenhuma solicitação de E/S pendente.
Depois que o driver de protocolo ou filtro retornar de ProtocolNetPnPEvent ou FilterNetPnPEvent, o NDIS não pausará e reiniciará esses drivers durante as transições de estado de energia se as seguintes condições forem verdadeiras:
- O driver de miniporto subjacente define o sinalizador NDIS_MINIPORT_ATTRIBUTES_NO_PAUSE_ON_SUSPEND na estrutura NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES . O driver passa um ponteiro para essa estrutura em sua chamada para a função NdisMSetMiniportAttributes .
- Todos os drivers de filtro anexados ao driver de miniporto dão suporte ao NDIS 6.30 ou versões posteriores do NDIS.
- Todos os drivers de protocolo associados ao driver de miniporto dão suporte ao NDIS 6.30 ou versões posteriores do NDIS.
- Se o membro NetEvent da estrutura NET_PNP_EVENT estiver definido como NetEventSetPower ou NetEventQueryPower, o driver não deverá aguardar a conclusão de nenhuma solicitação de E/S pendente.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Com suporte no NDIS 5.1 e no NDIS 6.0 e posterior. Para obter mais informações sobre a versão NDIS 5.1 dessa estrutura, consulte NET_PNP_EVENT (NDIS 5.1). |
Cabeçalho | netpnp.h (inclua Ndis.h, Netpnp.h) |
Confira também
NDIS_PROTOCOL_PAUSE_PARAMETERS NDIS_PROTOCOL_RESTART_PARAMETERS NdisIMInitializeDeviceInstanceExConsultando a configuração de comutador extensível do Hyper-V