설명자 할당
Windows Sockets 서비스 공급자는 소켓을 IFS(설치 가능한 파일 시스템) 개체로 구현하는 것이 좋지만, Winsock 아키텍처는 소켓 핸들이 IFS 개체가 아닌 서비스 공급자를 수용합니다. IFS 핸들이 있는 공급자는 WSAPROTOCOL_INFO 구조의 XP1_IFS_HANDLES 특성 비트를 통해 이를 나타냅니다. (참고: XP1_IFS_HANDLES 특성 비트는 API 사양의 릴리스 2.0.8에 포함되지 않았지만 이후 errata 메커니즘을 통해 추가되었습니다.) Winsock SPI 클라이언트는 ReadFile 및 WriteFile과 같은 표준 Windows I/O 기능과 함께 이러한 설명자를 사용하여 소켓 설명자가 IFS 핸들인 공급자를 활용할 수 있습니다.
IFS 공급자가 새 소켓 설명자를 만들 때마다 Windows 소켓 SPI 클라이언트에 새 핸들을 제공하기 전에 공급자가 WPUModifyIFSHandle 을 호출해야 합니다. 이 함수는 공급자 식별자와 공급자의 제안된 IFS 핸들을 입력으로 사용하고 수정된 핸들을 반환합니다. IFS 공급자는 수정된 핸들만 클라이언트에 제공해야 하며 클라이언트의 모든 요청은 이 수정된 핸들만 참조합니다. 수정된 핸들은 운영 체제와 관련된 한 제안된 핸들과 구별할 수 없습니다. 따라서 대부분의 경우 서비스 공급자는 모든 내부 처리에서 수정된 핸들만 사용하도록 선택합니다. 이 수정 함수의 목적은 Ws2_32.dll 지정된 소켓과 연결된 서비스 공급자를 식별하는 프로세스를 크게 간소화할 수 있도록 하는 것입니다.
IFS 핸들을 반환하지 않는 공급자는 WPUCreateSocketHandle 호출을 통해 Ws2_32.dll 유효한 핸들을 가져와야 합니다. nonIFS 공급자는 클라이언트에 Windows 소켓 2.DLL 제공 핸들만 제공해야 하며 클라이언트의 모든 요청은 이러한 핸들만 참조합니다. 서비스 공급자 구현자의 편의를 위해 WPUCreateSocketHandle 의 공급자가 제공하는 입력 매개 변수 중 하나는 DWORD 컨텍스트 값입니다. Ws2_32.dll 이 컨텍스트 값을 할당된 소켓 핸들과 연결하고 서비스 공급자가 WPUQuerySocketHandleContext 호출을 통해 언제든지 컨텍스트 값을 검색할 수 있도록 합니다. 이 컨텍스트 값의 일반적인 용도는 소켓 상태 정보를 저장하는 데 사용되는 서비스 공급자 유지 관리 데이터 구조에 대한 포인터를 저장하는 것입니다.