다음을 통해 공유


LPNSPV2LOOKUPSERVICENEXTEX 콜백 함수(ws2spi.h)

NSPv2LookupServiceNextEx 함수는 네임스페이스 버전 2 서비스 공급자에서 요청된 정보를 검색하기 위해 NSPv2LookupServiceBegin에 대한 이전 호출에서 핸들을 가져온 후 호출됩니다.

구문

LPNSPV2LOOKUPSERVICENEXTEX Lpnspv2lookupservicenextex;

void Lpnspv2lookupservicenextex(
  [in]      HANDLE hAsyncCall,
  [in]      HANDLE hLookup,
  [in]      DWORD dwControlFlags,
  [in, out] LPDWORD lpdwBufferLength,
  [out]     LPWSAQUERYSET2W lpqsResults
)
{...}

매개 변수

[in] hAsyncCall

비동기 호출에 사용된 NSPv2LookupServiceBegin 에 대한 이전 호출에서 반환된 핸들입니다.

[in] hLookup

NSPv2LookupServiceBegin에 대한 이전 호출에서 반환된 핸들입니다.

[in] dwControlFlags

다음 작업을 제어하는 데 사용되는 플래그입니다. 현재 는 LUP_FLUSHPREVIOUS 너무 큰 결과 집합을 처리하는 수단으로 정의됩니다. 애플리케이션이 충분히 큰 버퍼를 제공할 수 없는 경우 LUP_FLUSHPREVIOUS 설정하면 공급자가 너무 큰 마지막 결과 집합을 삭제하고 이 호출에 대한 다음 집합으로 이동하도록 지시합니다.

[in, out] lpdwBufferLength

lpqsResults가 가리키는 버퍼에 포함된 입력의 크기(바이트)입니다. 출력에서 함수가 실패하고 오류가 WSAEFAULT인 경우 lpqsResults 가 레코드를 검색하기 위해 전달할 최소 크기(바이트)를 포함합니다.

[out] lpqsResults

반환 시 WSAQUERYSET2 구조에 하나의 결과 집합을 포함할 메모리 블록에 대한 포인터입니다.

반환 값

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

오류 코드 의미
WSA_E_CANCELLED
이 호출이 계속 처리되는 동안 NSPv2LookupServiceEnd 에 대한 호출이 수행되었습니다. 통화가 취소되었습니다. lpqsResults 버퍼의 데이터는 정의되지 않습니다.

Windows 소켓 2에서는 WSAECANCELLED (10103) 및 WSA_E_CANCELLED (10111)에 대해 충돌하는 오류 코드가 정의됩니다. 오류 코드 WSAECANCELLED 는 이후 버전에서 제거되며 WSA_E_CANCELLED 유지됩니다. 네임스페이스 공급자는 WSA_E_CANCELLED 오류 코드를 사용하여 가능한 가장 광범위한 애플리케이션과의 호환성을 유지해야 합니다.

WSA_E_NO_MORE
더 이상 사용할 수 있는 데이터가 없습니다.

Windows 소켓 2에서는 WSAENOMORE (10102) 및 WSA_E_NO_MORE (10110)에 대해 충돌하는 오류 코드가 정의됩니다. 오류 코드 WSAENOMORE 는 이후 버전에서 제거되며 WSA_E_NO_MORE 유지됩니다. 네임스페이스 공급자는 가능한 가장 광범위한 애플리케이션과의 호환성을 유지하기 위해 WSA_E_NO_MORE 오류 코드를 사용해야 합니다.

WSAEFAULT
lpqsResults 버퍼가 너무 작아서 WSAQUERYSET 집합을 포함할 수 없습니다.
WSAEINVAL
이 공급자에 대해 하나 이상의 매개 변수가 잘못되었거나 누락되었습니다.
WSA_INVALID_HANDLE
지정된 조회 핸들이 잘못되었습니다.
WSANO_DATA
이름이 데이터베이스에서 발견되었지만 지정된 제한 사항과 일치하는 데이터가 없습니다.
WSASERVICE_NOT_FOUND
서비스를 알 수 없습니다. 지정된 네임스페이스에서 서비스를 찾을 수 없습니다.
WSA_NOT_ENOUGH_MEMORY
이 작업을 수행하는 데 사용할 수 있는 메모리가 부족합니다.

설명

NSPv2LookupServiceNextEx 함수는 Windows Vista 이상에서 사용할 수 있는 네임스페이스 서비스 공급자 버전 2(NSPv2) 아키텍처의 일부로 사용됩니다.

Windows Vista 및 Windows Server 2008에서 NSPv2LookupServiceNextEx 함수는 NS_EMAIL 네임스페이스 공급자에 대한 작업에만 사용할 수 있습니다.

공급자는 lpqsResults 버퍼의 WSAQUERYSET2 구조를 전달합니다. 클라이언트는 모든 WSAQUERYSET2 구조가 반환되었음을 나타내는 WSA_E_NOMORE 반환될 때까지 NSPv2LookupServiceNextEx 함수를 호출해야 합니다.

이 함수에 지정된 dwControlFlagsNSPv2LookupServiceBegin 시 지정된 dwControlFlags는 조합 목적으로 "제한"으로 처리됩니다. 제한 사항은 NSPv2LookupServiceBegin 시간에 있는 제한 사항과 NSPv2LookupServiceNextEx 시간의 제한 사항 간에 결합됩니다. 따라서 NSPv2LookupServiceNextEx 의 플래그는 NSPv2LookupServiceBegin에서 요청된 데이터보다 더 많거나 적은 플래그를 지정하는 오류는 아니지만 반환되는 데이터의 양을 늘릴 수 없습니다. 지정된 NSPv2LookupServiceNextEx 에 지정된 플래그는 해당 호출에만 적용됩니다.

