다음을 통해 공유


FwpsInjectTransportSendAsync1 함수(fwpsk.h)

FwpsInjectTransportSendAsync1 함수는 전송, 데이터그램 데이터 또는 ICMP 오류 계층의 패킷 데이터를 전송 데이터 경로에 삽입합니다. 이 함수는 업데이트된 매개 변수 구조를 인수로 사용한다는 점에서 이전 버전(FwpsInjectTransportSendAsync0)과 다릅니다.

참고FwpsInjectTransportSendAsync1 Windows 7 이상에서 사용되는 FwpsInjectTransportSendAsync 특정 버전입니다. 자세한 내용은 WFP Version-Independent 이름 및 특정 버전의 Windows 대상으로 지정을 참조하세요. Windows Vista의 경우 FwpsInjectTransportSendAsync0 사용할 수 있습니다.
 

통사론

NTSTATUS FwpsInjectTransportSendAsync1(
  [in]           HANDLE                      injectionHandle,
  [in, optional] HANDLE                      injectionContext,
  [in]           UINT64                      endpointHandle,
  [in]           UINT32                      flags,
  [in, optional] FWPS_TRANSPORT_SEND_PARAMS1 *sendArgs,
  [in]           ADDRESS_FAMILY              addressFamily,
  [in]           COMPARTMENT_ID              compartmentId,
  [in, out]      NET_BUFFER_LIST             *netBufferList,
  [in]           FWPS_INJECT_COMPLETE0       completionFn,
  [in, optional] HANDLE                      completionContext
);

매개 변수

[in] injectionHandle

에 대한 호출로 이전에 만든 삽입 핸들 FwpsInjectionHandleCreate0 함수를.

[in, optional] injectionContext

삽입 컨텍스트에 대한 선택적 핸들입니다. 지정된 경우 패킷 주입 상태 FWPS_PACKET_INJECTION_STATEFWPS_PACKET_INJECTED_BY_SELF 또는 FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELFFwpsQueryPacketInjectionState0 함수를 호출하여 가져올 수 있습니다.

[in] endpointHandle

패킷을 삽입할 송신 데이터 경로의 스택 전송 엔드포인트를 나타내는 핸들입니다. 이 엔드포인트 핸들은 transportEndpointHandle 멤버를 통해 설명선에 제공됩니다. 설명선 드라이버의 classifyFn 설명선 함수에 전달되는 FWPS_INCOMING_METADATA_VALUES0 구조체입니다. 설명선 드라이버는 제공된 핸들을 사용하여 스택 엔드포인트와 연결된 소켓이 닫히고 핸들이 더 이상 유효하지 않게 되기 전에 가능한 한 빨리 복제된 패킷을 데이터 경로에 다시 삽입해야 합니다.

[in] flags

이 매개 변수는 예약되어 있습니다. 설명선 드라이버는 이 매개 변수를 0으로 설정해야 합니다.

[in, optional] sendArgs

a에 대한 포인터 현재 아웃바운드 패킷의 속성을 지정하는 FWPS_TRANSPORT_SEND_PARAMS1 구조체입니다. 이 매개 변수는 삽입할 순 버퍼 목록에 IP 헤더가 포함된 경우에만 NULL 수 있습니다(예: 패킷이 원시 소켓을 통해 전송되는 경우).

[in] addressFamily

다음 주소 패밀리 중 하나입니다.

AF_INET

IPv4 주소 패밀리입니다.

AF_INET6

IPv6 주소 패밀리입니다.

[in] compartmentId

패킷 데이터가 삽입되는 라우팅 구획의 식별자이며 COMPARTMENT_ID 형식으로 지정됩니다. 이 식별자는 구획Id 멤버를 통해 설명선에 제공됩니다. 설명선 드라이버의 classifyFn 설명선 함수에 전달되는 FWPS_INCOMING_METADATA_VALUES0 구조체입니다. compartmentId 멤버를 설명선에 사용할 수 있는 경우 FWPS_METADATA_FIELD_COMPARTMENT_ID currentMetadataValues 멤버에 설정됩니다. 그렇지 않으면 이 매개 변수를 UNSPECIFIED_COMPARTMENT_ID 설정합니다.

[in, out] netBufferList

삽입되는 패킷 데이터를 설명하는 NET_BUFFER_LIST 구조체에 대한 포인터입니다. 설명선 드라이버는 다음 중 하나를 호출하여 패킷 데이터를 삽입하는 데 사용할 NET_BUFFER_LIST 구조를 할당합니다. FwpsAllocateCloneNetBufferList0 함수 또는 FwpsAllocateNetBufferAndNetBufferList0 함수입니다.

[in] completionFn

설명선 드라이버에서 제공하는 completionFn 설명선 함수에 대한 포인터입니다. 필터 엔진은 netBufferList 매개 변수에 설명된 패킷 데이터가 네트워크 스택에 삽입된 후 이 함수를 호출합니다.

[in, optional] completionContext

completionFn 매개 변수가 가리키는 설명선 함수에 전달되는 설명선 드라이버 제공 컨텍스트에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL 수 있습니다.

