다음을 통해 공유


WSCInstallProviderAndChains64_32 함수(ws2spi.h)

WSCInstallProviderAndChains64_32 함수는 지정된 전송 공급자와 특정 프로토콜 체인을 64비트 컴퓨터의 32비트 및 64비트 Winsock 2 시스템 구성 데이터베이스에 모두 설치합니다. 이 함수는 전송 공급자 구성 정보의 시작 부분에 프로토콜 체인이 정렬되도록 하여 WSCWriteProviderOrder 를 별도로 호출할 필요가 없습니다.

구문

int WSCInstallProviderAndChains64_32(
  [in]            LPGUID              lpProviderId,
  [in]            const LPWSTR        lpszProviderDllPath,
  [in]            const LPWSTR        lpszProviderDllPath32,
  [in]            const LPWSTR        lpszLspName,
  [in]            DWORD               dwServiceFlags,
  [in]            LPWSAPROTOCOL_INFOW lpProtocolInfoList,
  [in]            DWORD               dwNumberOfEntries,
  [out, optional] LPDWORD             lpdwCatalogEntryId,
  [out]           LPINT               lpErrno
);

매개 변수

[in] lpProviderId

공급자에 대한 GUID(Globally Unique Identifier)에 대한 포인터입니다.

[in] lpszProviderDllPath

공급자 64비트 DLL에 대한 로드 경로를 포함하는 유니코드 문자열에 대한 포인터입니다. 이 문자열은 경로 확인에 대한 일반적인 규칙을 관찰하고 포함된 환경 문자열(예: %SystemRoot%)을 포함할 수 있습니다. 이러한 환경 문자열은 Ws2_32.dll 이후에 애플리케이션을 대신하여 공급자 DLL을 로드해야 할 때 확장됩니다. 포함된 환경 문자열이 확장되면 Ws2_32.dll 결과 문자열을 LoadLibrary 함수에 전달하여 공급자를 메모리로 로드합니다. 자세한 내용은 LoadLibrary를 참조하세요.

**참고** lpszProviderDllPath32 가 **NULL**로 설정된 경우 lpszProviderDllPath%windir%\system32\<dllname>으로 설정해야 합니다. 그렇지 않은 경우 호출이 실패하고 WSAEINVAL 오류 코드를 반환합니다.
 

[in] lpszProviderDllPath32

공급자 32비트 DLL에 대한 정규화된 경로를 포함하는 유니코드 문자열에 대한 포인터입니다. 이 문자열은 경로 확인에 대한 일반적인 규칙을 관찰하고 포함된 환경 문자열(예: %SystemRoot%)을 포함할 수 있습니다. 이러한 환경 문자열은 Ws2_32.dll 이후에 애플리케이션을 대신하여 공급자 DLL을 로드할 때 확장됩니다. 포함된 환경 문자열이 확장되면 Ws2_32.dll 결과 문자열을 LoadLibrary 함수에 전달하여 공급자를 메모리에 로드합니다. 자세한 내용은 LoadLibrary를 참조하세요.

**참고** 이 매개 변수가 **NULL**로 설정된 경우 64비트 공급자는 %windir%\system32 폴더에 있어야 하며 32비트 공급자는 %windir%\syswow64 폴더에 있어야 합니다.
 

[in] lpszLspName

LSP(계층화된 서비스 공급자)의 이름을 포함하는 유니코드 문자열에 대한 포인터입니다.

[in] dwServiceFlags

만들 계층화된 프로토콜 카탈로그 항목 유형에 대한 서비스 플래그입니다. 계층화된 프로토콜 항목은 ChainLen 멤버가 0으로 설정된 WSAProtocol_Info 구조체입니다. LSP의 실제 카탈로그 항목은 ProtocolChain 멤버에서 이 계층화된 프로토콜 항목의 ID를 참조합니다.

의미
XP1_IFS_HANDLES
카탈로그 항목은 IFS 관련 소켓 핸들을 반환하는 IFS(설치 가능한 파일 시스템) LSP용입니다. IFS LSP는 Winsock 호출 완료를 가로챌 수 없으며 모든 Winsock 함수를 구현할 필요가 없습니다.

[in] lpProtocolInfoList

WSAProtocol_Info 구조체 배열에 대한 포인터입니다. 각 구조체는 공급자가 지원하는 프로토콜, 주소 패밀리 및 소켓 유형을 정의합니다. 검사되는 WSAPROTOCOL_INFO 구조체의 멤버는 iProtocol, iAddressFamilyiSocketType입니다.