dwControlFlagsLUP_FLUSHPREVIOUSLUP_RES_SERVICE 결합된 제한 규칙의 예외입니다("제한" 플래그 대신 동작 플래그이기 때문). NSPv2LookupServiceNextEx에서 두 플래그 중 하나를 사용하는 경우 NSPv2LookupServiceBegin에서 동일한 플래그의 설정에 관계없이 정의된 효과가 있습니다.

예를 들어 NSPv2LookupServiceBegin에서 LUP_RETURN_VERSION 지정된 경우 서비스 공급자는 버전을 포함한 레코드를 검색합니다. NSPv2LookupServiceNextEx에서 LUP_RETURN_VERSION 지정되지 않은 경우 반환된 정보에는 버전을 사용할 수 있었음에도 불구하고 해당 버전이 포함되지 않습니다. 오류가 생성되지 않습니다.

또한 예를 들어 NSPv2LookupServiceBegin에서 LUP_RETURN_BLOB 지정하지 않고 NSPv2LookupServiceNextEx에 지정된 경우 반환된 정보에는 프라이빗 데이터가 포함되지 않습니다. 오류가 생성되지 않습니다.

NSPv2LookupServiceNextEx 함수는 일반적으로 두 번 이상 호출됩니다. lpqsResults 매개 변수가 가리키는 WSAQUERYSET2 수신하는 데 필요한 버퍼의 크기를 처음 가져오는 경우와 실제 쿼리 결과 집합을 가져오는 데 두 번째입니다. 첫 번째 호출에서 NSPv2 공급자는 WSAQUERYSET2 결과에 필요한 크기를 반환해야 합니다.

반환되는 lpqsResults 매개 변수가 가리키는 WSAQUERYSET2 구조체는 동일한 프로세스 컨텍스트에서만 유용합니다. WSAQUERYSET2 구조체의 여러 멤버에는 반환된 실제 데이터에 대한 포인터가 포함되어 있기 때문에 유용합니다. 예를 들어 RPC를 사용하여 쿼리 결과를 다른 프로세스에 전달해야 하는 경우 WSAQUERYSET2 구조체의 멤버가 가리키는 데이터를 포함하여 lpqsResults 매개 변수가 가리키는 WSAQUERYSET2 구조에서 반환된 데이터를 직렬화하고 마샬링해야 합니다. 데이터는 프로세스 경계를 넘어 전달할 수 있는 형식으로 직렬화되어야 합니다. 데이터에 대한 포인터만 전달되고 실제 데이터는 다른 프로세스에서 사용할 수 없으므로 WSAQUERYSET2 구조의 복사본을 전달하는 것만으로는 충분하지 않습니다.

쿼리 결과

다음 표에서는 WSAQUERYSET2 나열하고 **WSAQUERYSET2** 구조에서 쿼리 결과가 어떻게 표시되는지 설명합니다. 자세한 내용은 쿼리 관련 데이터 구조를 참조하세요.
WSAQUERYSET2 멤버 이름 결과 해석
**dwSize** WSAQUERYSET2 구조체의 크기(바이트)입니다. 이는 버전 관리 메커니즘으로 사용됩니다.
**lpszServiceInstanceName** 서비스 이름을 포함하는 문자열입니다.
**lpVersion** 특정 서비스 instance 버전 번호를 참조합니다.
**lpszComment** 서비스 instance 제공된 주석 문자열입니다. 이 멤버는 NSPv2 서비스 공급자의 요구 사항에 따라 선택 사항입니다.
**dwNameSpace** 이름 또는 서비스 instance 있는 네임스페이스 식별자입니다.
**lpNSProviderId** 이 쿼리 결과를 제공한 특정 네임스페이스 공급자입니다.
**lpszContext** 서비스가 있는 계층 구조 네임스페이스의 컨텍스트 지점입니다.
**dwNumberOfProtocols** 이 멤버는 결과에 대해 정의되지 않습니다.
**lpafpProtocols** 이 멤버는 결과에 대해 정의되지 않습니다. 필요한 모든 프로토콜 정보는 CSADDR_INFO 구조에 있습니다.
**lpszQueryString** dwControlFlags에 **LUP_RETURN_QUERY_STRING**이 포함된 경우 이 멤버는 원래 쿼리에 지정된 **lpszServiceInstanceName**의 분할되지 않은 나머지를 반환합니다. 예를 들어 호스트 이름 및 해당 호스트 내의 파일 경로를 지정하는 계층적 이름으로 서비스를 식별하는 네임스페이스에서 반환되는 주소는 호스트 주소일 수 있고 나머지는 파일 경로일 수 있습니다. **lpszServiceInstanceName**이 완전히 구문 분석되고 **LUP_RETURN_QUERY_STRING**이 사용되는 경우 이 멤버는 null이거나 길이가 0인 문자열을 가리킵니다.
**dwNumberOfCsAddrs** CSADDR_INFO 구조체 배열의 요소 수입니다.
**lpcsaBuffer** 각 요소 내에 하나의 완전한 전송 주소가 포함된 CSADDR_INFO 구조체 배열에 대한 포인터입니다.
**dwOutputFlags** **RESULT_IS_ALIAS** 플래그는 별칭 결과임을 나타냅니다.
**lpBlob** 공급자별 엔터티에 대한 포인터입니다. 이 멤버는 NSPv2 서비스 공급자의 요구 사항에 따라 선택 사항입니다.

요구 사항

   
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 ws2spi.h

참고 항목

CSADDR_INFO

NSPV2_ROUTINE

NSPv2Cleanup

NSPv2ClientSessionRundown

NSPv2LookupServiceBegin

NSPv2LookupServiceEnd

NSPv2SetServiceEx

NSPv2Startup

WSAQUERYSET2

WSASetLastError