FwpsInjectTransportSendAsync1 함수(fwpsk.h)
FwpsInjectTransportSendAsync1 함수는 전송, 데이터그램 데이터 또는 ICMP 오류 계층의 패킷 데이터를 전송 데이터 경로에 삽입합니다. 이 함수는 업데이트된 매개 변수 구조를 인수로 사용한다는 점에서 이전 버전(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_STATE FWPS_PACKET_INJECTED_BY_SELF 또는 FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF 때 FwpsQueryPacketInjectionState0 함수를 호출하여 가져올 수 있습니다.
[in] endpointHandle
패킷을 삽입할 송신 데이터 경로의 스택 전송 엔드포인트를 나타내는 핸들입니다. 이 엔드포인트 핸들은 설명선 드라이버의 classifyFn 설명선 함수에 전달되는 FWPS_INCOMING_METADATA_VALUES0 구조체의 transportEndpointHandle 멤버를 통해 설명선에 제공됩니다. 설명선 드라이버는 제공된 핸들을 사용하여 스택 엔드포인트와 연결된 소켓이 닫혀 있고 핸들이 더 이상 유효하지 않게 되기 전에 가능한 한 빨리 복제된 패킷을 데이터 경로에 다시 삽입해야 합니다.
[in] flags
이 매개 변수는 예약되어 있습니다. 설명선 드라이버는 이 매개 변수를 0으로 설정해야 합니다.
[in, optional] sendArgs
현재 아웃바운드 패킷의 속성을 지정하는 FWPS_TRANSPORT_SEND_PARAMS1 구조체에 대한 포인터입니다. 이 매개 변수는 삽입할 net 버퍼 목록에 IP 헤더가 포함된 경우에만 NULL 일 수 있습니다(예: 패킷이 원시 소켓을 통해 전송되는 경우).
[in] addressFamily
다음 주소 패밀리 중 하나입니다.
AF_INET
IPv4 주소 패밀리입니다.
AF_INET6
IPv6 주소 패밀리입니다.
[in] compartmentId
패킷 데이터가 삽입되는 라우팅 구획의 식별자이며 COMPARTMENT_ID 형식으로 지정됩니다. 이 식별자는 설명선 드라이버의 classifyFn 설명선 함수에 전달되는 FWPS_INCOMING_METADATA_VALUES0 구조체의 compartmentId 멤버를 통해 설명선에 제공됩니다. 구획 Id 멤버를 설명선에 사용할 수 있는 경우 FWPS_METADATA_FIELD_COMPARTMENT_ID currentMetadataValues 멤버에 설정됩니다. 그렇지 않으면 이 매개 변수를 UNSPECIFIED_COMPARTMENT_ID 설정합니다.
[in, out] netBufferList
삽입되는 패킷 데이터를 설명하는 NET_BUFFER_LIST 구조체에 대한 포인터입니다. 설명선 드라이버는 FwpsAllocateCloneNetBufferList0 함수 또는 FwpsAllocateNetBufferAndNetBufferList0 함수를 호출 하여 패킷 데이터를 삽입하는 데 사용할 NET_BUFFER_LIST 구조를 할당합니다.
[in] completionFn
설명선 드라이버에서 제공하는 completionFn 설명선 함수에 대한 포인터입니다. 필터 엔진은 netBufferList 매개 변수로 설명된 패킷 데이터가 네트워크 스택에 삽입된 후 이 함수를 호출합니다.
[in, optional] completionContext
completionFn 매개 변수가 가리키는 설명선 함수에 전달되는 설명선 드라이버 제공 컨텍스트에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.
반환 값
FwpsInjectTransportSendAsync1 함수는 다음 NTSTATUS 코드 중 하나를 반환합니다.
| 반환 코드 | 설명 |
|---|---|
|
패킷 데이터 주입이 성공적으로 시작되었습니다. 필터 엔진이 네트워크 스택에 패킷 데이터 삽입을 완료한 후 또는 이후에 오류가 발생한 경우 필터 엔진이 완료 함수를 호출합니다. 오류가 발생할 경우 완료된 NET_BUFFER_LIST 구조체의 상태 멤버는 실패 이유를 나타냅니다. |
|
TCP/IP 네트워크 스택이 패킷 데이터 삽입을 허용할 준비가 되지 않았습니다. |
|
삽입 핸들이 닫혀 있습니다. |
|
오류가 발생했습니다. |
설명
설명선 드라이버는 FwpsInjectTransportSendAsync1 함수를 호출하여 전송, 데이터그램 데이터 또는 ICMP 오류 계층의 패킷 데이터를 전송 데이터 경로에 삽입합니다. 이러한 계층에서는 IP 헤더가 아직 구성되지 않았을 수 있으며 IPsec 정책이 활성화된 경우 패킷 데이터가 암호화되거나 서명되지 않습니다. 따라서 이 함수는 IPsec 사용 환경에서 패킷 검사에 사용하는 데 이상적입니다.
이 함수는 비동기적으로 실행할 수 있습니다.
반환 값이 STATUS_SUCCESS 않으면 완료 함수가 호출되지 않습니다. 이 경우 netBufferList 가 가리키는 순 버퍼 목록은 FwpsFreeNetBufferList0 또는 FwpsFreeCloneNetBufferList0 호출로 해제되어야 합니다.
설명선 드라이버는 일반적으로 패킷 데이터를 수정할 때 데이터를 네트워크 스택에 삽입합니다. 설명선 드라이버가 패킷 데이터를 수정하는 방법에 대한 자세한 내용은 설명선 드라이버 작업을 참조하세요.
삽입된 패킷을 설명선 드라이버에 다시 표시할 수 있습니다. 무한 루프를 방지하려면 드라이버는 classifyFn 설명선 함수를 호출하기 전에 먼저 FwpsQueryPacketInjectionState0 함수를 호출하고 삽입 상태가 FWPS_PACKET_INJECTION_STATE FWPS_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
데이터그램은 다음 두 가지 모두에 해당하는 경우 원시 소켓에 속합니다.
- FWPS_INCOMING_METADATA_VALUES0 구조체의 currentMetadataValues 멤버에는 FWPS_METADATA_FIELD_IP_HEADER_SIZE 플래그 집합이 있습니다.
- FWPS_INCOMING_METADATA_VALUES0 구조체의 ipHeaderSize 멤버가 0보다 큽니다.
다음 네트워크 계층에서 데이터그램이 원시 소켓에 속하는 경우 FWPS_INCOMING_METADATA_VALUES0 구조체의 headerIncludeHeader 및 headerIncludeHeaderLength 멤버를 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
FwpsAllocateCloneNetBufferList0
FwpsAllocateNetBufferAndNetBufferList0
피드백
다음에 대한 사용자 의견 제출 및 보기