다음을 통해 공유


WPUModifyIFSHandle 함수(ws2spi.h)

WPUModifyIFSHandle 함수는 Ws2_32.dll 수정된 IFS 핸들을 수신합니다.

구문

SOCKET WPUModifyIFSHandle(
  [in]  DWORD  dwCatalogEntryId,
  [in]  SOCKET ProposedHandle,
  [out] LPINT  lpErrno
);

매개 변수

[in] dwCatalogEntryId

호출 서비스 공급자를 식별하는 설명자입니다.

[in] ProposedHandle

공급자가 할당한 IFS 핸들입니다.

[out] lpErrno

오류 코드에 대한 포인터입니다.

반환 값

오류가 발생하지 않으면 WPUModifyIFSHandle 은 수정된 소켓 핸들을 반환합니다. 그렇지 않으면 INVALID_SOCKET 반환되고 lpErrno에서 특정 오류 코드를 사용할 수 있습니다.

오류 코드 의미
WSAEINVAL
제안된 핸들이 잘못되었습니다.
 
 

설명

WPUModifyIFSHandle 핸들을 사용하면 WS2_32.dll 제공된 IFS 핸들의 수정된 버전을 반환하여 내부 작업을 간소화할 수 있습니다. 반환된 핸들은 운영 체제에 관한 한 제안된 핸들과 구별할 수 없음을 보장합니다. IFS 공급자는 새로 만든 소켓 설명자를 서비스 공급자에 반환하기 전에 이 함수를 호출해야 합니다. 서비스 공급자는 모든 후속 소켓 작업에 대해 수정된 핸들만 사용합니다. 이 루틴은 소켓 설명자가 실제 IFS 핸들인 IFS 공급자에서만 사용됩니다.

 
**계층화된 서비스 공급자 고려 사항**

이 프로시저는 기본 IFS 공급자 위에 계층화된 계층화된 공급자가 WPUCreateSocketHandle 호출을 사용하여 만드는 대신 기본 공급자의 소켓 핸들을 자체적으로 노출하려는 경우에도 사용할 수 있습니다. 체인의 다음 계층에서 수신하는 IFS 소켓 핸들을 "통과"하려는 계층화된 공급자는 WPUModifyIFSHandle을 호출하여 자체 카탈로그 항목 ID를 dwCatalogEntryId로 전달할 수 있습니다. 이렇게 하면 다음 계층이 아닌 이 계층이 해당 소켓 핸들과 관련된 SPI 호출의 대상이 되어야 한다는 것을 Windows 소켓 DLL에 알릴 수 있습니다.

계층화된 공급자가 이 방법을 사용하는지 확인해야 하는 몇 가지 제한 사항이 있습니다.

  • 공급자는 WSPStartup 시 반환하는 프로시저 디스패치 테이블에서 LPWSPSendLPWSPRecv에 대한 기본 공급자 진입점을 노출하여 Windows Sockets SPI 클라이언트의 이러한 함수에 대한 액세스가 가능한 한 효율적인지 확인해야 합니다.
  • 공급자는 특히 I/O 시스템 함수 ReadFileWriteFile의 경우 모든 I/O에 대해 호출되는 LPWSPSend 및 LPWSPRecv 함수를 사용할 수 없습니다. 이러한 함수는 계층화된 공급자를 무시하고 계층화된 공급자가 이러한 함수에 대한 자체 진입점을 프로시저 디스패치 테이블에 배치하는 경우에도 기본 IFS 공급자의 구현을 직접 호출합니다.
  • 공급자는 LPWSPSend, LPWSPSendTo, LPWSPRecv, LPWSPRecvFrom 또는 LPWSPIoctl을 사용하여 겹치는 I/O를 사후 처리하는 기능을 사용할 수 없습니다. 사후 처리 알림은 완료 포트를 통해 발생하고 계층화된 공급자를 완전히 무시할 수 있습니다. 계층화된 공급자는 완료 포트가 사용되었는지 확인하거나 어떤 포트인지 확인할 방법이 없습니다. 계층화된 공급자는 알림 시퀀스에 자신을 삽입할 방법이 없습니다.
  • 공급자는 원래 겹치는 매개 변수(예: WSAOVERLAPPED 구조체 및 완료 루틴 포인터)를 사용하여 겹치는 모든 I/O 요청을 기본 공급자에게 직접 전달해야 합니다. 공급자는 WSPGetOverlappedResult에 대한 기본 공급자 진입점을 노출해야 합니다. 겹치는 일부 I/O 요청은 계층화된 공급자를 완전히 무시할 수 있으므로 계층화된 공급자는 WSAOVERLAPPED 구조를 안정적으로 표시하여 결과를 보고할 수 있는 구조와 기본 공급자의 WSPGetOverlappedResult에 전달해야 하는 구조를 결정할 수 없습니다. 즉 , LPWSPIoctl 은 기본 공급자에 대한 통과 작업이어야 합니다.

요구 사항

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

추가 정보

WPUCreateSocketHandle

WSAOVERLAPPED

WSPGetOverlappedResult

LPWSPIoctl

LPWSPRecv

LPWSPSend