Compartir a través de


Función WSCWriteNameSpaceOrder (sporder.h)

La función WSCWriteNameSpaceOrder cambia el orden de los proveedores de espacios de nombres Windows Sockets (Winsock) 2 disponibles. El orden de los proveedores de espacios de nombres determina la prioridad del espacio de nombres cuando se enumeran o consultan para la resolución de nombres.

Sintaxis

int WSCWriteNameSpaceOrder(
  [in] LPGUID lpProviderId,
  [in] DWORD  dwNumberOfEntries
);

Parámetros

[in] lpProviderId

Matriz de elementos NSProviderId tal y como se encuentra en la estructura WSANAMESPACE_INFO . El orden de los elementos NSProviderId es el nuevo orden de prioridad para los proveedores de espacios de nombres.

[in] dwNumberOfEntries

Número de elementos de la matriz NSProviderId .

Valor devuelto

La función devuelve ERROR_SUCCESS (cero) si la rutina se realiza correctamente. De lo contrario, devuelve un código de error específico.

Código de error Significado
WSAEFAULT
La matriz NSProviderId no está totalmente contenida en el espacio de direcciones del proceso.
WSAEINVAL
Uno o varios de los argumentos son parámetros de entrada no válidos, no se realizó ninguna acción.
WSANO_RECOVERY
Error irrecuperable. Este error se devuelve en varias condiciones, incluidos los siguientes: el usuario carece de los privilegios administrativos necesarios para escribir en el registro winsock u otra aplicación está escribiendo actualmente en el catálogo de proveedores de espacios de nombres.
WSASYSCALLFAILURE
No se pudo realizar una llamada del sistema que nunca debería producir un error.
WSATRY_AGAIN
Otro subproceso o proceso llama a la función.
WSA_NOT_ENOUGH_MEMORY
Memoria insuficiente estaba disponible para realizar la operación.
(otro)
La función puede devolver cualquier código de error del Registro.

Comentarios

Los proveedores de espacios de nombres se instalan mediante la función WSCInstallNameSpace . El orden en que se instalan inicialmente los proveedores de espacios de nombres rige el orden predeterminado en el que se enumeran a través de WSAEnumNameSpaceProviders. Lo más importante es que este orden también rige el orden en el que se consideran proveedores de espacios de nombres cuando un cliente solicita la resolución de nombres. El orden de los proveedores de espacios de nombres se puede cambiar mediante la función WSCWriteNameSpaceOrder . En plataformas de 64 bits, se proporciona la función WSCWriteNameSpaceOrder32 para permitir que los procesos de 64 bits cambien el orden de los proveedores de espacios de nombres en el catálogo de proveedores de espacios de nombres de 32 bits. En plataformas de 64 bits, los proveedores de espacios de nombres se instalan en el catálogo de proveedores de espacios de nombres de 32 bits mediante la función WSCInstallNameSpace32 .

El catálogo del proveedor del espacio de nombres actual se almacena en el registro en la siguiente clave del Registro: HKEY_LOCAL_MACHINE\\ SystemCurrent Control Set\Services\Winsock2\Parameters\NameSpace_Catalog5

Una solicitud de cliente para la resolución de nombres usa las rutinas WSALookupServiceBegin, WSALookupServiceNext y WSALookupServiceEnd . El miembro dwNameSpace de la estructura WSAQUERYSET que se pasa a WSALookupServiceBegin se establece en el identificador de un único espacio de nombres (NS_DNS, por ejemplo) en el que restringir la búsqueda o NS_ALL para incluir todos los espacios de nombres. Si varios proveedores de espacios de nombres admiten un espacio de nombres específico (NS_DNS, por ejemplo), los resultados de todos los proveedores de espacios de nombres que coincidan con el dwNameSpace solicitado se devuelven a menos que el miembro lpNSProviderId esté establecido en un proveedor de espacios de nombres específico. Los resultados de todos los proveedores de espacios de nombres se devuelven si se especifica NS_ALL para el miembro dwNameSpace . El orden en que se devuelven los resultados depende del orden del proveedor del espacio de nombres en el catálogo.

Windows SDK incluye una aplicación denominada SpOrder.exe que permite mostrar el catálogo de proveedores de espacios de nombres instalados. Windows Sockets 2 incluye el ws2_32.dll que exporta la función WSCWriteNameSpaceOrder para reordenar proveedores de espacios de nombres en el catálogo. Esta interfaz se puede importar mediante la vinculación con WS2_32.lib. En el caso de los equipos que se ejecutan en Windows XP con Service Pack 2 (SP2) y Windows Server 2003 con Service Pack 1 (SP1) y versiones posteriores, el comando denetsh.exe winsock show catalog mostrará los proveedores de protocolos y espacios de nombres instalados en el sistema.

WSCWriteNameSpaceOrder solo puede llamarlo un usuario que inició sesión como miembro del grupo Administradores. Si un usuario llama a WSCWriteNameSpaceOrder que no es miembro del grupo Administradores, se producirá un error en la llamada a la función y se devolverá WSANO_RECOVERY en el parámetro lpErrno .

En el caso de los equipos que se ejecutan en Windows Vista y Windows Vista, esta función también puede producir un error debido al control de cuentas de usuario (UAC). Si un usuario que ha iniciado sesión como miembro del grupo Administradores que contiene esta función ejecuta esta función, se producirá un error en esta llamada a menos que la aplicación se haya marcado en el archivo de manifiesto con un valor requestedExecutionLevel establecido en requireAdministrator. Si la aplicación en Windows Vista y Windows Vista carece de esta configuración en el archivo de manifiesto usado para compilar el archivo ejecutable, un usuario que inició sesión como miembro del grupo Administradores distinto del administrador debe ejecutar la aplicación en un shell mejorado como administrador (administrador de runas) para que esta función se realice correctamente.

En la lista siguiente se describen los escenarios en los que se podría producir un error en la función WSCWriteNameSpaceOrder :

  • El parámetro dwNumberOfEntries no es igual al número de proveedores de espacios de nombres registrados.
  • La matriz NSProviderId contiene un identificador de proveedor de espacio de nombres no válido.
  • La matriz NSProviderId no contiene todos los identificadores de proveedor de espacios de nombres válidos exactamente una vez.
  • La función no puede acceder al Registro (por ejemplo, permisos de usuario insuficientes).
  • Otro proceso (o subproceso) está llamando actualmente a la función .

Requisitos

   
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado sporder.h
Library Sporder.lib
Archivo DLL Ws2_32.dll

Consulte también

WSAEnumNameSpaceProviders

WSANAMESPACE_INFO

WSAQUERYSET

WSCEnumNameSpaceProviders32

WSCInstallNameSpace

WSCInstallNameSpace32

WSCWriteNameSpaceOrder32