MINIPORT_RESTART función de devolución de llamada (ndis.h)
La función MiniportRestart inicia una solicitud de reinicio para un adaptador de miniporte que está en pausa.
Sintaxis
MINIPORT_RESTART MiniportRestart;
NDIS_STATUS MiniportRestart(
[in] NDIS_HANDLE MiniportAdapterContext,
PNDIS_MINIPORT_RESTART_PARAMETERS RestartParameters
)
{...}
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.
RestartParameters
Puntero a un NDIS_MINIPORT_RESTART_PARAMETERS estructura que define los parámetros de reinicio para el adaptador de minipuerto.
Valor devuelto
MiniportRestart devuelve uno de los siguientes valores de estado:
Código devuelto | Descripción |
---|---|
|
MiniportRestart reinició correctamente el flujo de datos de red a través del adaptador de minipuerto. |
|
MiniportRestart no completó la operación de reinicio y la operación se completará de forma asincrónica. El controlador de minipuerto debe llamar a la función NdisMRestartComplete cuando se complete la operación. |
|
Error de MiniportRestart debido a recursos insuficientes. |
|
No se aplica ninguno de los valores de estado anteriores. En esta situación, el controlador debe llamar a la función NdisWriteErrorLogEntry con parámetros que especifican el motivo del error. |
Comentarios
Un controlador especifica el punto de entrada MiniportRestart cuando llama al Función NdisMRegisterMiniportDriver .
El adaptador de miniporte especificado por el parámetro MiniportAdapterContext entra en el estado De reinicio cuando NDIS llama a MiniportRestart.
Cuando NDIS llama a MiniportRestart, un controlador de minipuerto:
- Debe completar las tareas necesarias para reanudar las operaciones de envío y recepción.
- Opcionalmente, modifica los atributos de reinicio especificados en el miembro RestartAttributes del objeto NDIS_MINIPORT_RESTART_PARAMETERS estructura. Si el puntero de RestartAttributes es NULL, el controlador de miniporte no debe modificar ni agregar a la lista de atributos de reinicio. Si el puntero de RestartAttributes no es NULL, apunta a una estructura NDIS_RESTART_ATTRIBUTES . Si un controlador de minipuerto no se reinicia, no debe modificar ningún atributo.
- Puede proporcionar indicaciones de estado con Función NdisMIndicateStatusEx .
- Debe controlar las solicitudes de estado en la función MiniportOidRequest .
- Puede agregar nuevos atributos específicos de medios a la lista de atributos de reinicio. En esta situación, el controlador de minipuerto debe asignar un nuevo NDIS_RESTART_ATTRIBUTES estructura, por ejemplo, con Función NdisAllocateMemoryWithTagPriority y proporcionan espacio de memoria para los nuevos atributos. Después de propagar los atributos de reinicio a controladores demasiado excesivos, NDIS libera la memoria de atributos para los controladores de minipuerto.
- Puede modificar los atributos específicos de los medios en la lista de atributos de reinicio. Si el controlador de minipuerto requiere más espacio de memoria, puede liberar una estructura de NDIS_RESTART_ATTRIBUTES con la función NdisFreeMemory y asignar una nueva estructura para contener la información modificada. Después de propagar los atributos de reinicio a controladores demasiado excesivos, NDIS libera la memoria de atributos para los controladores de minipuerto.
- Puede modificar cualquier campo del NDIS_RESTART_GENERAL_ATTRIBUTES estructura. Cuando NDIS proporciona un puntero distinto de NULL en el miembro RestartAttributes del NDIS_MINIPORT_RESTART_PARAMETERS estructura, la lista de atributos contiene una entrada en la que el miembro Oid de la estructura NDIS_RESTART_ATTRIBUTES es OID_GEN_MINIPORT_RESTART_ATTRIBUTES y el miembro Data contienen una estructura de NDIS_RESTART_GENERAL_ATTRIBUTES.
- Debe asegurarse de que NDIS_RESTART_GENERAL_ATTRIBUTES estructura contiene la información correcta. Para asegurarse de que la estructura de NDIS_RESTART_GENERAL_ATTRIBUTES contiene la información necesaria, primero debe determinar la versión de la estructura comprobando el miembro Revision en la estructura NDIS_OBJECT_HEADER especificada en el miembro Header de la estructura NDIS_RESTART_GENERAL_ATTRIBUTES.
Una vez que el controlador de minipuerto reinicie correctamente las operaciones de envío y recepción, debe completar la operación de reinicio. Si el controlador devuelve NDIS_STATUS_SUCCESS desde MiniportRestart, se completa la operación de reinicio. Si el controlador devuelve NDIS_STATUS_PENDING, puede continuar con las operaciones de reinicio. La operación de reinicio se completa después de que el controlador llame a la función NdisMRestartComplete . Una vez completada la operación de reinicio, el adaptador de minipuerto se encuentra en estado En ejecución .
El controlador de minipuerto puede reanudarse indicando los paquetes recibidos para el adaptador de miniporte inmediatamente después de que NDIS llame a MiniportRestart y antes de que el controlador llame a NdisMRestartComplete. El controlador de minipuerto debe estar listo para aceptar solicitudes de envío después de que el controlador complete la solicitud de reinicio.
Si el controlador de minipuerto no reinicia las operaciones de envío y recepción, el controlador debe devolver un estado de error adecuado de MiniportRestart. En esta situación, el controlador debe detener las operaciones de envío o recepción que se iniciaron y, a continuación, volver al estado Pausado .
NDIS llama a MiniportRestart en IRQL = PASSIVE_LEVEL.
Ejemplos
Para definir una función MiniportRestart , 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 MiniportRestart denominada "MyRestart", use el tipo MINIPORT_RESTART como se muestra en este ejemplo de código:
MINIPORT_RESTART MyRestart;
A continuación, implemente la función de la siguiente manera:
_Use_decl_annotations_
NDIS_STATUS
MyRestart(
NDIS_HANDLE MiniportAdapterContext,
PNDIS_MINIPORT_RESTART_PARAMETERS RestartParameters
)
{...}
El tipo de función MINIPORT_RESTART 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_RESTART 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 |