다음을 통해 공유


WSASetServiceW 함수(winsock2.h)

WSASetService 함수는 하나 이상의 네임스페이스 내에서 instance 서비스를 레지스트리에서 등록하거나 제거합니다.

구문

INT WSAAPI WSASetServiceW(
  [in] LPWSAQUERYSETW   lpqsRegInfo,
  [in] WSAESETSERVICEOP essoperation,
  [in] DWORD            dwControlFlags
);

매개 변수

[in] lpqsRegInfo

등록 또는 등록 취소에 대한 서비스 정보에 대한 포인터입니다.

[in] essoperation

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

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

[in] dwControlFlags

WSASetService 함수의 작업을 추가로 제어하는 서비스 설치 플래그 값입니다. 이 매개 변수의 가능한 값은 Winsock2.h 헤더 파일에 정의되어 있습니다.

플래그 의미
SERVICE_MULTIPLE
작업의 scope 제어합니다. 이 플래그를 설정하지 않으면 서비스 주소가 그룹으로 관리됩니다. 레지스트리에서 레지스터 또는 제거는 지정된 주소 집합을 추가하기 전에 모든 기존 주소를 무효화합니다. 설정되면 작업은 지정된 주소 집합에서만 수행됩니다. 레지스터는 기존 주소를 무효화하지 않으며 레지스트리에서 제거하면 지정된 주소 집합만 무효화됩니다.

반환 값

작업이 성공한 경우 WSASetService 의 반환 값은 0입니다. 그렇지 않으면 SOCKET_ERROR 값이 반환되고 WSAGetLastError를 호출하여 특정 오류 번호를 검색할 수 있습니다.

오류 코드 의미
WSAEACCES
호출 루틴에는 서비스를 설치할 수 있는 충분한 권한이 없습니다.
WSAEINVAL
하나 이상의 필수 매개 변수가 잘못되었거나 누락되었습니다.
WSANOTINITIALISED
Ws2_32.dll 초기화되지 않았습니다. 애플리케이션은 Windows 소켓 함수를 호출하기 전에 먼저 WSAStartup 을 호출해야 합니다.
WSA_NOT_ENOUGH_MEMORY
작업을 수행할 메모리가 부족했습니다.

설명

WSASetService 함수를 사용하여 특정 네임스페이스 공급자, 특정 네임스페이스와 연결된 모든 공급자 또는 모든 네임스페이스의 모든 공급자에 영향을 줄 수 있습니다.

다음 표와 같이 essOperationdwControlFlags 에 사용할 수 있는 값이 결합되어 WSASetService 함수의 작업을 제어합니다.

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

Active Directory Services와 같은 디렉터리에 서비스를 게시하는 것은 ACL(액세스 제어 목록)에 따라 제한됩니다. 자세한 내용은 서비스 게시에 대한 보안 문제를 참조하세요.

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

dwControlFlags 매개 변수가 SERVICE_MULTIPLE 설정되면 애플리케이션에서 부실 주소가 개체에 남아 있게 해서는 안 됩니다. 이는 애플리케이션이 DEREGISTER 요청을 실행하지 않고 중단되는 경우에 발생할 수 있습니다. 서비스가 등록되면 해당 주소를 저장해야 합니다. 다음 호출 시 서비스는 새 주소를 등록하기 전에 레지스트리에서 이러한 오래된 부실 주소를 명시적으로 제거해야 합니다.

참고 ANSI 문자 문자열을 사용하는 경우 이 함수가 반환된 후 lpqsRegInfoWSAQUERYSET 데이터에 결과가 포함되지 않을 수 있습니다. 이 메서드의 ANSI 버전인 WSASetServiceAWSAQUERYSET의 ANSI 데이터를 내부적으로 유니코드로 변환하지만 결과를 ANSI로 다시 변환하지 않기 때문입니다. 이는 주로 레코드를 고유하게 식별하는 데 사용되는 "서비스 레코드 핸들"을 반환하는 전송에 영향을 줍니다. 이 문제를 해결하려면 애플리케이션에서 이 함수를 호출할 때 WSAQUERYSET 의 유니코드 문자열 데이터를 사용해야 합니다.
 

서비스 속성

다음 표에서는 WSAQUERYSET 구조에서 서비스 속성 데이터를 나타내는 방법을 설명합니다. (선택 사항)으로 레이블이 지정된 필드에는 null 포인터가 포함될 수 있습니다.
WSAQUERYSET 멤버 서비스 속성 설명
dwSize sizeof(WSAQUERYSET)로 설정해야 합니다. 이는 버전 관리 메커니즘입니다.
dwOutputFlags 적용할 수 없으며 무시됩니다.
lpszServiceInstanceName 참조된 문자열에는 서비스 instance 이름이 포함됩니다.
lpServiceClassId 이 서비스 클래스에 해당하는 GUID입니다.
lpVersion (선택 사항) 서비스 instance 버전 번호를 제공합니다.
lpszComment (선택 사항) 선택적 주석 문자열입니다.
dwNameSpace 다음 표를 참조하세요.
lpNSProviderId 다음 표를 참조하세요.
lpszContext (선택 사항) 계층 구조 네임스페이스에서 쿼리의 시작점을 지정합니다.
dwNumberOfProtocols 무시됩니다.
lpafpProtocols 무시됩니다.
lpszQueryString 무시됩니다.
dwNumberOfCsAddrs lpcsaBuffer에서 참조하는 CSADDR_INFO 구조체 배열의 요소 수입니다.
lpcsaBuffer 서비스가 수신 대기하는 주소가 포함된 CSADDR_INFO 구조체 배열에 대한 포인터입니다.
lpBlob (선택 사항) 공급자별 엔터티에 대한 포인터입니다.
 

다음 그림과 같이 dwNameSpacelpNSProviderId 멤버의 조합에 따라 네임스페이스 공급자가 이 함수의 영향을 받습니다.

dwNameSpace lpNSProviderId 영향 범위
무시됨 null이 아닌 경우 지정된 이름 공간 공급자입니다.
유효한 이름- 공간 식별자 Null 표시된 네임스페이스를 지원하는 모든 이름 공간 공급자입니다.
NS_ALL Null 모든 이름 공간 공급자.
 

Windows Phone 8:WSASetServiceW 함수는 Windows Phone 8 이상에서 Windows Phone 스토어 앱에 대해 지원됩니다.

Windows 8.1Windows Server 2012 R2: WSASetServiceW 함수는 Windows 8.1, Windows Server 2012 R2 이상에서 Windows 스토어 앱에 대해 지원됩니다.

참고

winsock2.h 헤더는 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 WSASetService를 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8.1, Windows Vista [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 winsock2.h
라이브러리 Ws2_32.lib
DLL Ws2_32.dll

추가 정보

Bluetooth 및 WSASetService

WSAGetLastError

WSAStartup

Winsock 함수

Winsock 참조