설명선 드라이버 프로그래밍 고려 사항
Windows 필터링 플랫폼 콜아웃 드라이버를 프로그래밍할 때 다음 topics 고려합니다.
사용자 모드 및 커널 모드
Windows 필터링 플랫폼에 기본 제공되는 표준 필터링 기능을 사용하여 원하는 필터링을 수행할 수 있는 경우 ISV(독립 소프트웨어 공급업체)는 커널 모드 설명선 드라이버를 작성하는 대신 필터 엔진을 구성하는 사용자 모드 관리 애플리케이션을 작성해야 합니다. 커널 모드 콜아웃 드라이버는 기본 제공 표준 필터링 기능에서 처리할 수 없는 방식으로 네트워크 데이터를 처리해야 하는 경우에만 작성해야 합니다. 사용자 모드 Windows 필터링 플랫폼 관리 애플리케이션을 작성하는 방법에 대한 자세한 내용은 Microsoft Windows SDK Windows 필터링 플랫폼 설명서를 참조하세요.
필터링 계층 선택
콜아웃 드라이버는 네트워크 스택에서 가능한 가장 높은 필터링 계층에서 네트워크 데이터를 필터링해야 합니다. 예를 들어 원하는 필터링 작업을 스트림 계층에서 처리할 수 있는 경우 네트워크 계층에서 구현하면 안 됩니다. 드라이버가 Windows에서 IPsec과의 호환성을 보장하는 데 사용해야 하는 필터링 계층의 권장 사항에 대한 자세한 내용은 IPsec-Compatible 설명선 드라이버 개발을 참조하세요.
ALE(애플리케이션 계층 적용) 흐름 설정 계층에서 차단
일반적으로 ALE 흐름 설정 필터링 계층(FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4 또는 FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6 중 하나에서 필터 엔진에 설명선이 추가된 경우 classifyFn 설명선 함수는 작업에 대한 FWP_ACTION_BLOCK 반환하지 않아야 합니다. ALE 흐름이 설정된 필터링 계층 중 하나에서 연결을 승인하거나 거부하도록 결정해서는 안 됩니다. 이러한 결정은 항상 다른 ALE 필터링 계층 중 하나에서 이루어져야 합니다.
이러한 classifyFn 설명선 함수가 작업에 대한 FWP_ACTION_BLOCK 반환하는 유일한 유효한 이유는 설정된 연결이 종료되지 않은 경우 잠재적인 보안 위험을 초래할 수 있는 오류가 발생하는 경우입니다. 이 경우 작업에 대한 FWP_ACTION_BLOCK 반환하면 잠재적인 보안 위험이 악용되지 않도록 연결이 닫힙니다.
Callout 함수 실행 시간
필터 엔진은 일반적으로 IRQL = DISPATCH_LEVEL 설명선의 설명선 함수를 호출하므로 이러한 함수가 가능한 한 빨리 실행을 완료하여 시스템이 효율적으로 실행되도록 해야 합니다. IRQL = DISPATCH_LEVEL 확장 실행은 시스템의 전반적인 성능에 부정적인 영향을 줄 수 있습니다.
수신 데이터 경로에 삽입
설명선은 IP 패킷 조각에서 패킷을 다시 조립할 때 원래 패킷의 체크섬이 올바르지 않을 수 있으므로 수신 데이터 경로에 삽입하는 패킷 삽입 함수 를 호출하기 전에 IP 체크섬을 다시 계산해야 합니다. 순 버퍼 목록이 조각에서 다시 어셈블되는지 여부를 나타내는 신뢰할 수 있는 메커니즘은 없습니다.
전송 계층에서 TCP 패킷 인라인 삽입
TCP 스택의 잠금 동작으로 인해 전송 계층의 콜아웃은 classifyFn 콜아웃 함수에서 새 또는 복제된 TCP 패킷을 삽입할 수 없습니다. 인라인 삽입이 필요한 경우 설명선은 DPC를 큐에 대기하여 삽입을 수행해야 합니다.
나가는 IP 헤더 맞춤
패킷 삽입 함수 중 하나를 사용하여 패킷 데이터를 나가는 경로에 삽입할 때 net 버퍼 목록(NET_BUFFER_CURRENT_MDL(NET_BUFFER_LIST_FIRST_NB(netBufferList)))의 IP 헤더를 설명하는 MDL을 포인터로 정렬해야 합니다. 들어오는 패킷의 IP 헤더 MDL이 포인터 정렬될 수 있으므로 들어오는 패킷을 나가는 경로에 삽입할 때 콜아웃에서 IP 헤더(아직 정렬되지 않은 경우)를 다시 빌드해야 합니다.