Función WSCWriteNameSpaceOrder32 (sporder.h)

La función WSCWriteNameSpaceOrder32 cambia el orden de los proveedores de espacios de nombres Windows Sockets (Winsock) 2 disponibles en un catálogo de 32 bits. 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.

Nota Esta llamada es una versión estricta de 32 bits de WSCWriteNameSpaceOrder para su uso en plataformas de 64 bits. Se proporciona para permitir que los procesos de 64 bits reordene el catálogo de proveedores de espacios de nombres de 32 bits.

 

Sintaxis

int WSCWriteNameSpaceOrder32(
  [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
Los parámetros de entrada no eran válidos, no se realizó ninguna acción.
WSANO_RECOVERY
Error irrecuperable. Este error se devuelve en varias condiciones, incluido lo siguiente: no se pudo abrir el registro winsock, 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 en plataformas de 64 bits en un catálogo de proveedores de espacios de nombres de 32 bits mediante la función WSCInstallNameSpace32 . El orden en que los proveedores de espacios de nombres de un catálogo de 32 bits se instalan inicialmente rige el orden predeterminado en el que se enumeran a través de WSCEnumNameSpaceProviders32. 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. 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. El orden de los proveedores de espacios de nombres en el catálogo nativo se puede cambiar mediante la función WSCWriteNameSpaceOrder .

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 (por ejemplo, NS_DNS), 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. Winsock 2 incluye el ws2_32.DLL en plataformas de 64 bits que exporta la función WSCWriteNameSpaceOrder32 para reordenar proveedores de espacios de nombres en el catálogo de proveedores de espacios de nombres de 32 bits. 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á tanto el protocolo como los proveedores de espacios de nombres instalados. El catálogo nativo de 64 bits se muestra primero seguido de los catálogos de proveedores de 32 bits (indicados con un 32 después de su nombre).

Un usuario que ha iniciado sesión como miembro del grupo Administradores solo puede llamar a WSCWriteNameSpaceOrder32. Si un usuario llama a WSCWriteNameSpaceOrder32 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 WSCWriteNameSpaceOrder32 :

  • 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 algún motivo (por ejemplo, permisos de usuario insuficientes).
  • Otro proceso, o subproceso, está llamando actualmente a la función .

Requisitos

   
Cliente mínimo compatible Windows Vista, Windows XP Professional x64 Edition [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008, Windows Server 2003 x64 Edition [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

WSCWriteNameSpaceOrder