FwpsInjectMacReceiveAsync0 함수(fwpsk.h)

FwpsInjectMacReceiveAsync0 함수는 이전에 흡수된 MAC(미디어 액세스 제어) 프레임(또는 프레임의 클론)을 가로채는 계층 2 인바운드 데이터 경로로 다시 다시 내보내거나 발명된 MAC 프레임을 삽입할 수 있습니다.

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

 

구문

NTSTATUS FwpsInjectMacReceiveAsync0(
  [in]           HANDLE               injectionHandle,
  [in, optional] HANDLE               injectionContext,
  [in]           UINT32               flags,
  [in]           UINT16               layerId,
  [in]           IF_INDEX             interfaceIndex,
  [in]           NDIS_PORT_NUMBER     NdisPortNumber,
  [in, out]      NET_BUFFER_LIST      *netBufferLists,
  [in]           FWPS_INJECT_COMPLETE completionFn,
  [in, optional] HANDLE               completionContext
);

매개 변수

[in] injectionHandle

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

참고FwpsInjectionHandleCreate0 함수의 addressFamily 매개 변수를 AF_UNSPEC 설정합니다.
 

[in, optional] injectionContext

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

[in] flags

예약되어 있습니다. 0으로 설정해야 합니다.

[in] layerId

데이터 스트림이 처리되는 필터링 계층에 대한 런타임 식별자입니다.

[in] interfaceIndex

콜아웃 드라이버의 classifyFn 들어오는 값 FWPS_FIELD_Xxx MAC_FRAME Xxx_INTERFACE_INDEX에 전달되는 인터페이스 인덱입니다.

[in] NdisPortNumber

설명선 드라이버의 classifyFn 들어오는 값 FWPS_FIELD_Xxx MAC_FRAME Xxx_NDIS_PORT에 전달되는 NDIS 포트 번호입니다.

[in, out] netBufferLists

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

이면 (layerId == FWPS_LAYER_INBOUND_MAC_FRAME_ETHERNET)NET_BUFFER_LIST 이더넷 헤더로 시작해야 합니다.

이면 (layerId == FWPS_LAYER_INBOUND_MAC_FRAME_NATIVE)NET_BUFFER_LIST MAC 헤더로 시작해야 합니다.

[in] completionFn

콜아웃 드라이버에서 제공하는 completionFn 콜아웃 함수에 대한 포인터입니다. 필터 엔진은 netBufferLists 매개 변수에 설명된 패킷 데이터가 네트워크 스택에 삽입된 후 이 함수를 호출합니다. 복제되거나 생성된 NET_BUFFER_LIST 구조를 삽입할 때 이 포인터를 지정해야 합니다. 원래 NET_BUFFER_LIST 구조를 삽입할 때 원래 구조체가 변경되지 않은 경우 이 매개 변수는 NULL일 수 있습니다.

[in, optional] completionContext

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

반환 값

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

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

설명

콜백 드라이버는 FwpsInjectMacReceiveAsync0 함수를 호출하여 이전에 흡수된 MAC 프레임(또는 프레임의 클론)을 가로채는 계층 2 인바운드 데이터 경로로 다시 다시 내보내거나 발명된 MAC 프레임을 삽입합니다.

netBufferLists 매개 변수는 NET_BUFFER_LIST 체인일 수 있습니다. 그러나 완료 함수는 각각 여러 번 호출되어 체인의 세그먼트(또는 단일 NET_BUFFER_LIST)를 완료할 수 있습니다.

패킷이 원래 분류된 것과 동일한 필터와 일치하는 경우 삽입된 프레임이 다시 분류될 수 있습니다. 따라서 IP 계층의 설명선과 마찬가지로 계층 2 설명선은 FwpsQueryPacketInjectionState0을 호출하여 무한 패킷 검사로부터 보호해야 합니다.

요구 사항

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

추가 정보

FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0 FwpsInjectionHandleCreate0

FwpsQueryPacketInjectionState0

NET_BUFFER_LIST

classifyFn

completionFn