Función de devolución de llamada LPNSPSETSERVICE (ws2spi.h)

La función NSPSetService registra o anula el registro de una instancia de servicio dentro de un espacio de nombres.

Sintaxis

LPNSPSETSERVICE Lpnspsetservice;

INT Lpnspsetservice(
  [in] LPGUID lpProviderId,
  [in] LPWSASERVICECLASSINFOW lpServiceClassInfo,
  [in] LPWSAQUERYSETW lpqsRegInfo,
  [in] WSAESETSERVICEOP essOperation,
  [in] DWORD dwControlFlags
)
{...}

Parámetros

[in] lpProviderId

Puntero al GUID del proveedor de espacios de nombres específico en el que se registra el servicio.

[in] lpServiceClassInfo

Información del esquema de la clase de servicio.

[in] lpqsRegInfo

Información de la propiedad que se va a actualizar tras el registro.

[in] essOperation

Tipo de operación solicitada.

Este parámetro puede ser uno de los valores del tipo de enumeración WSAESETSERVICEOP definido en el archivo de encabezado Winsock2.h .

Valor Significado
RNRSERVICE_REGISTER
0
Registre el servicio. Para el espacio de nombres del Protocolo de publicidad de servicios (SAP) usado en un entorno de NetWare, esto significa enviar una difusión periódica. Se trata de un NOP para el espacio de nombres del Sistema de nombres de dominio (DNS). En el caso de los almacenes de datos persistentes, esto significa actualizar la información de dirección.
RNRSERVICE_DEREGISTER
1
Anule el registro del servicio. Para el espacio de nombres de SAP, esto significa dejar de enviar la difusión periódica. Se trata de un NOP para el espacio de nombres DNS. En el caso de los almacenes de datos persistentes, esto significa eliminar la información de dirección.
RNRSERVICE_DELETE
2
Elimine el servicio del nombre dinámico y los espacios persistentes. En el caso de los servicios representados por varias estructuras de CSADDR_INFO (con la marca SERVICE_MULTIPLE), solo se eliminará la dirección proporcionada y debe coincidir exactamente con la estructura **CSADDR_INFO** correspondiente proporcionada cuando se registró el servicio.

[in] dwControlFlags

Conjunto de marcas que controla la operación de servicio solicitada.

Los valores posibles para este parámetro se definen en el archivo de encabezado Winsock2.h .

Valor Significado
SERVICE_MULTIPLE
0x00000001
Controlar el ámbito de la operación.

Cuando se establece este valor, la acción solo se realiza en el conjunto de direcciones especificado. Una operación de registro no invalida las direcciones existentes y una operación de registro solo invalida el conjunto de direcciones especificado.

Cuando este valor no está presente, las direcciones de servicio se administran como un grupo. Un registro o anulación del registro invalida todas las direcciones existentes antes de agregar el conjunto de direcciones especificado.

Valor devuelto

La función debe devolver NO_ERROR (cero) si la rutina se realiza correctamente. Debe devolver SOCKET_ERROR (–1) si se produce un error en la rutina y debe establecer el código de error adecuado mediante WSASetLastError.

Código de error Significado
WSAEACCES
La rutina de llamada no tiene privilegios suficientes para instalar el servicio.
WSA_NOT_ENOUGH_MEMORY
No hay suficiente memoria disponible para realizar esta operación.
WSAEINVAL
Uno o varios parámetros no eran válidos o faltaban para este proveedor.
WSAEOPNOTSUPP
La operación no es compatible. Este error se devuelve si el proveedor de espacios de nombres no implementa esta función.
WSASERVICE_NOT_FOUND
El servicio es desconocido. El servicio no se encuentra en el espacio de nombres especificado.

Comentarios

En la tabla siguiente se enumeran los valores disponibles para essOperation y dwControlFlags.