[in] dwNumberOfEntries

lpProtocolInfoList 배열의 항목 수입니다.

[out, optional] lpdwCatalogEntryId

Winsock 2 시스템 구성 데이터베이스의 전송 공급자에 대해 새로 설치된 계층화된 프로토콜 항목에 대한 포인터입니다. LSP 카탈로그에 설치된 프로토콜 체인 항목을 빌드하는 데 사용된 ID입니다.

[out] lpErrno

함수가 실패할 경우 호출에서 생성된 오류 코드에 대한 포인터입니다.

반환 값

WSCInstallProviderAndChains64_32 성공하면 0을 반환합니다. 그렇지 않으면 SOCKET_ERROR 반환되고 lpErrno 매개 변수에 특정 오류 코드가 반환됩니다.

오류 코드 의미
WSAEFAULT
하나 이상의 인수가 사용자 주소 공간의 유효한 부분에 있지 않습니다.
WSAEINVAL
하나 이상의 인수가 잘못되었습니다. 이 오류는 다음 조건에 대해 반환됩니다. lpProviderId 매개 변수는 **NULL**, lpszProviderDllPath 매개 변수가 잘못되었거나 경로 길이가 너무 크거나(**MAX_PATH**을 초과함), lpszLspName 매개 변수가 잘못되었거나 이름 길이가 너무 크거나(**WSAPROTOCOL_LEN**이 초과됨), lpProtocolInfoList 가 **NULL이 아닌**으로 설정되고 dwNumberOfEntries 매개 변수가 0이거나 중복 공급자 ID 또는 계층화된 서비스 공급자 이름이 카탈로그에 이미 있거나 지정된 프로토콜, 주소 패밀리 및 소켓 형식에 대한 일치 항목을 찾을 수 없습니다.
WSAEINVALIDPROCTABLE
공급자에 필요한 기능이 없습니다. 비 IFS 공급자는 모든 Winsock 2 확장 함수(AcceptEx, ConnectEx, DisconnectEx, TransmitFile, TransmitPacketsLPFN_WSARECVMSG(WSARecvMsg))를 구현해야 합니다.
WSAEINPROGRESS
공급자 설치가 이미 진행 중입니다.
WSAENOBUFS
버퍼에 메모리를 할당할 수 없습니다.
WSANO_RECOVERY
복구할 수 없는 오류가 발생했습니다. 공급자가 이미 설치되어 있고, lpProtocolInfoList 매개 변수가 **NULL**이고, 기본 공급자가 없거나, 최대 프로토콜 체인 길이(**MAX_PROTOCOL_CHAIN**)에 도달했거나, 사용자에게 Winsock 레지스트리에 쓰는 데 필요한 관리 권한이 없거나, 카탈로그 항목을 만들거나 설치할 때 오류가 발생하는 등의 여러 조건에서 이 오류가 반환됩니다.
WSASYSCALLFAILURE
실패하지 않아야 하는 시스템 호출이 실패했습니다.

설명

WSCInstallProviderAndChains64_32 단일 전송 서비스 공급자를 설치하는 데 사용되는 기본 WSCInstallProvider64_32 함수의 향상된 버전입니다. 계층화된 서비스 공급자를 설치하는 경우 WSCInstallProviderAndChains64_32 사용해야 합니다. WSCInstallProviderAndChains64_32 단일 함수 호출을 사용하여 계층화된 프로토콜과 하나 이상의 프로토콜 체인을 설치할 수 있습니다. WSCInstallProvider64_32 사용하여 동일한 작업을 수행하려면 여러 함수 호출이 필요합니다.

Winsock 2는 계층화된 프로토콜을 수용합니다. 계층화된 프로토콜은 원격 엔드포인트와 데이터의 실제 교환을 위해 기본 전송 스택을 사용하는 동안 더 높은 수준의 통신 함수만 구현하는 프로토콜입니다. 계층화된 프로토콜의 예로 인증을 수행하고 상호 합의된 암호화 체계를 설정하기 위해 연결 설정 프로세스에 프로토콜을 추가하는 보안 계층이 있습니다. 이러한 보안 프로토콜에는 일반적으로 TCP 또는 SPX와 같은 기본 신뢰할 수 있는 전송 프로토콜의 서비스가 필요합니다. 기본 프로토콜이라는 용어는 원격 엔드포인트와 데이터 통신을 수행할 수 있는 TCP 또는 SPX와 같은 프로토콜을 나타냅니다. 계층화된 프로토콜이라는 용어는 독립할 수 없는 프로토콜을 설명하는 데 사용됩니다. 그런 다음 프로토콜 체인은 기본 프로토콜에 의해 함께 연결되고 고정되는 하나 이상의 계층화된 프로토콜로 정의됩니다. 기본 프로토콜에는 1로 정의된 BASE_PROTOCOL 설정된 WSAProtocol_Info 구조체의 ChainLen 멤버가 있습니다. 계층화된 프로토콜에는 0으로 정의된 LAYERED_PROTOCOL 설정된 WSAPROTOCOL_INFO 구조체의 ChainLen 멤버가 있습니다. 프로토콜 체인에는 WSAPROTOCOL_INFO 구조체의 ChainLen 멤버가 1보다 큼으로 설정됩니다.

