Compartilhar via


Estruturas de dados da classe de serviço no SPI

Quando uma nova classe de serviço é instalada, uma estrutura WSASERVICECLASSINFO deve ser preparada e fornecida. Essa estrutura também consiste em subestruturas que contêm uma série de parâmetros que se aplicam a namespaces específicos.

Diagrama mostrando a estrutura WSASERVICECLASSINFO, subestruturas e parâmetros que se aplicam a namespaces específicos.

Para cada classe de serviço, há uma única estrutura WSASERVICECLASSINFO . Dentro da estrutura WSASERVICECLASSINFO , o identificador exclusivo da classe de serviço está contido em lpServiceClassId e uma cadeia de caracteres de exibição associada é referenciada por lpServiceClassName.

O membro lpClassInfos na estrutura WSASERVICECLASSINFO faz referência a uma matriz de estruturas WSANSCLASSINFO , cada uma das quais fornece um parâmetro nomeado e tipado que se aplica a um namespace especificado. Exemplos de valores para o membro lpszName incluem: SAPID, TCPPORT, UDPPORT etc. Essas cadeias de caracteres geralmente são específicas para o namespace identificado em dwNameSpace. Valores típicos para dwValueType podem ser REG_DWORD, REG_SZ etc. O membro dwValueSize indica o comprimento do item de dados apontado por lpValue.

Toda a coleção de dados representada em uma estrutura WSASERVICECLASSINFO é fornecida a cada provedor de namespace por meio de NSPInstallServiceClass. Cada provedor de namespace individual, em seguida, examina a lista de estruturas WSANSCLASSINFO e retém as informações aplicáveis a ele. Essa arquitetura também prevê a existência futura de um provedor de namespace especial que manteria todas as informações de esquema da classe de serviço para todos os namespaces. O Ws2_32.dll consultaria esse provedor para obter os dados WSASERVICECLASSINFO necessários para fornecer aos provedores de namespace quando NSPLookupServiceBegin for invocado para iniciar uma consulta e quando NSPSetService for invocado para registrar um serviço. O provedor de namespace não deve depender desse recurso por enquanto e, em vez disso, deve ter um meio específico do provedor para obter as informações de esquema de classe de serviço necessárias. Na ausência de um provedor que armazena todo o esquema de classe de serviço para todos os namespaces, o Ws2_32.dll usará NSPGetServiceClassInfo para obter essas informações de cada provedor de namespace individual.