Operación Marcas El servicio ya existe El servicio no existe
**RNRSERVICE_REGISTER** None Sobrescribe el objeto . Usa solo las direcciones especificadas. El objeto es REGISTERED. Crea un nuevo objeto. Usa solo las direcciones especificadas. El objeto es REGISTERED.
**RNRSERVICE_REGISTER** **SERVICE_MULTIPLE** Novedades objeto . Agrega nuevas direcciones al conjunto existente. El objeto es REGISTERED. Crea un nuevo objeto. Usa todas las direcciones especificadas. El objeto es REGISTERED.
**RNRSERVICE_DEREGISTER** None Quita todas las direcciones, pero no quita el objeto del espacio de nombres. El objeto es DEREGISTERED. WSASERVICE_NOT_FOUND
**RNRSERVICE_DEREGISTER** **SERVICE_MULTIPLE** Novedades objeto . Quita solo las direcciones especificadas. Solo marque el objeto como DEREGISTERED si no hay ninguna dirección presente. No quita del espacio de nombres . WSASERVICE_NOT_FOUND
**RNRSERVICE_DELETE** None Quita el objeto del espacio de nombres . WSASERVICE_NOT_FOUND
**RNRSERVICE_DELETE** **SERVICE_MULTIPLE** Quita solo las direcciones especificadas. Solo quita el objeto del espacio de nombres si no quedan direcciones. WSASERVICE_NOT_FOUND
 

Cuando el parámetro dwControlFlags se establece en SERVICE_MULTIPLE, esto permite a una aplicación administrar sus direcciones de forma independiente. Esto resulta útil cuando la aplicación debe administrar sus protocolos individualmente o cuando el servicio reside en más de un equipo. Por ejemplo, cuando un servicio usa más de un protocolo, un socket de escucha puede anularse, pero los demás sockets permanecen operativos. En este ejemplo, el servicio podría anular el registro de la dirección anulada sin afectar a las demás direcciones.

Al usar SERVICE_MULTIPLE, una aplicación no debe permitir que las direcciones antiguas permanezcan en el objeto . Esto puede ocurrir si la aplicación se anula sin emitir una solicitud de RNRSERVICE_DEREGISTER . Cuando se registra un servicio, debe almacenar sus direcciones. En su siguiente llamada, el servicio debe anular explícitamente el registro de estas direcciones antiguas antes de registrar nuevas direcciones.

Propiedades del servicio

En la tabla siguiente se enumeran los nombres de miembros de WSAQUERYSET y se describe cómo se representan los datos de propiedad de servicio. Los miembros etiquetados como (opcional) se pueden proporcionar con un puntero nulo.
Nombre del miembro WSAQUERYSET Descripción de la propiedad de servicio
**dwSize** Establezca en sizeof(WSAQUERYSET). Se trata de un mecanismo de control de versiones.
**lpszServiceInstanceName** La cadena a la que se hace referencia contiene el nombre de la instancia de servicio.
**lpServiceClassId** GUID que corresponde a esta clase de servicio.
**lpVersion** Opcional. Proporciona el número de versión de la instancia de servicio.
**lpszComment** Opcional. Cadena de comentario opcional.
**dwNameSpace** Se omite para esta operación.
**lpNSProviderId** Se omite para esta operación. El identificador del proveedor se encuentra en el parámetro lpProviderId .
**lpszContext** Opcional. Punto de partida de la consulta en un espacio de nombres jerárquico.
**dwNumberOfProtocols** Se omite para esta operación.
**lpafpProtocols** Se omite para esta operación.
**pszQueryString** Se omite para esta operación.
**dwNumberOfCsAddrs** Número de elementos de la matriz de estructuras de CSADDR_INFO a los que hace referencia lpcsaBuffer.
**lpcsaBuffer** Puntero a una matriz de estructuras de CSADDR_INFO que contienen la dirección o las direcciones en las que escucha el servicio.
**dwOutputFlags** Se omite para esta operación.
**lpBlob** Opcional. Puntero a una entidad específica del proveedor.
 
**Nota** Es aceptable que el miembro **iProtocol** de la estructura CSADDR_INFO contenga la constante de manifiesto **IPROTOCOL_ANY**, que indica un valor comodín. El proveedor de espacios de nombres debe sustituir un valor aceptable para la familia de direcciones y el tipo de socket especificados.
 

Requisitos

Requisito Value
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 ws2spi.h

Consulte también

CSADDR_INFO

WSAQUERYSET

WSASetLastError