다음을 통해 공유


LPNSPSETSERVICE 콜백 함수(ws2spi.h)

NSPSetService 함수는 네임스페이스 내에서 instance 서비스를 등록하거나 등록 취소합니다.

구문

LPNSPSETSERVICE Lpnspsetservice;

INT Lpnspsetservice(
  [in] LPGUID lpProviderId,
  [in] LPWSASERVICECLASSINFOW lpServiceClassInfo,
  [in] LPWSAQUERYSETW lpqsRegInfo,
  [in] WSAESETSERVICEOP essOperation,
  [in] DWORD dwControlFlags
)
{...}

매개 변수

[in] lpProviderId

서비스가 등록된 특정 네임스페이스 공급자의 GUID에 대한 포인터입니다.

[in] lpServiceClassInfo

서비스 클래스 스키마 정보입니다.

[in] lpqsRegInfo

등록 시 업데이트할 속성 정보입니다.

[in] essOperation

요청된 작업의 유형입니다.

이 매개 변수는 Winsock2.h 헤더 파일에 정의된 WSAESETSERVICEOP 열거형 형식의 값 중 하나일 수 있습니다.

의미
RNRSERVICE_REGISTER
0
서비스를 등록합니다. NetWare 환경 내에서 사용되는 SAP(Service Advertising Protocol) 네임스페이스의 경우 이는 주기적인 브로드캐스트를 보내는 것을 의미합니다. DNS(Domain Name System) 네임스페이스에 대한 NOP입니다. 영구 데이터 저장소의 경우 이는 주소 정보를 업데이트하는 것을 의미합니다.
RNRSERVICE_DEREGISTER
1
서비스 등록을 취소합니다. SAP 네임스페이스의 경우 주기적인 브로드캐스트 전송을 중지합니다. DNS 네임스페이스에 대한 NOP입니다. 영구 데이터 저장소의 경우 이는 주소 정보를 삭제하는 것을 의미합니다.
RNRSERVICE_DELETE
2
동적 이름 및 영구 공간에서 서비스를 삭제합니다. 여러 CSADDR_INFO 구조체(SERVICE_MULTIPLE 플래그 사용)로 표시되는 서비스의 경우 제공된 주소만 삭제되며, 이는 서비스가 등록될 때 제공된 해당 **CSADDR_INFO** 구조와 정확히 일치해야 합니다.

[in] dwControlFlags

요청된 서비스 작업을 제어하는 플래그 집합입니다.

이 매개 변수에 사용할 수 있는 값은 Winsock2.h 헤더 파일에 정의되어 있습니다.

의미
SERVICE_MULTIPLE
0x00000001
작업의 scope 제어합니다.

이 값을 설정하면 지정된 주소 집합에서만 작업이 수행됩니다. 등록 작업은 기존 주소를 무효화하지 않으며 등록 취소 작업은 지정된 주소 집합만 무효화합니다.

이 값이 없으면 서비스 주소가 그룹으로 관리됩니다. 레지스터 또는 등록 취소는 지정된 주소 집합을 추가하기 전에 모든 기존 주소를 무효화합니다.

반환 값

함수는 루틴이 성공하면 NO_ERROR (0)을 반환해야 합니다. 루틴이 실패하고 WSASetLastError를 사용하여 적절한 오류 코드를 설정해야 하는 경우 SOCKET_ERROR(–1)를 반환해야 합니다.

오류 코드 의미
WSAEACCES
호출 루틴에는 서비스를 설치할 수 있는 충분한 권한이 없습니다.
WSA_NOT_ENOUGH_MEMORY
이 작업을 수행하는 데 사용할 수 있는 메모리가 부족합니다.
WSAEINVAL
이 공급자에 대해 하나 이상의 매개 변수가 잘못되었거나 누락되었습니다.
WSAEOPNOTSUPP
이 작업은 지원되지 않습니다. 네임스페이스 공급자가 이 함수를 구현하지 않으면 이 오류가 반환됩니다.
WSASERVICE_NOT_FOUND
서비스를 알 수 없습니다. 지정된 네임스페이스에서 서비스를 찾을 수 없습니다.

설명

다음 표에서는 essOperationdwControlFlags에 사용할 수 있는 값을 나열합니다.

