FwpsInjectNetworkSendAsync0 함수(fwpsk.h)

FwpsInjectNetworkSendAsync0 함수는 패킷 데이터를 송신 데이터 경로에 삽입합니다.

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

구문

NTSTATUS FwpsInjectNetworkSendAsync0(
  [in]           HANDLE                injectionHandle,
  [in, optional] HANDLE                injectionContext,
  [in]           UINT32                flags,
  [in]           COMPARTMENT_ID        compartmentId,
  [in, out]      NET_BUFFER_LIST       *netBufferList,
  [in]           FWPS_INJECT_COMPLETE0 completionFn,
  [in, optional] HANDLE                completionContext
);

매개 변수

[in] injectionHandle

flags 매개 변수가 FWPS_INJECTION_TYPE_NETWORK 설정된 FwpsInjectionHandleCreate0 함수를 호출하여 이전에 만든 삽입 핸들입니다.

[in, optional] injectionContext

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

[in] flags

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

[in] compartmentId

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

[in, out] netBufferList

삽입되는 패킷 데이터를 설명하는 NET_BUFFER_LIST 구조체에 대한 포인터입니다. 설명선 드라이버는 FwpsAllocateCloneNetBufferList0 함수 또는 FwpsAllocateNetBufferAndNetBufferList0 함수를 호출하여 패킷 데이터를 삽입하는 데 사용할 NET_BUFFER_LIST 구조를 할당합니다. NET_BUFFER_LIST 구조체는 IP 헤더로 시작해야 합니다.

[in] completionFn

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

[in, optional] completionContext

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

반환 값

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

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

설명

설명선 드라이버는 FwpsInjectNetworkSendAsync0 함수를 호출하여 네트워크 패킷 데이터를 송신 데이터 경로에 삽입합니다. 이 함수는 비동기적으로 실행할 수 있습니다. 일반적으로 콜아웃 드라이버는 패킷 데이터를 수정할 때 네트워크 스택에 데이터를 삽입합니다. 설명선 드라이버가 패킷 데이터를 수정하는 방법에 대한 자세한 내용은 설명선 드라이버 작업을 참조하세요.

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

삽입된 패킷을 콜아웃 드라이버에 다시 표시할 수 있습니다. 무한 반복을 방지하려면 드라이버가 먼저 를 호출해야 합니다.classifyFn 설명선 함수에 대한 호출을 진행하기 전에 FwpsQueryPacketInjectionState0 함수가 있으며 드라이버는 삽입 상태가 FWPS_PACKET_INJECTION_STATE FWPS_PACKET_INJECTED_BY_SELF 또는 FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF 설정된 패킷을 허용해야 합니다.

요구 사항

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

추가 정보

FWPS_INCOMING_METADATA_VALUES0 FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsFreeCloneNetBufferList0

FwpsFreeNetBufferList0

FwpsInjectionHandleCreate0

FwpsInjectionHandleDestroy0

FwpsQueryPacketInjectionState0

NET_BUFFER_LIST

classifyFn

completionFn