WSCWriteNameSpaceOrder32, fonction (sporder.h)
La fonction WSCWriteNameSpaceOrder32 modifie l’ordre des fournisseurs d’espaces de noms Windows Sockets (Winsock) 2 disponibles dans un catalogue 32 bits. L’ordre des fournisseurs d’espaces de noms détermine la priorité de l’espace de noms lorsqu’il est énuméré ou interrogé pour la résolution de noms.
Syntaxe
int WSCWriteNameSpaceOrder32(
[in] LPGUID lpProviderId,
[in] DWORD dwNumberOfEntries
);
Paramètres
[in] lpProviderId
Tableau d’éléments NSProviderId tels qu’ils se trouvent dans la structure WSANAMESPACE_INFO . L’ordre des éléments NSProviderId est le nouvel ordre de priorité pour les fournisseurs d’espaces de noms.
[in] dwNumberOfEntries
Nombre d’éléments dans le tableau NSProviderId .
Valeur retournée
La fonction retourne ERROR_SUCCESS (zéro) si la routine réussit. Sinon, elle retourne un code d’erreur spécifique.
Code d'erreur | Signification |
---|---|
Le tableau NSProviderId n’est pas entièrement contenu dans l’espace d’adressage du processus. | |
Les paramètres d’entrée n’étaient pas valides, aucune action n’a été effectuée. | |
Une erreur non récupérable s’est produite. Cette erreur est retournée dans plusieurs conditions, notamment les suivantes : impossible d’ouvrir le registre Winsock, l’utilisateur n’a pas les privilèges d’administration requis pour écrire dans le registre Winsock, ou une autre application écrit actuellement dans le catalogue du fournisseur d’espaces de noms. | |
Un appel système qui ne devrait jamais échouer a échoué. | |
La fonction est appelée par un autre thread ou processus. | |
La mémoire disponible était insuffisante pour effectuer l’opération. | |
|
La fonction peut retourner n’importe quel code d’erreur de Registre. |
Remarques
Les fournisseurs d’espaces de noms sont installés sur des plateformes 64 bits dans un catalogue de fournisseurs d’espaces de noms 32 bits à l’aide de la fonction WSCInstallNameSpace32 . L’ordre dans lequel les fournisseurs d’espaces de noms d’un catalogue 32 bits sont initialement installés régit l’ordre par défaut dans lequel ils sont énumérés via WSCEnumNameSpaceProviders32. Plus important encore, cet ordre régit également l’ordre dans lequel les fournisseurs d’espaces de noms sont pris en compte lorsqu’un client demande la résolution de noms. Sur les plateformes 64 bits, la fonction WSCWriteNameSpaceOrder32 est fournie pour permettre aux processus 64 bits de modifier l’ordre des fournisseurs d’espaces de noms dans le catalogue des fournisseurs d’espaces de noms 32 bits. L’ordre des fournisseurs d’espaces de noms dans le catalogue natif peut être modifié à l’aide de la fonction WSCWriteNameSpaceOrder .
Le catalogue du fournisseur d’espaces de noms actuel est stocké dans le Registre sous la clé de Registre suivante : HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Winsock2\Parameters\NameSpace_Catalog5
Une demande cliente de résolution de noms utilise les routines WSALookupServiceBegin, WSALookupServiceNext et WSALookupServiceEnd . Le membre dwNameSpace de la structure WSAQUERYSET passée à WSALookupServiceBegin est défini sur l’identificateur d’un espace de noms unique (NS_DNS, par exemple) dans lequel limiter la recherche, ou NS_ALL inclure tous les espaces de noms. Si plusieurs fournisseurs d’espaces de noms prennent en charge un espace de noms spécifique (par exemple, NS_DNS), les résultats de tous les fournisseurs d’espaces de noms qui correspondent à la demande dwNameSpace sont retournés, sauf si le membre lpNSProviderId est défini sur un fournisseur d’espace de noms spécifique. Les résultats de tous les fournisseurs d’espaces de noms sont retournés si NS_ALL est spécifié pour le membre dwNameSpace . L’ordre dans lequel les résultats sont retournés dépend de l’ordre du fournisseur d’espaces de noms dans le catalogue.
Le Kit de développement logiciel (SDK) Windows inclut une application appelée SpOrder.exe qui permet d’afficher le catalogue des fournisseurs d’espaces de noms installés. Winsock 2 inclut la ws2_32.DLL sur les plateformes 64 bits qui exporte la fonction WSCWriteNameSpaceOrder32 pour réorganiser les fournisseurs d’espaces de noms dans le catalogue des fournisseurs d’espaces de noms 32 bits. Cette interface peut être importée en établissant une liaison avec WS2_32.lib. Pour les ordinateurs exécutant Windows XP avec Service Pack 2 (SP2) et Windows Server 2003 avec Service Pack 1 (SP1) et versions ultérieures, la commande netsh.exe winsock show catalog affiche les fournisseurs de protocole et d’espace de noms installés. Le catalogue 64 bits natif est d’abord affiché, suivi des catalogues de fournisseurs 32 bits (indiqués par un 32 après leur nom).
WSCWriteNameSpaceOrder32 ne peut être appelé que par un utilisateur connecté en tant que membre du groupe Administrateurs. Si WSCWriteNameSpaceOrder32 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 s’exécutant sur Windows Vista et Windows Vista, 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, 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 et Windows Vista ne dispose pas de ce paramètre dans le fichier manifeste utilisé pour générer le fichier exécutable, un utilisateur connecté en tant que membre du groupe Administrateurs autre que l’administrateur doit alors exécuter l’application dans un interpréteur de commandes amélioré en tant qu’administrateur (administrateur d’exécution) pour que cette fonction réussisse.
La liste suivante décrit les scénarios dans lesquels la fonction WSCWriteNameSpaceOrder32 peut échouer :
- Le paramètre dwNumberOfEntries n’est pas égal au nombre de fournisseurs d’espaces de noms inscrits.
- Le tableau NSProviderId contient un identificateur de fournisseur d’espace de noms non valide.
- Le tableau NSProviderId ne contient pas tous les identificateurs de fournisseur d’espaces de noms valides une seule fois.
- La fonction n’est pas en mesure d’accéder au Registre pour une raison quelconque (autorisations utilisateur insuffisantes, par exemple).
- Un autre processus, ou thread, appelle actuellement la fonction.
Configuration requise
Client minimal pris en charge | Windows Vista, Windows XP Professionnel Édition x64 [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2008, Windows Server 2003 Édition x64 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | sporder.h |
Bibliothèque | Sporder.lib |
DLL | Ws2_32.dll |