작업 플래그 서비스가 이미 있음 서비스가 없습니다.
**RNRSERVICE_REGISTER** 없음 개체를 덮어씁니다. 지정된 주소만 사용합니다. 개체가 REGISTERED입니다. 새 개체를 만듭니다. 지정된 주소만 사용합니다. 개체가 REGISTERED입니다.
**RNRSERVICE_REGISTER** **SERVICE_MULTIPLE** 업데이트 개체입니다. 기존 집합에 새 주소를 추가합니다. 개체가 REGISTERED입니다. 새 개체를 만듭니다. 지정된 모든 주소를 사용합니다. 개체가 REGISTERED입니다.
**RNRSERVICE_DEREGISTER** 없음 모든 주소를 제거하지만 네임스페이스에서 개체를 제거하지는 않습니다. 개체가 DEREGISTERED입니다. WSASERVICE_NOT_FOUND
**RNRSERVICE_DEREGISTER** **SERVICE_MULTIPLE** 업데이트 개체입니다. 지정된 주소만 제거합니다. 주소가 없는 경우에만 개체를 DEREGISTERED로 표시합니다. 네임스페이스에서 제거하지 않습니다. WSASERVICE_NOT_FOUND
**RNRSERVICE_DELETE** 없음 네임스페이스에서 개체를 제거합니다. WSASERVICE_NOT_FOUND
**RNRSERVICE_DELETE** **SERVICE_MULTIPLE** 지정된 주소만 제거합니다. 주소가 남아 있지 않은 경우에만 네임스페이스에서 개체를 제거합니다. WSASERVICE_NOT_FOUND
 

dwControlFlags 매개 변수가 SERVICE_MULTIPLE 설정되면 애플리케이션에서 해당 주소를 독립적으로 관리할 수 있습니다. 이는 애플리케이션이 해당 프로토콜을 개별적으로 관리해야 하거나 서비스가 둘 이상의 컴퓨터에 상주할 때 유용합니다. 예를 들어 서비스에서 둘 이상의 프로토콜을 사용하는 경우 하나의 수신 대기 소켓이 중단되지만 다른 소켓은 계속 작동합니다. 이 예제에서 서비스는 다른 주소에 영향을 주지 않고 중단된 주소를 등록 취소할 수 있습니다.

SERVICE_MULTIPLE 사용하는 경우 애플리케이션에서 이전 주소가 개체에 남아 있게 해서는 안 됩니다. RNRSERVICE_DEREGISTER 요청을 실행 하지 않고 애플리케이션이 중단되는 경우에 발생할 수 있습니다. 서비스가 등록되면 해당 주소를 저장해야 합니다. 다음 호출에서 서비스는 새 주소를 등록하기 전에 이러한 이전 주소를 명시적으로 등록 취소해야 합니다.

서비스 속성

다음 표에서는 WSAQUERYSET 멤버 이름을 나열하고 서비스 속성 데이터를 나타내는 방법을 설명합니다. (선택 사항)으로 레이블이 지정된 멤버는 null 포인터와 함께 제공할 수 있습니다.
WSAQUERYSET 멤버 이름 서비스 속성 설명
**dwSize** sizeof(WSAQUERYSET)로 설정합니다. 이는 버전 관리 메커니즘입니다.
**lpszServiceInstanceName** 참조된 문자열에는 서비스 instance 이름이 포함됩니다.
**lpServiceClassId** 이 서비스 클래스에 해당하는 GUID입니다.
**lpVersion** 선택 사항입니다. 서비스 instance 버전 번호를 제공합니다.
**lpszComment** 선택 사항입니다. 선택적 주석 문자열입니다.
**dwNameSpace** 이 작업에 대해 무시됩니다.
**lpNSProviderId** 이 작업에 대해 무시됩니다. 공급자 식별자는 lpProviderId 매개 변수에 포함되어 있습니다.
**lpszContext** 선택 사항입니다. 계층 구조 네임스페이스에서 쿼리의 시작점입니다.
**dwNumberOfProtocols** 이 작업에 대해 무시됩니다.
**lpafpProtocols** 이 작업에 대해 무시됩니다.
**pszQueryString** 이 작업에 대해 무시됩니다.
**dwNumberOfCsAddrs** lpcsaBuffer에서 참조하는 CSADDR_INFO 구조체 배열의 요소 수입니다.
**lpcsaBuffer** 서비스에서 수신 대기하는 주소 또는 주소를 포함하는 CSADDR_INFO 구조체 배열에 대한 포인터입니다.
**dwOutputFlags** 이 작업에 대해 무시됩니다.
**lpBlob** 선택 사항입니다. 공급자별 엔터티에 대한 포인터입니다.
 
**참고** CSADDR_INFO 구조체의 **iProtocol** 멤버가 와일드카드 값을 나타내는 **IPROTOCOL_ANY** 매니페스트 상수를 포함할 수 있습니다. 네임스페이스 공급자는 지정된 주소 패밀리 및 소켓 유형에 허용되는 값을 대체해야 합니다.
 

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 ws2spi.h

추가 정보

CSADDR_INFO

WSAQUERYSET

WSASetLastError