다음을 통해 공유


모범 사례(Windows 필터링 플랫폼)

다음 목록에는 WFP(Windows Filtering Platform) API를 사용하여 애플리케이션을 개발하기 위한 모범 사례가 포함되어 있습니다.

  • 동적 세션을 사용합니다.

    많은 애플리케이션이 시작 시 필터링 정책 개체를 추가한 다음 중지 시 이러한 개체를 삭제합니다. 동적 세션을 사용하면 애플리케이션이 충돌하더라도 이러한 개체가 삭제되도록 보장합니다. 또한 각 개체를 삭제하기 위해 개별 호출을 하는 것보다 정지 시 엔진 핸들을 닫는 것이 더 효율적입니다.

  • 트랜잭션 시간 제한을 정상적으로 처리하거나 세션 txnWaitTimeoutInMSec 을 무한으로 설정하여 시간 제한을 방지합니다.

    명시적 트랜잭션을 사용하지 않더라도 대부분의 호출은 암시적 트랜잭션에서 계속 실행되므로 시간 초과가 가능합니다.

  • 명시적 트랜잭션을 사용하여 관련된 추가 또는 삭제 작업을 단일 트랜잭션으로 결합합니다.

    이는 더 효율적이며 오류 경로에서 부분 결과를 쉽게 클린 수 있습니다.

  • MUI 규격 문자열을 사용합니다.

    모든 지역화 가능한 문자열은 공통 데이터 구조인 FWPM_DISPLAY_DATA0 저장됩니다. 이 구조체 내의 문자열은 SHLoadIndirectString에서 지원하는 형식의 간접 문자열일 수 있습니다. 함수에서 FWPM_DISPLAY_DATA0 구조체를 반환하기 전에 호출자의 로캘을 사용하여 간접 문자열이 지정된 문자열 리소스로 확인됩니다.

  • 모든 개체를 공급자에 연결합니다.

    시스템에 여러 공급자가 설치되어 있으면 진단 도구에서 누가 무엇을 추가했는지 쉽게 확인할 수 있습니다.

  • 사용자 고유의 하위 계층에 필터를 추가합니다.

    하위 계층의 종료 필터가 적중되면 해당 하위 계층의 필터가 더 이상 평가되지 않습니다. 따라서 필터를 다른 공급자와 동일한 하위 계층에 추가하면 서로의 필터가 호출되지 않아 예기치 않은 결과가 발생할 수 있습니다.

  • 패킷 지향 필터링 대신 ALE(애플리케이션 계층 적용)을 사용합니다.

    패킷 계층에서 필터링하는 속도가 느립니다.

  • ICMP 오류 및 RST 이벤트가 생성되기 전에 필터링합니다.

    이렇게 하면 이러한 이벤트가 생성된 후 필터링하는 것이 더 효율적입니다.

  • 전송 계층이 아닌 Stream/Datagram 데이터 계층에서 패킷 검사를 수행합니다.

    이는 설명선 개발에 적용됩니다. 자세한 내용은 WDK(Windows 드라이버 키트)의 설명선 드라이버 프로그래밍 고려 사항을 참조하세요.

  • 복잡한 필터를 사용할 때 성능에 미치는 영향을 고려합니다.

    Windows 7 및 Windows Server 2008 R2부터 동일한 필드 키를 사용하는 여러 조건으로 필터를 만들 수 있습니다. 이렇게 하면 필터를 더 적게 사용하여 복잡한 정책을 만들 수 있습니다. 그러나 이러한 복잡한 필터는 WFP 필터 엔진의 성능이 저하될 수 있습니다. 이러한 필터를 사용하면 솔루션의 전반적인 성능에 부정적인 영향을 미치는지 여부를 확인하기 위한 평가가 이루어져야 합니다.