Strutture dei dati della classe di servizio in SPI
Quando viene installata una nuova classe di servizio, è necessario preparare e fornire una struttura WSASERVICECLASSINFO . Questa struttura è costituita anche da sottostruttura che contengono una serie di parametri che si applicano a spazi dei nomi specifici.
Per ogni classe di servizio è presente una singola struttura WSASERVICECLASSINFO . All'interno della struttura WSASERVICECLASSINFO , l'identificatore univoco della classe del servizio è contenuto in lpServiceClassId e viene fatto riferimento a una stringa di visualizzazione associata da lpServiceClassName.
Il membro lpClassInfos nella struttura WSASERVICECLASSINFO fa riferimento a una matrice di strutture WSANSCLASSINFO , ognuna delle quali fornisce un parametro denominato e tipizzato che si applica 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 di dati a cui punta lpValue.
L'intera raccolta di dati rappresentata in una struttura WSASERVICECLASSINFO viene fornita a ogni provider di spazi dei nomi tramite NSPInstallServiceClass. Ogni singolo provider di spazi dei nomi esegue quindi il set di informazioni nell'elenco di strutture 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 esegue una query su questo provider per ottenere i dati WSASERVICECLASSINFO necessari per fornire ai provider di spazi dei nomi quando viene richiamato NSPLookupServiceBegin per avviare una query e quando NSPSetService viene richiamato 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 di classe del 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.