WSCWriteNameSpaceOrder, fonction (sporder.h)
La fonction WSCWriteNameSpaceOrder modifie l’ordre des fournisseurs d’espaces de noms Windows Sockets (Winsock) 2 disponibles. 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 WSCWriteNameSpaceOrder(
[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, il 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. | |
Un ou plusieurs des arguments sont les paramètres d’entrée n’étaient pas valides, aucune action n’a été effectuée. | |
Une erreur irrécupérable s’est produite. Cette erreur est retournée dans plusieurs conditions, notamment : l’utilisateur n’a pas les privilèges d’administration nécessaires 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 doit 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 du Registre. |
Remarques
Les fournisseurs d’espaces de noms sont installés à l’aide de la fonction WSCInstallNameSpace . L’ordre dans lequel les fournisseurs d’espaces de noms sont initialement installés régit l’ordre par défaut dans lequel ils sont énumérés via WSAEnumNameSpaceProviders. 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. L’ordre des fournisseurs d’espaces de noms peut être modifié à l’aide de la fonction WSCWriteNameSpaceOrder . 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. Sur les plateformes 64 bits, les fournisseurs d’espaces de noms sont installés dans le catalogue des fournisseurs d’espaces de noms 32 bits à l’aide de la fonction WSCInstallNameSpace32 .
Le catalogue actuel du fournisseur d’espaces de noms 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 (NS_DNS, par exemple), les résultats de tous les fournisseurs d’espaces de noms qui correspondent au dwNameSpace demandé 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. Windows Sockets 2 inclut la ws2_32.dll qui exporte la fonction WSCWriteNameSpaceOrder pour réorganiser les fournisseurs d’espaces de noms dans le catalogue. 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 à la fois les fournisseurs de protocole et d’espace de noms installés sur le système.
WSCWriteNameSpaceOrder ne peut être appelé que par un utilisateur connecté en tant que membre du groupe Administrateurs. Si WSCWriteNameSpaceOrder 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 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 élément 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 WSCWriteNameSpaceOrder 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 ne peut pas accéder au Registre (par exemple, autorisations utilisateur insuffisantes).
- Un autre processus (ou thread) appelle actuellement la fonction.
Configuration requise
Client minimal pris en charge | Windows 2000 Professionnel [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows 2000 Server [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | sporder.h |
Bibliothèque | Sporder.lib |
DLL | Ws2_32.dll |