WSASetServiceW 함수(winsock2.h)
WSASetService 함수는 하나 이상의 네임스페이스 내에서 instance 서비스를 레지스트리에서 등록하거나 제거합니다.
구문
INT WSAAPI WSASetServiceW(
[in] LPWSAQUERYSETW lpqsRegInfo,
[in] WSAESETSERVICEOP essoperation,
[in] DWORD dwControlFlags
);
매개 변수
[in] lpqsRegInfo
등록 또는 등록 취소에 대한 서비스 정보에 대한 포인터입니다.
[in] essoperation
요청된 작업을 결정하는 값입니다. 이 매개 변수는 Winsock2.h 헤더 파일에 정의된 WSAESETSERVICEOP 열거형 형식의 값 중 하나일 수 있습니다.
값 | 의미 |
---|---|
|
서비스를 등록합니다. SAP의 경우 주기적인 브로드캐스트를 보내는 것을 의미합니다. DNS 네임스페이스에 대한 NOP입니다. 영구 데이터 저장소의 경우 이는 주소 정보를 업데이트하는 것을 의미합니다. |
|
레지스트리에서 서비스를 제거합니다. SAP의 경우 주기적인 브로드캐스트 전송을 중지합니다. DNS 네임스페이스에 대한 NOP입니다. 영구 데이터 저장소의 경우 이는 주소 정보를 삭제하는 것을 의미합니다. |
|
동적 이름 및 영구 공간에서 서비스를 삭제합니다. 여러 CSADDR_INFO 구조체(SERVICE_MULTIPLE 플래그 사용)로 표시되는 서비스의 경우 지정된 주소만 삭제되며, 이는 서비스가 등록될 때 지정된 해당 CSADDR_INFO 구조와 정확히 일치해야 합니다. |
[in] dwControlFlags
WSASetService 함수의 작업을 추가로 제어하는 서비스 설치 플래그 값입니다. 이 매개 변수의 가능한 값은 Winsock2.h 헤더 파일에 정의되어 있습니다.
반환 값
작업이 성공한 경우 WSASetService 의 반환 값은 0입니다. 그렇지 않으면 SOCKET_ERROR 값이 반환되고 WSAGetLastError를 호출하여 특정 오류 번호를 검색할 수 있습니다.
오류 코드 | 의미 |
---|---|
호출 루틴에는 서비스를 설치할 수 있는 충분한 권한이 없습니다. | |
하나 이상의 필수 매개 변수가 잘못되었거나 누락되었습니다. | |
Ws2_32.dll 초기화되지 않았습니다. 애플리케이션은 Windows 소켓 함수를 호출하기 전에 먼저 WSAStartup 을 호출해야 합니다. | |
작업을 수행할 메모리가 부족했습니다. |
설명
WSASetService 함수를 사용하여 특정 네임스페이스 공급자, 특정 네임스페이스와 연결된 모든 공급자 또는 모든 네임스페이스의 모든 공급자에 영향을 줄 수 있습니다.
다음 표와 같이 essOperation 및 dwControlFlags 에 사용할 수 있는 값이 결합되어 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 요청을 실행하지 않고 중단되는 경우에 발생할 수 있습니다. 서비스가 등록되면 해당 주소를 저장해야 합니다. 다음 호출 시 서비스는 새 주소를 등록하기 전에 레지스트리에서 이러한 오래된 부실 주소를 명시적으로 제거해야 합니다.
서비스 속성
다음 표에서는 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 | (선택 사항) 공급자별 엔터티에 대한 포인터입니다. |
다음 그림과 같이 dwNameSpace 와 lpNSProviderId 멤버의 조합에 따라 네임스페이스 공급자가 이 함수의 영향을 받습니다.
dwNameSpace | lpNSProviderId | 영향 범위 |
---|---|---|
무시됨 | null이 아닌 경우 | 지정된 이름 공간 공급자입니다. |
유효한 이름- 공간 식별자 | Null | 표시된 네임스페이스를 지원하는 모든 이름 공간 공급자입니다. |
NS_ALL | Null | 모든 이름 공간 공급자. |
Windows Phone 8:WSASetServiceW 함수는 Windows Phone 8 이상에서 Windows Phone 스토어 앱에 대해 지원됩니다.
Windows 8.1 및 Windows 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 |