FwpsStreamInjectAsync0 함수(fwpsk.h)

FwpsStreamInjectAsync0 함수는 TCP 데이터 세그먼트를 TCP 데이터 스트림에 삽입합니다.

참고FwpsStreamInjectAsync0특정 버전의 FwpsStreamInjectAsync입니다. 자세한 내용은 WFP Version-Independent 이름 및 특정 버전의 Windows 대상 지정 을 참조하세요.
 

구문

NTSTATUS FwpsStreamInjectAsync0(
  [in]           HANDLE                injectionHandle,
  [in, optional] HANDLE                injectionContext,
  [in]           UINT32                flags,
  [in]           UINT64                flowId,
  [in]           UINT32                calloutId,
  [in]           UINT16                layerId,
  [in]           UINT32                streamFlags,
  [in, out]      NET_BUFFER_LIST       *netBufferList,
  [in]           SIZE_T                dataLength,
  [in]           FWPS_INJECT_COMPLETE0 completionFn,
  [in, optional] HANDLE                completionContext
);

매개 변수

[in] injectionHandle

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

[in, optional] injectionContext

삽입 컨텍스트에 대한 선택적 핸들입니다.

[in] flags

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

[in] flowId

데이터를 삽입할 데이터 흐름을 지정하는 런타임 식별자입니다. 데이터 흐름에 대한 런타임 식별자는 필터 엔진이 콜아웃 드라이버의 classifyFn 콜아웃 함수에 제공한 FWPS_METADATA_FIELD_FLOW_HANDLE 메타데이터 값을 통해 콜아웃 드라이버에 제공됩니다.

[in] calloutId

필터 엔진의 콜아웃에 대한 런타임 식별자입니다. 이 식별자는 설명선 드라이버가 FwpsCalloutRegister0 또는 FwpsCalloutRegister1 함수를 호출하여 콜아웃을 필터 엔진에 등록할 때 반환되었습니다.

[in] layerId

데이터 스트림이 처리되는 필터링 계층에 대한 런타임 식별자입니다. 이 값은 FWPS_LAYER_STREAM_V4 또는 FWPS_LAYER_STREAM_V6. 데이터 스트림이 처리되는 계층에 대한 런타임 식별자는 필터 엔진이 설명선 드라이버의 classifyFn 설명선 함수에 전달한 FWPS_INCOMING_VALUES0 구조체의 layerId 멤버에 있는 설명선에 제공됩니다.

[in] streamFlags

데이터를 삽입할 데이터 스트림의 특성을 지정하는 플래그입니다.

인바운드 데이터 스트림에 데이터를 삽입할 때 설명선 드라이버는 다음 플래그 중 하나 이상을 지정합니다.

FWPS_STREAM_FLAG_RECEIVE

인바운드 데이터 스트림에 데이터를 삽입하도록 지정합니다. 이 플래그는 인바운드 데이터 스트림에 데이터를 삽입할 때 필요합니다.

FWPS_STREAM_FLAG_RECEIVE_DISCONNECT

인바운드 데이터 스트림에 삽입되는 데이터의 TCP 헤더에 FIN 플래그를 설정하도록 지정합니다.

참고 이 플래그를 설정하면 FWPS_STREAM_FLAG_RECEIVE 플래그도 설정해야 합니다. 그렇지 않으면 STATUS_FWP_INVALID_PARAMETER 반환됩니다.
 

FWPS_STREAM_FLAG_RECEIVE_EXPEDITED

인바운드 데이터 스트림에 삽입되는 데이터가 우선 순위가 높은 대역 외 데이터임을 지정합니다.

FWPS_STREAM_FLAG_RECEIVE_PUSH

인바운드 데이터가 TCP 헤더에 설정된 PUSH 플래그를 사용하여 도착했음을 지정합니다. 이는 발신자가 즉시 데이터 전송을 요청했음을 나타냅니다. 이 플래그가 설정되지 않은 경우 원치 않는 데이터 전송 지연이 발생할 수 있습니다. 이 플래그는 WINDOWS Vista SP1부터 사용할 수 있습니다.

아웃바운드 데이터 스트림에 데이터를 삽입할 때 설명선 드라이버는 다음 플래그 중 하나 이상을 지정합니다.

FWPS_STREAM_FLAG_SEND

데이터가 아웃바운드 데이터 스트림에 삽입되도록 지정합니다. 이 플래그는 아웃바운드 데이터 스트림에 데이터를 삽입할 때 필요합니다.

FWPS_STREAM_FLAG_SEND_EXPEDITED

아웃바운드 데이터 스트림에 삽입되는 데이터가 우선 순위가 높은 대역 외 데이터임을 지정합니다.

FWPS_STREAM_FLAG_SEND_NODELAY

설명선 드라이버가 아웃바운드 데이터 스트림에 삽입되는 데이터의 버퍼링이 없음을 요청하도록 지정합니다.

FWPS_STREAM_FLAG_SEND_DISCONNECT

아웃바운드 데이터 스트림에 삽입되는 데이터가 전송된 후 스트림의 연결이 끊어지도록 지정합니다. 네트워크 스택은 전송된 마지막 패킷의 TCP 헤더에 FIN 플래그를 설정합니다.

