SetFileCompletionNotificationModes API로 인해 비 IFS LSP가 설치된 경우 I/O 완료 포트가 제대로 작동하지 않습니다.

  • 아티클
  • 2023. 07. 17.
  •  

이 문서의 내용

  1. 증상
  2. 원인
  3. 해결 방법
  4. 추가 정보

이 문서는 사용자가 사용하여 SetFileCompletionNotificationModes알림 모드를 변경할 때 비 IFS LSP가 I/O 완료 포트를 올바르게 지원하지 않는 문제를 해결하는 데 도움이 됩니다.

원래 제품 버전: Windows 7 Enterprise, Windows 7 Home Basic, Windows 7 Home Premium, Windows 7 Ultimate
원래 KB 번호: 2568167

증상

일부 애플리케이션은 비 IFS Winsock 기본 서비스 공급자(BSP) 또는 LSP(계층화된 서비스 공급자)와 충돌할 수 있습니다. 애플리케이션은 I/O 완료 포트를 만들어 소켓에 연결하고 SetFileCompletionNotificationModes를 소켓 핸들의 FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 플래그와 함께 호출합니다. 구조가 전달된 해당 소켓 OVERLAPPED 에 대한 후속 비동기 Winsock 호출의 경우 애플리케이션은 연결된 I/O 완료 포트를 통해 이 Winsock 함수 호출에 대한 완료를 경험하지 않습니다.

참고

이 문제는 이 새로운 IOCP 플래그(FILE_SKIP_COMPLETION_PORT_ON_SUCCESS)가 Vista에 추가되었기 때문에 Windows Vista 이상 버전에서 실행되는 애플리케이션에만 영향을 줍니다.

원인

비 IFS Winsock BSP 또는 LSP는 플래그와 FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 호환되지 않습니다. 비호환성으로 인해 비 IFS Winsock BSP 또는 LSP가 설치되었을 때 소켓 OVERLAPPED 에서 사용되고 제대로 작동하지 않는 비동기 Winsock 호출이 발생합니다. Microsoft에서 제공하는 모든 Winsock BSP는 IFS 핸들 및 타사 BSP를 사용합니다. 따라서 이 문제는 주로 비 IFS LSP를 설치하여 발생합니다.

해결 방법

이 문제를 해결하려면 다음 방법 중 하나를 사용하십시오.

  • 플래그를 FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 지정하지 마세요.
  • 설치된 비 IFS Winsock LSP를 제거합니다.
  • 비 IFS LSP에서 Windows Filter Platform(WFP)으로 이동합니다.

추가 정보

비 IFS BSP 또는 LSP가 설치되어 있는지 확인하려면 명령을 사용하고 netsh WinSock Show Catalog 반환되는 모든 Winsock 카탈로그 공급자 항목 항목을 검사합니다. 서비스 플래그 값에 0x20000 비트 집합이 있는 경우 공급자는 IFS 핸들을 사용하며 올바르게 작동합니다. 0x20000 비트가 명확하지 않으면(설정되지 않음) 비 IFS BSP 또는 LSP입니다. 비 IFS BSP 또는 LSP가 설치되어 있는지 여부를 프로그래밍 방식으로 확인하려면 WSCEnumerateProtocols 함수를 사용하여 사용 가능한 프로토콜을 열거합니다. 그런 다음 반환 WSAPROTOCOL_INFO 된 각 구조에서 멤버를 dwServiceFlag1 확인하여 플래그(0x20000)가 설정되었는지 확인 XP1_IFS_HANDLES 합니다. 함수에 대한 WSCEnumProtocols Windows SDK 설명서에는 이 작업을 수행하는 방법을 보여 주는 예제 프로그램에 대한 소스 코드가 포함되어 있습니다.

참고

  • 서비스 플래그 값은 Windows 7 및 Windows Server 2008 R2의 netsh 명령에 도입되었습니다. 따라서 netsh 명령을 사용하여 이 값을 확인해도 Windows Vista 또는 Windows Server 2008에서는 작동하지 않습니다.
  • 이 함수를 WSCEnumerateProtocols 사용하여 구조체와 멤버를 dwServiceFlag1 검색 WSAPROTOCOL_INFOW 하여 IFS/비 IFS BSP 또는 LSP가 설치되어 있는지 여부를 검색할 수 있습니다. 이 WSCEnumerateProtocols 함수는 Windows 2000 이상 버전에서 지원됩니다.
Posted by gurupia
,