Partager via


IoRegisterDriverProxyEndpoints, fonction (wdm.h)

Note

Cette fonction est utilisée uniquement pour Driver Hot-Swap V1. Les nouveaux pilotes doivent utiliser driver Hot-Swap V2, qui gère automatiquement l’inscription des points de terminaison via l’énumération de point de terminaison basée sur le compilateur.

La fonction IoRegisterDriverProxyEndpoints inscrit les fonctions de point de terminaison dans une extension DriverProxy, ce qui permet d’activer la fonctionnalité de pilote permutable à chaud dans les implémentations driver Hot-Swap V1.

Syntaxe

NTSTATUS IoRegisterDriverProxyEndpoints(
  PDRIVER_PROXY_EXTENSION            DriverProxyExtension,
  PDRIVER_PROXY_ENDPOINT_INFORMATION EndpointInfo,
  ULONG                              Count,
  PDRIVER_PROXY_REGISTER_CALLBACK    PhasedCallback,
  PVOID                              Context
);

Paramètres

DriverProxyExtension

[in] Pointeur vers l’extension DriverProxy à laquelle les points de terminaison seront inscrits. Cette extension doit avoir été créée avec IoCreateDriverProxyExtension.

EndpointInfo

[in, out] Tableau de structures DRIVER_PROXY_ENDPOINT_INFORMATION qui décrivent les fonctions de point de terminaison à inscrire. La fonction peut modifier le contenu de ce tableau pendant l’inscription.

Count

[in] Nombre d’éléments dans le tableau EndpointInfo .

PhasedCallback

[in, facultatif] Pointeur facultatif vers une fonction DRIVER_PROXY_REGISTER_CALLBACK qui sera appelée à différentes phases pendant le processus d’inscription pour autoriser les opérations spécifiques au pilote.

Context

[in, facultatif] Pointeur de contexte facultatif qui sera passé à la fonction PhasedCallback .

Valeur retournée

IoRegisterDriverProxyEndpoints retourne l’une des valeurs NTSTATUS suivantes :

Code de retour Descriptif
STATUS_SUCCESS Les points de terminaison ont été correctement inscrits.
STATUS_INSUFFICIENT_RESOURCES La mémoire insuffisante était disponible pour inscrire les points de terminaison.
STATUS_INVALID_PARAMETER_3 Une ou plusieurs structures d’informations de point de terminaison ont tenté de remplacer une fonction existante avec un nombre de paramètres différent.
STATUS_UNSUCCESSFUL L’opération a expiré en attendant que les appels de fonction existants se terminent.

Remarques

Cette fonction établit le mappage entre les fonctions de pilote d’origine et leurs wrappers permutables à chaud. Une fois inscrites, les appels aux fonctions d’origine sont redirigés via le système DriverProxy, ce qui permet aux fonctions d’être remplacées au moment de l’exécution sans décharger le pilote.

Cette fonction effectue une opération multiphase complexe pour remplacer en toute sécurité les pointeurs de fonction alors que les appels existants peuvent être en cours. Le processus d’inscription comprend les éléments suivants :

  • Phase de prétraitement : l’option PhasedCallback facultative est appelée avec DriverProxyRegisterCallbackPreProcess pour permettre la préparation du pilote.

  • Acquisition d’exécution : la fonction attend que tous les appels existants aux points de terminaison inscrits se terminent avant de continuer.

  • Phase de blocage du proxy : La phase PhasedCallback est appelée avec DriverProxyRegisterCallbackProxyS total alors que tous les appels sont bloqués.

  • Remplacement de la fonction : les pointeurs de fonction réels sont mis à jour atomiquement.

  • Phase de post-traitement : PhasedCallback est appelé avec DriverProxyRegisterCallbackPostProcess pour permettre le nettoyage du pilote.

Si un point de terminaison a le même ID qu’un point de terminaison inscrit existant, le point de terminaison est remplacé, mais uniquement s’il a le même nombre de paramètres.

Cette fonction sert à double usage dans driver Hot-Swap V1 : inscription initiale du point de terminaison (où PhasedCallback doit être NULL) et échange de point de terminaison pendant les opérations d’échange à chaud.

La fonction doit être appelée à PASSIVE_LEVEL, car elle peut avoir besoin d’attendre la fin des appels de fonction existants.

Spécifications

Requirement Valeur
plateforme cible Universal
Header wdm.h
Library NtosKrnl.lib
IRQL PASSIVE_LEVEL

Voir aussi

IoCreateDriverProxyExtension

DRIVER_PROXY_ENDPOINT_INFORMATION

DRIVER_PROXY_REGISTER_CALLBACK

IoGetDriverProxyWrapperFromEndpoint