Поделиться через


Структуры данных класса службы в SPI

При установке нового класса службы необходимо подготовить и предоставить структуру WSASERVICECLASSINFO. Эта структура также состоит из подструктур, содержащих ряд параметров, применяемых к определенным пространствам имен.

схема, показывающая структуру 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 для получения таких сведений от каждого отдельного поставщика пространств имен.