WFP 설명선 드라이버는 classifyFn 설명선 함수에서 작업 유형 FWP_ACTION_PERMIT, FWP_ACTION_CONTINUE또는 FWP_ACTION_BLOCK 반환하여 네트워크 작업에 권한을 부여하거나 거부하거나 네트워크 패킷을 승인하거나 취소할 수 있습니다. 콜아웃 드라이버는 분류 가능한 필드, 메타데이터 또는 패킷과 같은 지정된 정보를 사용자 모드 애플리케이션 등의 다른 구성 요소로 전달하여 처리할 수 있을 때까지 classifyFn 함수에서 검사 결정을 반환할 수 없는 경우가 많습니다. 이러한 경우 나중에 비동기적으로 결정해야 할 수 있습니다.
비동기 처리에 대한 일반 규칙
WFP는 classifyFn 설명선 함수의 비동기 처리를 지원합니다. 그러나 이 작업을 수행하는 메커니즘은 다른 계층에 따라 다릅니다.
비동기 ALE 분류
설명선 드라이버는 FwpsPendOperation0 함수를 classifyFn에서 호출해야 합니다.
FwpsCompleteOperation0 함수를 호출하여 비동기 작업을 완료해야 합니다.
비동기 패킷 분류
설명선 드라이버는 classifyFn 함수에서 FWPS_CLASSIFY_OUT_FLAG_ABSORB 플래그가 설정된 상태로 FWP_ACTION_BLOCK을 반환해야 합니다. 네트워크 패킷을 참조하거나 복제해야 합니다. 복제되거나 수정된 패킷을 다시 연결하거나 패킷을 자동으로 삭제하여 비동기 작업이 완료됩니다.
패킷포함하는 비동기 ALE 분류
이전 두 프로시저의 조합이 사용됩니다. 분류 작업이 보류 중이고 패킷이 참조되거나 복제되고, 나중에 classifyFn 대한 호출이 완료되고 복제된 패킷이 다시 내보내지거나 삭제됩니다.
특수 사례 및 고려 사항
ALE Connect 및 수신/수락 계층
ALE 연결 계층(FWPS_LAYER_ALE_AUTH_CONNECT_V4 또는 FWPS_LAYER_ALE_AUTH_CONNECT_V6)에서 보류 중인 분류 작업을 완료하기 위해 FwpsCompleteOperation0 호출되면 ALE 재인증 분류 작업이 각 ALE 연결 계층에서 트리거됩니다. 설명선 호출 드라이버는 이 재인증 분류 작업에서 검사 결정을 반환해야 합니다.
FWP_CONDITION_FLAG_IS_REAUTHORIZE 플래그가 설정되었는지 여부를 확인하여 ALE 재인증 분류 작업을 감지할 수 있습니다.
콜아웃 드라이버는 FwpsCompleteOperation0 트리거된 재인증 중에 각 분류 작업에 대한 검사 결정을 조회할 수 있도록 각 보류 중인 ALE_AUTH_CONNECT 분류 작업에 대해 고유한 상태를 유지해야 합니다. 보류 중인 ALE_AUTH_CONNECT 분류 작업 중에 패킷을 참조하거나 복제하는 경우(예: TCP가 아닌 연결의 경우) 재인증이 발생한 후 다시 인덱싱할 수 있습니다.
ALE 수신/수락 계층(FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4 또는 FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6)에서 분류 작업을 수행하는 동안 FwpsCompleteOperation0 호출되는 경우 FwpsCompleteOperation0 ALE 재인증을 트리거하지 않습니다. 대신 classifyFn 대한 새 호출은 수정이 필터를 무시할 만큼 중요하지 않은 경우 복제된 패킷이 들어오는 경우 다시 만들어집니다. ALE_RECV_ACCEPT 계층에서 자체 주입 클론을 허용하면 들어오는 연결에 효과적으로 권한이 부여됩니다. 들어오는 연결을 허용하지 않는 경우 FwpsCompleteOperation0호출한 후 들어오는 패킷을 삭제합니다.
ALE 재인증
콜아웃 드라이버는 정책 변경(예: 계층에서 필터 추가 또는 제거), 새로운 인터페이스 도착 감지, IPsec을 사용한 연결 재키 지정과 같은 이벤트를 위해 ALE 연결 또는 수신/수락 계층에서 재분류할 수 있습니다. 이러한 재인증은 FwpsCompleteOperation0호출하여 보류할 수 없으며 그렇게 할 필요가 없습니다. 콜아웃 드라이버는 이전에 나열된 규칙을 사용하여 재인증 과정에서 표시된 패킷을 처리해야 합니다.
ALE_AUTH_CONNECT 또는 ALE_RECV_ACCEPT 계층에서 들어오는 패킷과 나가는 패킷을 모두 다시 인증할 수 있습니다. 예를 들어 들어오는 패킷은 ALE_AUTH_CONNECT 계층에서 다시 인증할 수 있습니다. 콜아웃 드라이버는 패킷의 방향이 연결의 방향과 동일하다고 가정해서는 안 됩니다.
ALE_FLOW_ESTABLISHED 레이어
이러한 계층(FWPS_LAYER_ALE_FLOW_ESTABLISHED_V4 또는 FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6)에서는 비동기 처리가 지원되지 않습니다.
인바운드_트랜스포트 계층
콜아웃 드라이버는 들어오는(인바운드) 전송 계층(FWPS_LAYER_INBOUND_TRANSPORT_V4 또는 FWPS_LAYER_INBOUND_TRANSPORT_V6)에서 ALE 분류 처리를 요구하는 패킷을 비동기적으로 처리하면 안 됩니다. 이렇게 하면 흐름 생성을 방해할 수 있습니다. WFP는 들어오는 전송 계층에서 classifyFn 콜아웃 함수를 호출 시, ALE 분류 처리가 필요한 패킷에 대한 FWPS_METADATA_FIELD_ALE_CLASSIFY_REQUIRED 플래그를 설정합니다. 콜아웃 드라이버는 INBOUND_TRANSPORT 계층에서 이러한 패킷을 허용해야 하며, 이러한 패킷이 ALE_RECV_ACCEPT 계층에 도달할 때까지 처리를 연기해야 합니다.
스트림 계층
스트림 계층(FWPS_LAYER_STREAM_V4 또는 FWPS_LAYER_STREAM_V6)에서 TCP 데이터 세그먼트는 IP 또는 TCP 헤더 대신 표시됩니다. 또한 스트림 계층은 classifyFn 콜아웃 함수에 대한 한 번의 호출에서 네트 버퍼 목록 체인을 지시할 수 있습니다. WFP는 스트림 계층 설명선에서 사용할 수 있는 특수 클론 및 삽입 함수인 FwpsCloneStreamData0 및 FwpsStreamInjectAsync0을 제공합니다.
스트림 계층 데이터의 정렬된 전달 특성으로 인해, 콜아웃 드라이버는 스트림 데이터가 여전히 대기 중일 때 데이터 복제 및 흡수를 계속해야 합니다. 지정된 스트림 흐름에 대한 비동기 및 동기 작업을 혼합하면 정의되지 않은 동작이 발생할 수 있습니다.