FwpsStreamInjectAsync0 함수(fwpsk.h)
FwpsStreamInjectAsync0 함수는 TCP 데이터 세그먼트를 TCP 데이터 스트림에 삽입합니다.
구문
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_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 플래그를 설정합니다.
[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 경우 netBufferList는 NULL일 수 있습니다.
[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 코드를 작동합니다.
반환 코드 | 설명 |
---|---|
|
데이터 스트림에 대한 삽입이 성공적으로 시작되었습니다. 필터 엔진은 필터 엔진이 데이터 스트림에 데이터 삽입을 완료한 후 NET_BUFFER_LIST 구조가 할당되었을 때 지정된 완성 함수를 호출합니다. |
|
TCP/IP 네트워크 스택은 스트림 데이터 삽입을 허용할 준비가 되지 않았습니다. |
|
삽입 핸들이 닫혀 있습니다. |
|
오류가 발생했습니다. |
설명
설명선 드라이버는 설명선의 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 |