Структуры данных класса службы в SPI
При установке нового класса службы необходимо подготовить и предоставить структуру WSASERVICECLASSINFO . Эта структура также состоит из подструктур, содержащих ряд параметров, применяемых к определенным пространствам имен.
Для каждого класса службы существует одна структура WSASERVICECLASSINFO . В структуре WSASERVICECLASSINFO уникальный идентификатор класса службы содержится в lpServiceClassId, а на связанную отображаемую строку ссылается lpServiceClassName.
Элемент lpClassInfos в структуре WSASERVICECLASSINFO ссылается на массив структур WSANSCLASSINFO , каждая из которых предоставляет именованный и типизированный параметр, который применяется к указанному пространству имен. Примеры значений для элемента lpszName : SAPID, TCPPORT, UDPPORT и т. д. Эти строки обычно относятся к пространству имен, определенному в dwNameSpace. Типичными значениями dwValueType могут быть REG_DWORD, REG_SZ и т. д. Член dwValueSize указывает длину элемента данных, на который указывает lpValue.
Вся коллекция данных, представленная в структуре WSASERVICECLASSINFO , предоставляется каждому поставщику пространства имен через NSPInstallServiceClass. Затем каждый отдельный поставщик пространства имен просматривает список структур WSANSCLASSINFO и сохраняет сведения, применимые к нему. Эта архитектура также предусматривает будущее существование специального поставщика пространства имен, который будет хранить все сведения о схеме класса службы для всех пространств имен. Ws2_32.dll запрашивает этот поставщик для получения данных WSASERVICECLASSINFO , необходимых для предоставления поставщикам пространства имен при вызове NSPLookupServiceBegin для инициации запроса, и при вызове NSPSetService для регистрации службы. Поставщик пространства имен не должен полагаться на эту возможность в настоящее время и вместо этого должен иметь средства для конкретного поставщика для получения необходимых сведений о схеме класса служб. При отсутствии поставщика, который хранит всю схему класса службы для всех пространств имен, Ws2_32.dll будет использовать NSPGetServiceClassInfo для получения таких сведений от каждого отдельного поставщика пространства имен.