WSCInstallProviderAndChains64_32WSCInstallProviderAndChains의 64비트 버전입니다. 64비트 플랫폼의 32비트 및 64비트 카탈로그에 공급자를 설치합니다. 즉, 64비트 플랫폼에서 두 개의 Winsock 카탈로그가 유지 관리되며 32비트 및 64비트 프로세스 모두 이 함수와 함께 설치된 LSP를 로드할 수 있습니다.

64비트 컴퓨터에서 32비트용으로 특별히 설계되지 않은 모든 호출(예: "32"로 끝나지 않는 모든 함수)은 네이티브 64비트 카탈로그에서 작동합니다. 64비트 컴퓨터에서 실행되는 프로세스는 WSCInstallProviderAndChains64_32 사용하여 32비트 카탈로그와 64비트 카탈로그 모두에서 작동하여 호환성을 유지해야 합니다. 특정 32비트 호출의 정의 및 의미 체계는 네이티브 호출과 동일합니다.

**참고** 64비트 플랫폼에서는 64비트 카탈로그에만 설치할 **WSCInstallProviderAndChains** 함수가 없습니다. 64비트 플랫폼에는 32비트 및 64비트 버전의 LSP가 모두 설치되어 있어야 합니다. 64비트 Winsock 카탈로그에만 설치해야 하는 공급자의 경우 WSCInstallProvider 함수를 사용할 수 있습니다.
 

lpProtocolInfoListNULL로 설정된 경우 이 함수는 공급자가 주소 패밀리, 소켓 유형 및 프로토콜에 정의된 각 고유 프로토콜 형식에 대한 기본 프로토콜 위에 계층화되는 프로토콜 체인을 만듭니다. 이렇게 하면 액세스할 수 없는 중복 공급자 항목이 생성됩니다.

lpProtocolInfoListNULL이 아닌 값으로 설정된 경우 이 함수는 제공된 배열의 각 요소에서 {address 제품군, 소켓 유형, 프로토콜} 튜플과 일치하는 구성 정보에서 최상위 항목을 가져와 프로토콜 체인을 만듭니다. 다시 말하지만 {address 제품군, 소켓 유형, 프로토콜} 튜플만 고려됩니다. 다른 모든 멤버와 중복 항목은 무시됩니다.

이 호출이 성공적으로 완료되면 WSAEnumProtocols, WSCEnumProtocols 또는 WSCEnumProtocols32에 대한 후속 호출은 새로 만든 프로토콜 체인 항목을 반환합니다. Windows 환경에서는 WSCInstallProviderAndChains64_32 성공적으로 완료된 후 WSAStartup을 호출하여 만든 Ws_32.dll 인스턴스에만 WSAEnumProtocols, WSCEnumProtocolsWSCEnumProtocols32가 반환될 때 새 항목이 포함됩니다.

참고WSCEnumProtocols 및 WSCEnumProtocols32에서 수행하는 동안 WSAEnumProtocols 함수는 계층화된 프로토콜 항목을 열거하지 않습니다.

 

성공하면 WSCInstallProviderAndChains64_32WSAProviderConfigChange를 호출하여 변경 알림을 위해 등록된 모든 관심 있는 애플리케이션에 경고하려고 시도합니다.

