MINIPORT_HALT función de devolución de llamada (ndis.h)
NDIS llama a la función MiniportHaltEx del controlador de miniporte para liberar recursos cuando se quita un adaptador de miniporte y para detener el hardware. Esta función coloca el miniporte en el estado Detenido, donde no se puede producir ninguna otra devolución de llamada (incluido MiniportShutdownEx). Para obtener más información sobre los estados del controlador de minipuerto, vea Miniport Adapter States and Operations.
Sintaxis
MINIPORT_HALT MiniportHalt;
void MiniportHalt(
[in] NDIS_HANDLE MiniportAdapterContext,
[in] NDIS_HALT_ACTION HaltAction
)
{...}
Parámetros
[in] MiniportAdapterContext
Identificador de un área de contexto que el controlador de minipuerto asignó en su función MiniportInitializeEx . El controlador de minipuerto usa este área de contexto para mantener la información de estado de un adaptador de minipuerto.
[in] HaltAction
Motivo para detener el adaptador de minipuerto. Puede ser uno de los siguientes valores:
NdisHaltDeviceDisabled
NDIS detiene el adaptador de minipuerto en respuesta a un mensaje de eliminación de Plug and Play (PnP).
NdisHaltDeviceInstanceDeInitialized
NDIS detiene el adaptador de minipuerto en respuesta a un controlador intermedio que llama al Función NdisIMDeInitializeDeviceInstance .
NdisHaltDevicePoweredDown
NDIS detiene el adaptador de minipuerto porque el sistema va a estar en estado de suspensión.
NdisHaltDeviceSurpriseRemoved
El adaptador de miniporte ha sido sorprendido quitado y el hardware no está presente.
NdisHaltDeviceFailed
El adaptador de minipuerto se está quitando debido a un error de hardware. El controlador de minipuerto llamó a la función NdisMRemoveMiniport o un controlador de bus no enciende la NIC en la reanudación.
NdisHaltDeviceInitializationFailed
NDIS no pudo inicializar el adaptador de minipuerto por un motivo desconocido después de que la función MiniportInitializeEx se completara correctamente.
NdisHaltDeviceStopped
NDIS detiene el adaptador de minipuerto en respuesta a un mensaje de dispositivo de detención de PnP.
Valor devuelto
None
Observaciones
Un controlador especifica el punto de entrada MiniportHaltEx cuando llama al Función NdisMRegisterMiniportDriver .
NDIS puede llamar a MiniportHaltEx en cualquier momento después de que la función MiniportInitializeEx de un controlador se devuelva correctamente. Si el controlador controla una NIC física, MiniportHaltEx debe detener la NIC. Si un controlador intermedio de NDIS llama al La función NdisIMDeInitializeDeviceInstance , NDIS llama a la función MiniportHaltEx para el dispositivo virtual del controlador.
MiniportHaltEx debe liberar todos los recursos asignados en MiniportInitializeEx para un dispositivo. MiniportHaltEx también libera cualquier otro recurso que el controlador haya asignado en operaciones posteriores para ese dispositivo. El conductor debe llamar a las funciones NdisXxx recíprocas con las que asignó originalmente los recursos. Como regla general, una función MiniportHaltEx debe llamar a las funciones NdisXxx recíprocas en orden inverso a las llamadas realizadas por el controlador desde MiniportInitializeEx.
Si una NIC genera interrupciones, la función MiniportHaltEx de un controlador de minipuerto puede ser adelantada por la función MiniportInterrupt del controlador hasta que llame a MiniportHaltEx a la función MiniportHaltEx . Devuelve la función NdisMDeregisterInterruptEx . La función MiniportHaltEx de este controlador debe deshabilitar las interrupciones y llamar a NdisMDeregisterInterruptEx lo antes posible. Tenga en cuenta que un controlador puede seguir recibiendo interrupciones hasta que Devuelve NdisMDeregisterInterruptEx . NdisMDeregisterInterruptEx no vuelve hasta que el controlador finaliza todos los DPC programados (consulte la función MiniportInterruptDPC para obtener más información).
Si el controlador tiene una función NetTimerCallback asociada a un objeto de temporizador que podría estar en la cola del temporizador del sistema, MiniportHaltEx debe llamar a la función NdisCancelTimerObject . Si se produce un error en NdisCancelTimerObject , el temporizador podría haberse activado. En este caso, el controlador debe esperar a que se complete la función del temporizador antes de que el controlador vuelva de MiniportHaltEx.
NDIS no llama a MiniportHaltEx si hay solicitudes de OID pendientes o solicitudes de envío. NDIS no envía más solicitudes para el dispositivo afectado después de que NDIS llame a MiniportHaltEx.
Si el controlador debe esperar a que se complete cualquier operación, MiniportHaltEx puede usar la función NdisWaitEvent o la función NdisMSleep .
NDIS llama a MiniportHaltEx en IRQL = PASSIVE_LEVEL.
Ejemplos
Para definir una función MiniportHaltEx , primero debe proporcionar una declaración de función que identifique el tipo de función que está definiendo. 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 MiniportHaltEx denominada "MyHaltEx", use el tipo MINIPORT_HALT como se muestra en este ejemplo de código:
MINIPORT_HALT MyHaltEx;
A continuación, implemente la función de la siguiente manera:
_Use_decl_annotations_
VOID
MyHaltEx(
NDIS_HANDLE MiniportAdapterContext,
NDIS_HALT_ACTION HaltAction
)
{...}
El tipo de función MINIPORT_HALT 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_HALT 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 | PASSIVE_LEVEL |
Reglas de cumplimiento de DDI | WlanAssociation, WlanConnectionRoaming, WlanDisassociation, WlanTimedAssociation, WlanTimedConnectionRoaming, WlanTimedConnectRequest, WlanTimedLinkQuality, WlanTimedScan |
Consulte también
Estados del adaptador de un controlador miniporte
Detener un adaptador de minipuerto
Estados y operaciones del adaptador de miniporte
Funciones de restablecimiento y detención del controlador de miniporte
MiniportReturnNetBufferLists NdisIMDeInitializeDeviceInstance