Strutture di dati della classe di servizio in SPI
Quando viene installata una nuova classe di servizio, è necessario preparare e fornire una strutturaWSASERVICECLASSINFO. Questa struttura è costituita anche da sottostruttura che contengono una serie di parametri applicabili a spazi dei nomi specifici.
Per ogni classe di servizio è presente una singola struttura diWSASERVICECLASSINFO. All'interno della struttura di WSASERVICECLASSINFO, l'identificatore univoco della classe del servizio è contenuto in lpServiceClassIde viene fatto riferimento a una stringa di visualizzazione associata lpServiceClassName.
Il membro lpClassInfos nella strutturaWSASERVICECLASSINFOfa riferimento a una matrice di strutture WSANSCLASSINFO, ognuna delle quali fornisce un parametro denominato e tipizzato applicabile a uno spazio dei nomi specificato. Esempi di valori per il membro lpszName includono: SAPID, TCPPORT, UDPPORT e così via. Queste stringhe sono in genere specifiche dello spazio dei nomi identificato in dwNameSpace. I valori tipici per dwValueType potrebbero essere REG_DWORD, REG_SZ e così via. Il membro dwValueSize indica la lunghezza dell'elemento dati a cui punta lpValue.
L'intera raccolta di dati rappresentata in una struttura diWSASERVICECLASSINFOviene fornita a ogni provider di spazi dei nomi tramite NSPInstallServiceClass. Ogni singolo provider di spazi dei nomi esamina quindi l'elenco delle strutture di WSANSCLASSINFO e mantiene le informazioni applicabili. Questa architettura prevede anche l'esistenza futura di un provider di spazi dei nomi speciale che manterrà tutte le informazioni sullo schema della classe del servizio per tutti gli spazi dei nomi. Il Ws2_32.dll eseguirà una query su questo provider per ottenere i dati di WSASERVICECLASSINFO necessari per fornire ai provider di spazi dei nomi quando viene richiamato NSPLookupServiceBegin per avviare una query e quando viene richiamato NSPSetService per registrare un servizio. Il provider dello spazio dei nomi non deve basarsi su questa funzionalità per il momento e deve avere invece un mezzo specifico del provider per ottenere le informazioni necessarie sullo schema della classe del servizio. In assenza di un provider che archivia tutti gli schemi della classe di servizio per tutti gli spazi dei nomi, il Ws2_32.dll userà NSPGetServiceClassInfo per ottenere tali informazioni da ogni singolo provider di spazi dei nomi.