WSCInstallProviderAndChains64_32 함수는 Administrators 그룹의 구성원으로 로그온한 사용자만 호출할 수 있습니다. Administrators 그룹의 멤버가 아닌 사용자가 WSCInstallProviderAndChains64_32 호출하면 함수 호출이 실패하고 lpErrno 매개 변수에 WSANO_RECOVERY 반환됩니다. Windows Vista 또는 Windows Server 2008을 실행하는 컴퓨터의 경우 UAC(사용자 계정 제어)로 인해 이 함수가 실패할 수도 있습니다. 이 함수를 포함하는 애플리케이션이 기본 제공 관리자가 아닌 Administrators 그룹의 구성원으로 로그온한 사용자에 의해 실행되는 경우 애플리케이션이 requireAdministrator로 설정된 requestedExecutionLevel이 매니페스트 파일에 표시되지 않는 한 이 호출은 실패합니다. Windows Vista 또는 Windows Server 2008의 애플리케이션에 이 매니페스트 파일이 없는 경우 기본 제공 관리자가 아닌 Administrators 그룹의 구성원으로 로그온한 사용자는 이 함수가 성공하려면 기본 제공 관리자(RunAs 관리자)로 향상된 셸에서 애플리케이션을 실행해야 합니다.

모든 파일 설치 또는 공급자별 구성은 호출 애플리케이션에서 수행해야 합니다.

IFS 및 비 IFS 공급자

IFS 공급자는 네이티브 운영 체제 핸들을 반환하는 공급자입니다. 일반적으로 이러한 핸들은 커널 모드 프로토콜 드라이버와 연결됩니다. 예를 들어 이러한 항목이 커널 모드 구성 요소에 해당하므로 기본 TCP/IPv4, UDP/IPv4, TCP/IPv6 및 UDP/IPv6은 IFS 공급자입니다. IFS 핸들은 **ReadFile**, **WriteFile**, **CancelIo** 함수 호출에서 사용할 수 있습니다. IFS 공급자인 계층화된 서비스 공급자는 하위 공급자(IFS 공급자여야 함)에서 만든 소켓 핸들을 호출 애플리케이션에 직접 반환합니다. IFS LSP는 Winsock 호출에 대한 완료 알림을 가로챌 수 없습니다.

비 IFS 공급자는 WPUCreateSocketHandle 을 사용하여 중간 핸들을 만들고 호출자에게 이 핸들을 반환하는 공급자입니다. 이렇게 하면 비 IFS LSP가 호출 애플리케이션 전에 전송 및 수신 완료 이벤트를 가로채 사후 처리를 허용할 수 있습니다(예: 수신된 데이터 청크 해독). 비 IFS 소켓 핸들은 ReadFileWriteFile 호출에 사용할 수 있지만 CancelIo에서는 사용할 수 없습니다. 비 IFS 핸들에서 작업을 취소하는 유일한 방법은 closesocket으로 소켓을 닫는 것입니다.

32비트 및 64비트 공급자 DLL에 대한 경로

lpszProviderDllPath 는 공급자 DLL의 64비트 버전에 대한 정규화된 경로를 나타냅니다. 이 매개 변수에는 포함된 환경 문자열(예: %SystemRoot%)이 포함될 수 있습니다.

lpszProviderDllPath32 는 공급자 DLL의 32비트 버전에 대한 정규화된 경로를 나타냅니다. 이 매개 변수에는 포함된 환경 문자열(예: %SystemRoot%)이 포함될 수 있습니다.

lpszProviderDllPath32NULL인 경우 lpszProviderDllPath는 32비트 및 64비트 공급자 모두에 대한 경로입니다. 64비트 컴퓨터에서 32비트 프로세스가 실행 중일 때(예: Winsock 애플리케이션이 32비트 버전의 LSP를 로드하는 경우) lpszProviderDllPath에 지정된 32비트 공급자를 로드하려고 시도합니다. lpszProviderDllPath32NULL이면 lpszProviderDllPath 매개 변수를 %windir%\system32<로 설정해야 합니다. dllname>. 그렇지 않은 경우 WSAEINVAL을 사용하여 호출이 실패합니다. lpszProviderDllPath의 경로가 %windir%\system32인 경우< >lpszProviderDllPath32NULL이면 32비트 LSP가 있어야 하는 GetSystemWow64Directory에서 반환하는 디렉터리로 호출이 리디렉션됩니다(파일 시스템 리디렉터 사용). Windows XP 64비트 버전, Windows Server 2003 및 Windows Vista의 경우 이 디렉터리가 %windir%\syswow64입니다.

요구 사항

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

추가 정보

LoadLibrary

전송 구성 및 설치

전송 서비스 공급자

WPUCreateSocketHandle

WSAStartup

WSCEnumProtocols

WSCEnumProtocols32

WSCInstallProvider64_32

WSCInstallProviderAndChains

WSCWriteProviderOrder