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.
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 |
---|---|
La matriz NSProviderId no está totalmente contenida en el espacio de direcciones del proceso. | |
Los parámetros de entrada no eran válidos, no se realizó ninguna acción. | |
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. | |
No se pudo realizar una llamada del sistema que nunca debería producir un error. | |
Otro subproceso o proceso llama a la función. | |
Memoria insuficiente estaba disponible para realizar la operación. | |
|
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 |