Compartir a través de


MINIPORT_SHUTDOWN función de devolución de llamada (ndis.h)

NDIS llama a la función MiniportShutdownEx del controlador de miniporte cuando el sistema se apaga. Esta función coloca el miniporte en el estado Shutdown, donde no se puede producir ninguna otra devolución de llamada (incluido MiniportHaltEx). Para obtener más información sobre los estados del controlador de minipuerto, vea Miniport Adapter States and Operations.

Nota Debe declarar la función mediante el tipo MINIPORT_SHUTDOWN . Para obtener más información, consulte la sección Ejemplos siguientes.
 

Sintaxis

MINIPORT_SHUTDOWN MiniportShutdown;

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

Parámetros

[in] MiniportAdapterContext

Identificador de un área de contexto que el controlador de minipuerto asignó en su función MiniportInitializeEx . El controlador usa este área de contexto para mantener la información de estado de un adaptador de minipuerto.

[in] ShutdownAction

Motivo por el que NDIS llamó a la función shutdown. Valores válidos son:

NdisShutdownPowerOff

Indica que NDIS se llama MiniportShutdownEx porque el sistema se apaga.

NdisShutdownBugCheck

Indica que NDIS se llama MiniportShutdownEx debido a un error del sistema.

Valor devuelto

None

Observaciones

Un controlador especifica el punto de entrada MiniportShutdownEx cuando llama al Función NdisMRegisterMiniportDriver .

MiniportShutdownEx restaura el adaptador de minipuerto a un estado inicial conocido (el estado antes de NDIS llamó a la función MiniportInitializeEx del controlador de minipuerto para el adaptador de miniport). Esto garantiza que el adaptador de minipuerto se encuentra en un estado conocido y listo para reinicializarse cuando se reinicia el equipo después de que se produzca un apagado del sistema por cualquier motivo, incluido un error del sistema irrecuperable.

MiniportShutdownEx puede leer o escribir en puertos de E/S, espacio de E/S de dispositivo asignado a memoria o espacio de configuración específico del bus llamando a la función NdisMGetBusData o NdisMSetBusData para deshabilitar un motor DMA, deshabilitar interrupciones o restablecer el hardware a un estado conocido para que el hardware se pueda reiniciar de forma segura.

Si NDIS llama a MiniportShutdownEx debido a un error irrecuperable, el parámetro ShutdownAction se establece en NdisShutdownBugCheck y MiniportShutdownEx se ejecuta en un IRQL alto. En este caso, el controlador de minipuerto no debe llamar a ninguna función NdisXxx , excepto las funciones que se pueden llamar en cualquier IRQL.

Si NDIS llama a MiniportShutdownEx debido a un apagado iniciado por el usuario, MiniportShutdownEx se ejecuta en IRQL = PASSIVE_LEVEL y el controlador de minipuerto puede llamar a otras funciones de NdisXxx .

Si NDIS llama a MiniportShutdownEx debido a un error irrecuperable, el parámetro ShutdownAction se establece en NdisShutdownBugCheck y MiniportShutdownEx se ejecuta en un IRQL alto. En este caso, el controlador de minipuerto no debe llamar a ninguna función NdisXxx , excepto las funciones que se pueden llamar en cualquier IRQL. A partir de miniportes NDIS 6.30, NDIS no llama a MiniportShutdownEx durante un BugCheck a menos que la miniporte proporcione la marca NDIS_MINIPORT_ATTRIBUTES_REGISTER_BUGCHECK_CALLBACK en sus atributos de registro del adaptador.

Si el valor de ShutdownAction es NdisShutdownPowerOff, el controlador de minipuerto puede liberar opcionalmente sus recursos. Sin embargo, esto no es necesario ni se recomienda, porque el apagado del sistema hace que no sea necesario.

Si el valor de ShutdownAction es NdisShutdownBugCheck, el controlador de miniporte no debe liberar sus recursos.

Importante Si MiniportHaltEx produce un error del sistema, el controlador de minipuerto verá una llamada anidada a MiniportShutdownEx con ShutdownActionNdisShutdownBugCheck. En este caso, MiniportShutdownEx debe devolver inmediatamente sin realizar ningún trabajo.

 

Ejemplos

Para definir una función MiniportShutdownEx , primero debe proporcionar una declaración de función que identifique el tipo de función que va a definir. Windows proporciona un conjunto de tipos de función para controladores. Declarar una función mediante los tipos de función ayuda a Code Analysis for Drivers, Static Driver Verifier (SDV) y otras herramientas de comprobación a encontrar errores y es un requisito para escribir controladores para el sistema operativo Windows.

Por ejemplo, para definir una función MiniportShutdownEx denominada "MyShutdownEx", use el tipo de MINIPORT_SHUTDOWN como se muestra en este ejemplo de código:

MINIPORT_SHUTDOWN MyShutdownEx;

A continuación, implemente la función de la siguiente manera:

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

El tipo de función MINIPORT_SHUTDOWN se define en el archivo de encabezado Ndis.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación Use_decl_annotations a la definición de función. La anotación Use_decl_annotations garantiza que se usen las anotaciones que se aplican al tipo de función MINIPORT_SHUTDOWN en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, consulte Declaración de funciones mediante el uso de tipos de roles de función para controladores NDIS.

Para obtener información sobre Use_decl_annotations, consulte Anotación del comportamiento de la función.

Requisitos

Requisito Value
Cliente mínimo compatible Se admite en NDIS 6.0 y versiones posteriores.
Plataforma de destino Windows
Encabezado ndis.h (incluya Ndis.h)
IRQL Consulte la sección Comentarios.

Consulte también

Estados del adaptador de un controlador miniporte

Apagado del adaptador de miniporte

Estados y operaciones del adaptador de miniporte

MiniportInitializeEx

NdisMGetBusData

NdisMRegisterMiniportDriver

NdisMSetBusData