참고 이 플래그를 설정하면 FWPS_STREAM_FLAG_SEND 플래그도 설정해야 합니다. 그렇지 않으면 STATUS_FWP_INVALID_PARAMETER 반환됩니다.
 

[in, out] netBufferList

데이터 스트림에 삽입되는 데이터를 설명하는 NET_BUFFER_LIST 구조체에 대한 포인터입니다. 설명선 드라이버는 를 호출하여 데이터 스트림에 데이터를 삽입하는 데 사용할 NET_BUFFER_LIST 구조를 할당합니다. FwpsAllocateCloneNetBufferList0, FwpsAllocateNetBufferAndNetBufferList0 또는 FwpsCloneStreamData0 함수. NET_BUFFER_LIST 구조는 네트워크 버퍼 목록 체인을 설명할 수 있습니다. streamFlags 매개 변수가 FWPS_STREAM_FLAG_RECEIVE_DISCONNECT 또는 FWPS_STREAM_FLAG_SEND_DISCONNECT 경우 netBufferListNULL일 수 있습니다.

[in] dataLength

데이터 스트림에 삽입되는 데이터의 바이트 수입니다.

[in] completionFn

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

netBufferList 매개 변수가 NET_BUFFER_LIST 체인을 설명하는 경우 chain의 각 NET_BUFFER_LIST대해 completionFn이 한 번 호출됩니다.

netBufferList 매개 변수가 NULL이고 streamFlags 매개 변수에 FWPS_STREAM_FLAG_RECEIVE_DISCONNECT 또는 FWPS_STREAM_FLAG_SEND_DISCONNECT 설정된 경우 completionFn 함수가 호출되지 않습니다.

이 매개 변수는 필수이며 NULL일 수 없습니다. NULL인 경우 STATUS_FWP_NULL_POINTER 반환됩니다.

[in, optional] completionContext

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

반환 값

FwpsStreamInjectAsync0은 다음 중 하나와 같은 NTSTATUS 코드를 작동합니다.

반환 코드 설명
STATUS_SUCCESS
데이터 스트림에 대한 삽입이 성공적으로 시작되었습니다. 필터 엔진은 필터 엔진이 데이터 스트림에 데이터 삽입을 완료한 후 NET_BUFFER_LIST 구조가 할당되었을 때 지정된 완성 함수를 호출합니다.
STATUS_FWP_TCPIP_NOT_READY
TCP/IP 네트워크 스택은 스트림 데이터 삽입을 허용할 준비가 되지 않았습니다.
STATUS_FWP_INJECT_HANDLE_CLOSING
삽입 핸들이 닫혀 있습니다.
기타 상태 코드
오류가 발생했습니다.

설명

설명선 드라이버는 설명선의 classifyFn 설명선 함수 내에서 FwpsStreamInjectAsync0 함수를 호출하여 현재 처리 중인 데이터 스트림에 새 데이터 또는 복제된 데이터를 삽입합니다. 설명선 드라이버는 스트림 계층에서 데이터 흐름을 처리하는 경우에만 FwpsStreamInjectAsync0 함수를 호출할 수 있습니다.

설명선 드라이버는 설명선의 classifyFn 설명선 함수 외부에서 FwpsStreamInjectAsync0 함수를 호출하여 현재 지연된 데이터 스트림에 데이터를 삽입할 수도 있습니다. 콜아웃의 classifyFn 콜아웃 함수가 의 streamAction 멤버를 설정하면 데이터 스트림이 지연됩니다. FWPS_STREAM_ACTION_DEFER 구조체를 FWPS_STREAM_CALLOUT_IO_PACKET0.

또한 설명선 드라이버는 설명선의 classifyFn 설명선 함수 외부에서 FwpsStreamInjectAsync0 함수를 호출하여 FIN 표시가 보류된 후 데이터 스트림에 데이터를 삽입할 수 있습니다.

또는 설명선 드라이버가 대역 외 처리를 위해 표시된 모든 데이터를 복제하고 차단하는 경우 설명선 드라이버는 설명선의 classifyFn 설명선 함수 외부에 있는 임의의 스레드 컨텍스트에서 FwpsStreamInjectAsync0 함수를 호출할 수 있습니다. 표시된 모든 데이터를 처리를 위해 사용자 모드로 리디렉션하는 설명선 드라이버는 이러한 방식으로 FwpsStreamInjectAsync0 함수를 호출할 수 있습니다.

설명선은 먼저 FwpsCloneStreamData0 함수를 호출하여 복제한 다음, FWPS_CLASSIFY_OUT0 구조의actionType 멤버에서 FWP_ACTION_BLOCK 설정하여 데이터 세그먼트를 차단하여 데이터 세그먼트를 보류할 수 있습니다.

삽입된 스트림 데이터는 설명선에 다시 적용되지 않지만 중량이 낮은 하위 계층에서 설명선 스트리밍에 사용할 수 있습니다.

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

요구 사항

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

추가 정보

FWPS_INCOMING_VALUES0

FWPS_STREAM_CALLOUT_IO_PACKET0 FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsCalloutRegister0

FwpsCalloutRegister1

FwpsCloneStreamData0

FwpsInjectionHandleCreate0

FwpsInjectionHandleDestroy0

NET_BUFFER_LIST

classifyFn

completionFn