WSCInstallProviderAndChains, fonction (ws2spi.h)
Notes
Les fournisseurs de services en couches sont déconseillés. À compter de Windows 8 et Windows Server 2012, utilisez la plateforme de filtrage Windows. La fonction WSCInstallProviderAndChains installe le fournisseur de transport 32 bits spécifié ainsi que ses chaînes de protocole spécifiques dans la base de données de configuration système Winsock 2 sur un ordinateur 32 bits. Cette fonction garantit que les chaînes de protocole sont triées au début des informations de configuration du fournisseur de transport, ce qui garantit qu’un appel distinct à WSCWriteProviderOrder n’est pas nécessaire.
Syntaxe
int WSCInstallProviderAndChains(
[in] LPGUID lpProviderId,
[in] const LPWSTR lpszProviderDllPath,
[in] const LPWSTR lpszLspName,
[in] DWORD dwServiceFlags,
[in] LPWSAPROTOCOL_INFOW lpProtocolInfoList,
[in] DWORD dwNumberOfEntries,
[out, optional] LPDWORD lpdwCatalogEntryId,
[out] LPINT lpErrno
);
Paramètres
[in] lpProviderId
Pointeur vers un identificateur global unique (GUID) propre au fournisseur.
[in] lpszProviderDllPath
Pointeur vers une chaîne Unicode contenant le chemin de chargement de la DLL du fournisseur. Cette chaîne respecte les règles habituelles de résolution de chemin et peut contenir des chaînes d’environnement incorporées (%SystemRoot%, par exemple). Ces chaînes d’environnement sont développées chaque fois que Ws2_32.dll charge ensuite la DLL du fournisseur pour le compte d’une application. Une fois les chaînes d’environnement incorporées développées, Ws2_32.dll transmet la chaîne résultante à la fonction LoadLibrary pour charger le fournisseur en mémoire. Pour plus d’informations, consultez LoadLibrary.
[in] lpszLspName
Pointeur vers une chaîne Unicode qui contient le nom du fournisseur de sockets.
[in] dwServiceFlags
Indicateurs de service pour le type d’entrée de catalogue « factice » à créer.
Une entrée factice est une structure WSAProtocol_Info avec le membre ChainLen défini sur 0. L’entrée de catalogue LSP réelle référence l’ID de cette entrée factice dans son membre ProtocolChain .
Les indicateurs possibles qui peuvent être définis pour ce paramètre sont les suivants :
[in] lpProtocolInfoList
Pointeur vers un tableau de structures WSAProtocol_Info . Chaque structure définit un protocole, une famille d’adresses et un type de socket pris en charge par le fournisseur. Les membres de la structure WSAPROTOCOL_INFO examinés sont iProtocol, iAddressFamily et iSocketType.
[in] dwNumberOfEntries
Nombre d’entrées dans le tableau lpProtocolInfoList .
[out, optional] lpdwCatalogEntryId
Reçoit un pointeur vers l’entrée « factice » nouvellement installée pour le fournisseur de transport dans la base de données de configuration système Winsock 2. Cet ID est utilisé pour installer les entrées de catalogue pour le LSP.
[out] lpErrno
Pointeur qui reçoit un code d’erreur généré par l’appel en cas d’échec de la fonction.
Valeur retournée
Si
WSCInstallProviderAndChains réussit, il retourne zéro. Sinon, elle retourne SOCKET_ERROR et un code d’erreur spécifique est retourné dans le paramètre lpErrno .
Code d'erreur | Signification |
---|---|
Un ou plusieurs arguments ne se trouve pas dans une partie valide de l’espace d’adressage utilisateur. | |
Un ou plusieurs arguments ne sont pas valides. Cette erreur est retournée pour les conditions suivantes : le paramètre lpProviderId est **NULL**, le paramètre lpszProviderDllPath n’est pas valide ou la longueur du chemin d’accès est trop grande (**MAX_PATH** a été dépassé), le paramètre lpszLspName n’est pas valide ou la longueur du nom est trop grande (**WSAPROTOCOL_LEN** est dépassé), lpProtocolInfoList est défini sur non-**NULL** et dwNumberOfEntries Le paramètre est égal à zéro, un ID de fournisseur en double ou le nom du fournisseur de services en couches existe déjà dans le catalogue, ou une correspondance est introuvable pour le protocole, la famille d’adresses et le type de socket spécifiés. | |
L’installation d’un fournisseur est déjà en cours. | |
Les fonctionnalités requises du fournisseur sont manquantes. | |
La mémoire ne peut pas être allouée pour les mémoires tampons. | |
Une erreur non récupérable s’est produite. Cette erreur est retournée dans plusieurs conditions, notamment : le fournisseur est déjà installé, le paramètre lpProtocolInfoList était **NULL** et aucun fournisseur de base n’a été trouvé, la longueur maximale de la chaîne de protocole (**MAX_PROTOCOL_CHAIN**) a été atteinte, l’utilisateur n’a pas les privilèges administratifs requis pour écrire dans le Registre Winsock ou un échec s’est produit lors de la création ou de l’installation d’une entrée de catalogue. | |
Un appel système qui ne devrait jamais échouer a échoué. |
Remarques
WSCInstallProviderAndChains est une version améliorée de la fonction WSCInstallProvider de base utilisée pour installer un seul fournisseur de services de transport. Si un fournisseur de services en couches est installé, WSCInstallProviderAndChains doit être utilisé. WSCInstallProviderAndChains peut installer un protocole en couches et une ou plusieurs chaînes de protocoles avec un seul appel de fonction. Pour accomplir le même travail à l’aide de WSCInstallProvider , vous devez appeler plusieurs fonctions.
Winsock 2 prend en charge les protocoles en couches. Un protocole en couches est un protocole qui implémente uniquement des fonctions de communication de niveau supérieur tout en s’appuyant sur une pile de transport sous-jacente pour l’échange réel de données avec un point de terminaison distant. Un exemple de protocole en couches serait une couche de sécurité qui ajoute un protocole au processus d’établissement de la connexion afin d’effectuer l’authentification et d’établir un schéma de chiffrement mutuellement convenu. Un tel protocole de sécurité nécessite généralement les services d’un protocole de transport fiable sous-jacent, tel que TCP ou SPX. Le terme protocole de base fait référence à un protocole tel que TCP ou SPX qui est capable d’effectuer des communications de données avec un point de terminaison distant. Le terme protocole en couches est utilisé pour décrire un protocole qui ne peut pas être autonome. Une chaîne de protocole serait alors définie comme un ou plusieurs protocoles en couches, liés entre eux et ancrés par un protocole de base. Un protocole de base a le membre ChainLen de la structure WSAProtocol_Info défini sur BASE_PROTOCOL qui est défini sur 1. Un protocole en couches a le membre ChainLen de la structure WSAPROTOCOL_INFO définie sur LAYERED_PROTOCOL qui est défini sur zéro. Une chaîne de protocole a le membre ChainLen de la structure WSAPROTOCOL_INFO défini sur supérieur à 1.
Si lpProtocolInfoList a la valeur NULL, cette fonction crée des chaînes de protocoles où le fournisseur est superposé sur le protocole de base pour chaque type de protocole unique tel que défini par la famille d’adresses, le type de socket et le protocole. Cela élimine la création de toutes les entrées de fournisseur en double inaccessibles.
Si lpProtocolInfoList est défini sur une valeur non NULL , cette fonction crée des chaînes de protocoles en obtenant l’entrée la plus élevée dans les informations de configuration qui correspond à la famille d’adresses, au type de socket et au protocole de chaque élément du tableau fourni. Là encore, seuls la famille d’adresses, le type de socket et le protocole sont pris en compte ; tous les autres membres et doublons sont ignorés.
Une fois cet appel terminé, tous les appels suivants à WSAEnumProtocols ou WSCEnumProtocols retournent les entrées de chaîne de protocole nouvellement créées. N’oubliez pas que dans les environnements Windows, seules les instances de Ws_32.dll créées en appelant WSAStartup après la réussite de WSCInstallProviderAndChains incluent les nouvelles entrées lorsque WSAEnumProtocols et WSCEnumProtocols retournent.
En cas de réussite, WSCInstallProviderAndChains tente d’alerter toutes les applications intéressées qui se sont inscrites pour la notification de la modification en appelant WSAProviderConfigChange.
La fonction WSCInstallProviderAndChains ne peut être appelée que par un utilisateur connecté en tant que membre du groupe Administrateurs. Si WSCInstallProviderAndChains est appelé par un utilisateur qui n’est pas membre du groupe Administrateurs, l’appel de fonction échoue et WSANO_RECOVERY est retourné dans le paramètre lpErrno . Pour les ordinateurs exécutant Windows Vista ou Windows Server 2008, cette fonction peut également échouer en raison du contrôle de compte d’utilisateur (UAC). Si une application qui contient cette fonction est exécutée par un utilisateur connecté en tant que membre du groupe Administrateurs autre que l’administrateur intégré, cet appel échoue, sauf si l’application a été marquée dans le fichier manifeste avec un requestedExecutionLevel défini sur requireAdministrator. Si l’application sur Windows Vista ou Windows Server 2008 ne dispose pas de ce fichier manifeste, un utilisateur connecté en tant que membre du groupe Administrateurs autre que l’administrateur intégré doit ensuite exécuter l’application dans un interpréteur de commandes amélioré en tant qu’administrateur intégré (administrateur d’exécution) pour que cette fonction réussisse.
Toute installation de fichier ou configuration spécifique au fournisseur doit être effectuée par l’application appelante.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows Vista [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2008 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | ws2spi.h |
Bibliothèque | Ws2_32.lib |
DLL | Ws2_32.dll |
Voir aussi
Configuration et installation du transport