반환 값

FwpsInjectTransportSendAsync1 함수는 다음 NTSTATUS 코드 중 하나를 반환합니다.

반환 코드 묘사
STATUS_SUCCESS
패킷 데이터 주입이 성공적으로 시작되었습니다. 필터 엔진이 패킷 데이터를 네트워크 스택에 삽입하는 작업이 완료된 후 또는 이후에 오류가 발생한 경우 필터 엔진에서 완료 함수를 호출합니다. 오류가 발생할 경우 완료된 NET_BUFFER_LIST 구조의 상태 멤버는 실패 이유를 나타냅니다.
STATUS_FWP_TCPIP_NOT_READY
TCP/IP 네트워크 스택은 패킷 데이터 주입을 허용할 준비가 되지 않았습니다.
STATUS_FWP_INJECT_HANDLE_CLOSING
삽입 핸들이 닫히고 있습니다.
기타 상태 코드
오류가 발생했습니다.

발언

설명선 드라이버는 FwpsInjectTransportSendAsync1 함수를 호출하여 전송, 데이터그램 데이터 또는 ICMP 오류 계층의 패킷 데이터를 송신 데이터 경로에 삽입합니다. 이러한 계층에서 IP 헤더가 아직 형성되지 않았을 수 있으며 IPsec 정책이 활성화되면 패킷 데이터가 암호화되거나 서명되지 않습니다. 따라서 이 함수는 IPsec 사용 환경에서 패킷 검사에 사용하기에 이상적입니다.

이 함수는 비동기적으로 실행할 수 있습니다.

반환 값이 STATUS_SUCCESS않으면 완료 함수가 호출되지 않습니다. 이 경우 netBufferList 가리키는 순 버퍼 목록은 FwpsFreeNetBufferList0 또는 FwpsFreeCloneNetBufferList0호출하여 해제되어야 합니다.

설명선 드라이버는 일반적으로 패킷 데이터를 수정할 때 네트워크 스택에 데이터를 삽입합니다. 설명선 드라이버가 패킷 데이터를 수정하는 방법에 대한 자세한 내용은 설명선 드라이버 작업참조하세요.

삽입된 패킷을 설명선 드라이버에 다시 표시할 수 있습니다. 무한 루프를 방지하려면 드라이버가 먼저 다음을 호출해야 합니다. classifyFn 설명선 함수를 호출하기 전에 FwpsQueryPacketInjectionState0 함수를 삽입 상태가 FWPS_PACKET_INJECTION_STATEFWPS_PACKET_INJECTED_BY_SELF 또는 FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF설정된 패킷을 허용합니다.

endpointHandle 매개 변수 및
sendArgs 매개 변수가 가리키는 FWPS_TRANSPORT_SEND_PARAMS1 구조체는 다음 네트워크 계층의 설명선에 제공됩니다.

FWPS_LAYER_OUTBOUND_TRANSPORT_V4
FWPS_LAYER_OUTBOUND_TRANSPORT_V6
FWPS_LAYER_DATAGRAM_DATA_V4(FWP_DIRECTION_OUTBOUND 사용하여 아웃바운드 방향을 지정하는 경우)
FWPS_LAYER_DATAGRAM_DATA_V6(FWP_DIRECTION_OUTBOUND 아웃바운드 방향을 지정하는 경우)
FWPS_LAYER_OUTBOUND_ICMP_ERROR_V4
FWPS_LAYER_OUTBOUND_ICMP_ERROR_V6

다음 두 가지 모두 true인 경우 데이터그램은 원시 소켓에 속합니다.

다음 네트워크 계층에서 데이터그램이 원시 소켓에 속하는 경우 headerIncludeHeader 복사하고 headerIncludeHeaderLengthFWPS_INCOMING_METADATA_VALUES0 구조체의 멤버를 sendArgs 매개 변수가 가리키는 FWPS_TRANSPORT_SEND_PARAMS1 구조체의 해당 멤버로 복사해야 합니다.

  • FWPS_LAYER_DATAGRAM_DATA_V4(FWP_DIRECTION_OUTBOUND 사용하여 아웃바운드 방향을 지정하는 경우)
  • FWPS_LAYER_DATAGRAM_DATA_V6(FWP_DIRECTION_OUTBOUND 아웃바운드 방향을 지정하는 경우)

요구 사항

요구
지원되는 최소 클라이언트 Windows 7부터 사용할 수 있습니다.
대상 플랫폼 보편적
헤더 fwpsk.h(Fwpsk.h 포함)
라이브러리 Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

참고 항목

FWPS_INCOMING_METADATA_VALUES0

FWPS_PACKET_INJECTION_STATE

FWPS_TRANSPORT_SEND_PARAMS1

FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsFreeCloneNetBufferList0

FwpsFreeNetBufferList0

FwpsInjectTransportSendAsync0

FwpsInjectionHandleCreate0

FwpsInjectionHandleDestroy0

FwpsQueryPacketInjectionState0

NET_BUFFER_LIST

classifyFn

완료Fn