FwpsInjectForwardAsync0 함수(fwpsk.h)
FwpsInjectForwardAsync0 함수는 패킷 데이터를 전달 데이터 경로에 삽입합니다.
구문
NTSTATUS FwpsInjectForwardAsync0(
[in] HANDLE injectionHandle,
[in, optional] HANDLE injectionContext,
[in] UINT32 flags,
[in] ADDRESS_FAMILY addressFamily,
[in] COMPARTMENT_ID compartmentId,
[in] IF_INDEX interfaceIndex,
[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] flags
예약되어 있습니다. 콜아웃 드라이버는 이 매개 변수를 0으로 설정해야 합니다.
[in] addressFamily
다음 주소 패밀리 중 하나입니다.
AF_INET
IPv4 주소 패밀리입니다.
AF_INET6
IPv6 주소 패밀리입니다.
[in] compartmentId
패킷 데이터가 삽입되는 라우팅 구획의 식별자이며 COMPARTMENT_ID 형식으로 지정됩니다. 이 식별자는 의 compartmentId 멤버를 통해 콜아웃에 제공됩니다. 설명 선 드라이버의 classifyFn 설명선 함수에 전달되는 구조체를 FWPS_INCOMING_METADATA_VALUES0. 구획Id 멤버를 설명선에 사용할 수 있는 경우 FWPS_METADATA_FIELD_COMPARTMENT_ID currentMetadataValues 멤버에 설정됩니다. 그렇지 않으면 이 매개 변수를 UNSPECIFIED_COMPARTMENT_ID 설정합니다.
[in] interfaceIndex
대상 인터페이스(패킷 데이터를 보낼)의 인덱스입니다. 인덱스는 32비트 값입니다. 설명선 드라이버는 패킷이 원래 패킷이 표시된 동일한 인터페이스에 삽입되는 경우 이 매개 변수의 classifyFn 설명선 함수에 들어오는 데이터 값 중 하나로 전달되는 인터페이스 인덱스의 값을 사용해야 합니다.
[in, out] netBufferList
삽입되는 패킷 데이터를 설명하는 NET_BUFFER_LIST 구조체에 대한 포인터입니다. 설명선 드라이버는 NET_BUFFER_LIST 구조를 할당하여 다음 중 하나를 호출하여 패킷 데이터를 삽입합니다. FwpsAllocateCloneNetBufferList0 함수 또는 FwpsAllocateNetBufferAndNetBufferList0 함수입니다. NET_BUFFER_LIST 구조는 IP 헤더로 시작해야 합니다.
[in] completionFn
콜아웃 드라이버에서 제공하는 completionFn 콜아웃 함수에 대한 포인터입니다. 필터 엔진은 netBufferList 매개 변수에 설명된 패킷 데이터가 네트워크 스택에 삽입된 후 이 함수를 호출합니다.
[in, optional] completionContext
completionFn 매개 변수가 가리키는 설명선 함수에 전달되는 설명선 드라이버 제공 컨텍스트에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.
반환 값
FwpsInjectForwardAsync0 함수는 다음 NTSTATUS 코드 중 하나를 반환합니다.
반환 코드 | 설명 |
---|---|
|
패킷 데이터 주입이 성공적으로 시작되었습니다. 필터 엔진은 필터 엔진이 패킷 데이터를 네트워크 스택에 삽입을 완료한 후 또는 이후에 오류가 발생한 후 완료 함수를 호출합니다. 이 경우 완료된 NET_BUFFER_LIST 구조의 상태 멤버는 실패 이유를 나타냅니다. |
|
TCP/IP 네트워크 스택은 패킷 데이터 주입을 허용할 준비가 되지 않았습니다. |
|
삽입 핸들이 닫혀 있습니다. |
|
오류가 발생했습니다. |
설명
설명선 드라이버는 FwpsInjectForwardAsync0 함수를 호출하여 패킷 데이터 또는 패킷 조각을 전달 데이터 경로에 삽입합니다.
이 함수는 비동기적으로 실행할 수 있습니다. 일반적으로 콜아웃 드라이버는 패킷 데이터를 수정할 때 네트워크 스택에 데이터를 삽입합니다. 설명선 드라이버가 패킷 데이터를 수정하는 방법에 대한 자세한 내용은 설명선 드라이버 작업을 참조하세요.
이 함수와 함께 삽입된 패킷 또는 패킷 조각은 필터링을 위해 WFP 계층에 표시되지 않습니다.
반환 값이 STATUS_SUCCESS 않으면 완료 함수가 호출되지 않습니다. 이 경우 netBufferList 가 가리키는 순 버퍼 목록은 FwpsFreeNetBufferList0 또는 에 대한 호출로 해제되어야 합니다. FwpsFreeCloneNetBufferList0.
IP 패킷 또는 조각을 복제, 수정 및 네트워크 스택에 다시 삽입할 수 있습니다. 그러나 조각 그룹을 다시 생성하려면 먼저 설명선 드라이버에서 단일 NET_BUFFER_LIST 다시 조립해야 합니다.
앞으로 삽입된 패킷은 전달 계층에 다시 입력되지 않습니다. 따라서 재분류되지 않습니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista부터 사용할 수 있습니다. |
대상 플랫폼 | 유니버설 |
헤더 | fwpsk.h(Fwpsk.h 포함) |
라이브러리 | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |