Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nota:
Esta función solo se usa para Driver Hot-Swap V1. Los nuevos controladores deben usar Driver Hot-Swap V2, que controla el registro de puntos de conexión automáticamente a través de la enumeración de puntos de conexión basada en el compilador.
La función IoRegisterDriverProxyEndpoints registra las funciones de punto de conexión en una extensión DriverProxy, lo que habilita la funcionalidad del controlador intercambiable en implementaciones de Driver Hot-Swap V1.
Syntax
NTSTATUS IoRegisterDriverProxyEndpoints(
PDRIVER_PROXY_EXTENSION DriverProxyExtension,
PDRIVER_PROXY_ENDPOINT_INFORMATION EndpointInfo,
ULONG Count,
PDRIVER_PROXY_REGISTER_CALLBACK PhasedCallback,
PVOID Context
);
Parámetros
DriverProxyExtension
[in] Puntero a la extensión DriverProxy a la que se registrarán los puntos de conexión. Esta extensión debe haberse creado con IoCreateDriverProxyExtension.
EndpointInfo
[dentro, fuera] Matriz de DRIVER_PROXY_ENDPOINT_INFORMATION estructuras que describen las funciones de punto de conexión que se van a registrar. La función puede modificar el contenido de esta matriz durante el registro.
Count
[in] Número de elementos de la matriz EndpointInfo .
PhasedCallback
[in, opcional] Puntero opcional a una función de DRIVER_PROXY_REGISTER_CALLBACK a la que se llamará en varias fases durante el proceso de registro para permitir operaciones específicas del controlador.
Context
[in, opcional] Puntero de contexto opcional que se pasará a la función PhasedCallback .
Valor devuelto
IoRegisterDriverProxyEndpoints devuelve uno de los siguientes valores NTSTATUS:
| Código de retorno | Description |
|---|---|
| STATUS_SUCCESS | Los puntos de conexión se registraron correctamente. |
| STATUS_INSUFFICIENT_RESOURCES | Memoria insuficiente estaba disponible para registrar los puntos de conexión. |
| STATUS_INVALID_PARAMETER_3 | Una o varias estructuras de información de punto de conexión intentaron sobrescribir una función existente con un recuento de parámetros diferente. |
| STATUS_UNSUCCESSFUL | La operación agota el tiempo de espera mientras espera a que se completen las llamadas de función existentes. |
Observaciones
Esta función establece la asignación entre las funciones del controlador original y sus contenedores intercambiables en caliente. Una vez registradas, las llamadas a las funciones originales se redirigirán a través del sistema DriverProxy, lo que permite reemplazar las funciones en tiempo de ejecución sin descargar el controlador.
Esta función realiza una operación compleja de varias fases para reemplazar de forma segura punteros de función mientras que las llamadas existentes pueden estar en curso. El proceso de registro incluye:
Fase de preprocesamiento: se llama a phasedCallback opcional con DriverProxyRegisterCallbackPreProcess para permitir la preparación del controlador.
Adquisición de la ejecución: la función espera a que se completen todas las llamadas existentes a los puntos de conexión registrados antes de continuar.
Fase de bloqueo de proxy: se llama a PhasedCallback con DriverProxyRegisterCallbackProxyStalled mientras se bloquean todas las llamadas.
Reemplazo de función: los punteros de función reales se actualizan de forma atómica.
Fase posterior al procesamiento: se llama a PhasedCallback con DriverProxyRegisterCallbackPostProcess para permitir la limpieza del controlador.
Si un punto de conexión tiene el mismo identificador que un punto de conexión registrado existente, el punto de conexión se reemplazará, pero solo si tiene el mismo recuento de parámetros.
Esta función sirve para fines duales en Driver Hot-Swap V1: registro inicial del punto de conexión (donde PhasedCallback debe ser NULL) y intercambio de puntos de conexión durante las operaciones de intercambio en caliente.
Se debe llamar a la función en PASSIVE_LEVEL, ya que puede que tenga que esperar a que se completen las llamadas de función existentes.
Requisitos
| Requirement | Importancia |
|---|---|
| de la plataforma de destino de | Universal |
| Header | wdm.h |
| Library | NtosKrnl.lib |
| irQL | PASSIVE_LEVEL |
Consulte también
DRIVER_PROXY_ENDPOINT_INFORMATION