SPI의 서비스 클래스 데이터 구조

새 서비스 클래스가 설치되면 WSASERVICECLASSINFO 구조를 준비하고 제공해야 합니다. 또한 이 구조는 특정 네임스페이스에 적용되는 일련의 매개 변수를 포함하는 하위 구조로 구성됩니다.

특정 네임스페이스에 적용되는 WSASERVICECLASSINFO 구조체, 하위 구조체 및 매개 변수를 보여 주는 다이어그램

각 서비스 클래스에 대해 단일 WSASERVICECLASSINFO 구조가 있습니다. WSASERVICECLASSINFO 구조 내에서 서비스 클래스의 고유 식별자는 lpServiceClassId에 포함되며 연결된 표시 문자열은 lpServiceClassName에서 참조됩니다.

WSASERVICECLASSINFO 구조체의 lpClassInfos 멤버는 각각 지정된 네임스페이스에 적용되는 명명되고 형식화된 매개 변수를 제공하는 WSANSCLASSINFO 구조체의 배열을 참조합니다. lpszName 멤버에 대한 값의 예로는 SAPID, TCPPORT, UDPPORT 등이 있습니다. 이러한 문자열은 일반적으로 dwNameSpace에서 식별된 네임스페이스에만 적용됩니다. dwValueType의 일반적인 값은 REG_DWORD, REG_SZ 등일 수 있습니다. dwValueSize 멤버는 lpValue가 가리키는 데이터 항목의 길이를 나타냅니다.

WSASERVICECLASSINFO 구조에 표시되는 전체 데이터 컬렉션은 NSPInstallServiceClass를 통해 각 네임스페이스 공급자에게 제공됩니다. 그런 다음 각 개별 네임스페이스 공급자가 WSANSCLASSINFO 구조 목록을 살펴보고 해당 정보를 유지합니다. 또한 이 아키텍처는 모든 네임스페이스에 대한 모든 서비스 클래스 스키마 정보를 유지하는 특수 네임스페이스 공급자의 향후 존재를 구상합니다. Ws2_32.dll 쿼리를 시작하기 위해 NSPLookupServiceBegin이 호출되고 NSPSetService가 서비스를 등록하기 위해 호출될 때 네임스페이스 공급자에게 제공하는 데 필요한 WSASERVICECLASSINFO 데이터를 가져오기 위해 이 공급자를 쿼리합니다. 네임스페이스 공급자는 당분간 이 기능을 사용하지 않아야 하며, 대신 필요한 서비스 클래스 스키마 정보를 얻기 위한 공급자별 수단이 있어야 합니다. 모든 네임스페이스에 대한 모든 서비스 클래스 스키마를 저장하는 공급자가 없는 경우 Ws2_32.dll NSPGetServiceClassInfo 를 사용하여 각 개별 네임스페이스 공급자로부터 이러한 정보를 가져옵니다.