Partilhar via


Pré-registro do MSI-X

Para dar suporte à alteração de afinidades de interrupção para MSI-X ou para remover recursos de interrupção de mensagem, um driver de miniporto deve estabelecer uma função de filtro de requisitos de recurso. Essa etapa de pré-registro ocorre antes que o NDIS chame a função MiniportInitializeEx .

Para estabelecer uma função de filtro de requisitos de recurso, o driver de miniport deve fornecer uma função MiniportSetOptions . Quando o driver de miniporto chama a função NdisMRegisterMiniportDriver da rotina DriverEntry , o driver passa o ponto de entrada para MiniportSetOptions na estrutura NDIS_MINIPORT_DRIVER_CHARACTERISTICS . O NDIS chama a função MiniportSetOptions no contexto de NdisMRegisterMiniportDriver.

Em MiniportSetOptions, o driver de miniporto chama a função NdisSetOptionalHandlers e especifica uma estrutura NDIS_MINIPORT_PNP_CHARACTERISTICS . Essa estrutura define os pontos de entrada para as funções MiniportAddDevice, MiniportRemoveDevice, MiniportStartDevice e MiniportFilterResourceRequirements .

Quando o NDIS recebe uma solicitação de dispositivo de adição do gerenciador de Plug and Play (PnP), o NDIS chama a função MiniportAddDevice do driver de miniport. O identificador que o NDIS passa para MiniportAddDevice no parâmetro MiniportAdapterHandle é o identificador que o NDIS passa posteriormente para a função MiniportInitializeEx .

Em MiniportAddDevice, o driver inicializa uma estrutura NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES e passa essa estrutura para a função NdisMSetMiniportAttributes . A estrutura NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES contém o membro MiniportAddDeviceContext que é um identificador para uma área de contexto alocada pelo driver de miniport para o dispositivo. Posteriormente, o NDIS fornece esse identificador de contexto para as funções MiniportRemoveDevice, MiniportFilterResourceRequirements, MiniportStartDevice e MiniportInitializeEx . Para MiniportInitializeEx, o identificador de contexto é passado no membro MiniportAddDeviceContext da estrutura NDIS_MINIPORT_INIT_PARAMETERS para a qual o parâmetro MiniportInitParameters aponta.

Depois que o NDIS chama MiniportAddDevice e MiniportAddDevice retorna NDIS_STATUS_SUCCESS, o NDIS chama a função MiniportFilterResourceRequirements sempre que recebe o pacote de solicitação de E/S IRP_MN_FILTER_RESOURCE_REQUIREMENTS (IRP). MiniportFilterResourceRequirements pode alterar a afinidade de interrupção para cada mensagem MSI-X, adicionar recursos de interrupção de mensagem ou remover recursos de interrupção de mensagem se o driver se registrar para interrupções baseadas em linha na função MiniportInitializeEx . Para obter mais informações sobre como estabelecer uma política de afinidade de interrupção, consulte Filtragem de recursos MSI-X.

Quando o NDIS recebe uma solicitação remove-device do gerenciador PnP, o NDIS chama a função MiniportRemoveDevice do driver de miniport. A função MiniportRemoveDevice deve desfazer as operações executadas pela função MiniportAddDevice .