Estructuras de datos de clase de servicio en el SPI

Cuando se instala una nueva clase de servicio, se debe preparar y proporcionar una estructura WSASERVICECLASSINFO . Esta estructura también consta de subestructuras que contienen una serie de parámetros que se aplican a espacios de nombres específicos.

Diagrama que muestra la estructura, las subestructuras y los parámetros WSASERVICECLASSINFO que se aplican a espacios de nombres específicos.

Para cada clase de servicio, hay una única estructura WSASERVICECLASSINFO . Dentro de la estructura WSASERVICECLASSINFO , el identificador único de la clase de servicio se encuentra en lpServiceClassId y se hace referencia a una cadena de visualización asociada por lpServiceClassName.

El miembro lpClassInfos de la estructura WSASERVICECLASSINFO hace referencia a una matriz de estructuras WSANSCLASSINFO , cada una de las cuales proporciona un parámetro con nombre y tipo que se aplica a un espacio de nombres especificado. Algunos ejemplos de valores para el miembro lpszName son: SAPID, TCPPORT, UDPPORT, etc. Estas cadenas suelen ser específicas del espacio de nombres identificado en dwNameSpace. Los valores típicos de dwValueType pueden ser REG_DWORD, REG_SZ, etc. El miembro dwValueSize indica la longitud del elemento de datos al que apunta lpValue.

Toda la colección de datos representados en una estructura WSASERVICECLASSINFO se proporciona a cada proveedor de espacios de nombres a través de NSPInstallServiceClass. A continuación, cada proveedor de espacios de nombres individual recorre la lista de estructuras WSANSCLASSINFO y conserva la información aplicable a él. Esta arquitectura también prevé la existencia futura de un proveedor de espacios de nombres especial que conservaría toda la información del esquema de clase de servicio para todos los espacios de nombres. El Ws2_32.dll consultaría a este proveedor para obtener los datos WSASERVICECLASSINFO necesarios para proporcionar a los proveedores de espacios de nombres cuando se invoca NSPLookupServiceBegin para iniciar una consulta y cuando se invoca NSPSetService para registrar un servicio. El proveedor de espacios de nombres no debe depender de esta funcionalidad por el momento y, en su lugar, debe tener un medio específico del proveedor para obtener cualquier información de esquema de clase de servicio necesaria. En ausencia de un proveedor que almacene todo el esquema de clase de servicio para todos los espacios de nombres, el Ws2_32.dll usará NSPGetServiceClassInfo para obtener dicha información de cada proveedor de espacios de nombres individual.