FWPS_INCOMING_METADATA_VALUES0 구조체(fwpsk.h)

FWPS_INCOMING_METADATA_VALUES0 구조체는 필터 엔진이 설명선의 classifyFn 설명선 함수에 전달하는 메타데이터 값을 정의합니다.

FWPS_INCOMING_METADATA_VALUES0 특정 버전의 FWPS_INCOMING_METADATA_VALUES. 자세한 내용은 WFP Version-Independent 이름 및 특정 버전의 Windows 대상 지정 을 참조하세요.
 

구문

typedef struct FWPS_INCOMING_METADATA_VALUES0_ {
  UINT32                          currentMetadataValues;
  UINT32                          flags;
  UINT64                          reserved;
  FWPS_DISCARD_METADATA0          discardMetadata;
  UINT64                          flowHandle;
  UINT32                          ipHeaderSize;
  UINT32                          transportHeaderSize;
  FWP_BYTE_BLOB                   *processPath;
  UINT64                          token;
  UINT64                          processId;
  UINT32                          sourceInterfaceIndex;
  UINT32                          destinationInterfaceIndex;
  ULONG                           compartmentId;
  FWPS_INBOUND_FRAGMENT_METADATA0 fragmentMetadata;
  ULONG                           pathMtu;
  HANDLE                          completionHandle;
  UINT64                          transportEndpointHandle;
  SCOPE_ID                        remoteScopeId;
  WSACMSGHDR                      *controlData;
  ULONG                           controlDataLength;
  FWP_DIRECTION                   packetDirection;
  PVOID                           headerIncludeHeader;
  ULONG                           headerIncludeHeaderLength;
  IP_ADDRESS_PREFIX               destinationPrefix;
  UINT16                          frameLength;
  UINT64                          parentEndpointHandle;
  UINT32                          icmpIdAndSequence;
  DWORD                           localRedirectTargetPID;
  SOCKADDR                        *originalDestination;
  HANDLE                          redirectRecords;
  UINT32                          currentL2MetadataValues;
  UINT32                          l2Flags;
  UINT32                          ethernetMacHeaderSize;
  UINT32                          wiFiOperationMode;
  NDIS_SWITCH_PORT_ID             vSwitchSourcePortId;
  NDIS_SWITCH_NIC_INDEX           vSwitchSourceNicIndex;
  NDIS_SWITCH_PORT_ID             vSwitchDestinationPortId;
  UINT32                          padding0;
  USHORT                          padding1;
  UINT32                          padding2;
  HANDLE                          vSwitchPacketContext;
  PVOID                           subProcessTag;
  UINT64                          reserved1;
} FWPS_INCOMING_METADATA_VALUES0;

멤버

currentMetadataValues

구조체에 설정된 메타데이터 값을 지정하는 메타데이터 필드 식별자 조합의 비트 OR을 포함하는 UINT32 값입니다.

flags

필터 엔진에서 내부적으로 사용됩니다. 콜아웃 드라이버는 이 멤버를 무시해야 합니다.

reserved

시스템에서 사용하도록 예약되었습니다. 콜아웃 드라이버는 이 멤버를 무시해야 합니다.

discardMetadata

데이터가 삭제된 이유를 설명하는 FWPS_DISCARD_METADATA0 구조체입니다. 이 멤버는 FWPS_METADATA_FIELD_DISCARD_REASON 플래그가 currentMetadataValues 멤버에 설정된 경우에만 유효한 데이터를 포함합니다.

flowHandle

데이터 흐름에 대한 핸들입니다. 이 멤버는 FWPS_METADATA_FIELD_FLOW_HANDLE 플래그가 currentMetadataValues 멤버에 설정된 경우에만 유효한 데이터를 포함합니다.

ipHeaderSize

IP 헤더의 오프셋(바이트)입니다.

인바운드 경로에서 ipHeaderSizetransportHeaderSize 멤버와 함께 사용할 때 데이터 오프셋 위치에서 IP 헤더의 시작 부분으로 후퇴할 바이트 수를 지정합니다.

다음 인바운드 ICMP 오류 계층에서 ipHeaderSize 만 데이터 오프셋에서 IP 헤더의 시작 부분으로 후퇴할 총 바이트 수를 지정합니다.

FWPS_LAYER_INBOUND_ICMP_ERROR_V4

FWPS_LAYER_INBOUND_ICMP_ERROR_V6

FWPS_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD

FWPS_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD

아웃바운드 경로에서 ipHeaderSize 가 0보다 큰 경우 데이터 오프셋 위치에서 IP 헤더의 끝으로 진행할 바이트 수를 지정합니다.

이 멤버는 다음 계층의 아웃바운드 경로에 적용할 수 없습니다.

FWPS_LAYER_DATAGRAM_DATA_V4

FWPS_LAYER_DATAGRAM_DATA_V6

FWPS_LAYER_DATAGRAM_DATA_V4_DISCARD

FWPS_LAYER_DATAGRAM_DATA_V6_DISCARD

이 멤버는 FWPS_METADATA_FIELD_IP_HEADER_SIZE 플래그가 currentMetadataValues 멤버에 설정된 경우에만 유효한 데이터를 포함합니다.

transportHeaderSize

전송 헤더의 오프셋 또는 크기(바이트)입니다.

인바운드 경로에서 transportHeaderSize 는 데이터 오프셋 위치에서 전송 헤더의 끝으로 후퇴할 바이트 수를 지정합니다.

다음 인바운드 ICMP 오류 계층에서 transportHeaderSize 는 ICMP 헤더의 크기를 지정합니다.

FWPS_LAYER_INBOUND_ICMP_ERROR_V4

FWPS_LAYER_INBOUND_ICMP_ERROR_V6

FWPS_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD

FWPS_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD

아웃바운드 경로에서 transportHeaderSize 는 데이터 오프셋 위치에서 전송 헤더의 끝으로 진행할 바이트 수를 지정합니다.

이 멤버는 FWPS_METADATA_FIELD_TRANSPORT_HEADER_SIZE 플래그가 currentMetadataValues 멤버에 설정된 경우에만 유효한 데이터를 포함합니다.

processPath

엔드포인트를 소유하는 프로세스의 전체 경로를 포함하는 FWP_BYTE_BLOB 구조체에 대한 포인터입니다. 이 멤버는 FWPS_METADATA_FIELD_PROCESS_PATH 플래그가 currentMetadataValues 멤버에 설정된 경우에만 유효한 데이터를 포함합니다.

token

사용자에 대한 사용 권한의 유효성을 검사하는 데 사용되는 토큰에 대한 핸들입니다. 이 멤버는 FWPS_METADATA_FIELD_TOKEN 플래그가 currentMetadataValues 멤버에 설정된 경우에만 유효한 데이터를 포함합니다.

processId

엔드포인트를 소유하는 프로세스의 프로세스 ID입니다. 이 멤버는 FWPS_METADATA_FIELD_PROCESS_ID 플래그가 currentMetadataValues 멤버에 설정된 경우에만 유효한 데이터를 포함합니다.

sourceInterfaceIndex

들어오는 패킷이 수신된 네트워크 인터페이스의 인덱스입니다. 이 멤버는 FWPS_METADATA_FIELD_SOURCE_INTERFACE_INDEX 플래그가 currentMetadataValues 멤버에 설정된 경우에만 유효한 데이터를 포함합니다.

destinationInterfaceIndex

나가는 패킷을 보낼 네트워크 인터페이스의 인덱스입니다. 이 멤버는 FWPS_METADATA_FIELD_DESTINATION_INTERFACE_INDEX 플래그가 currentMetadataValues 멤버에 설정된 경우에만 유효한 데이터를 포함합니다.

compartmentId

패킷이 수신되었거나 전송되는 라우팅 구획의 식별자입니다. 수정된 패킷은 원래 패킷에 대해 표시된 것과 동일한 라우팅 구획에 다시 삽입해야 합니다. 이 멤버는 FWPS_METADATA_FIELD_COMPARTMENT_ID 플래그가 currentMetadataValues 멤버에 설정된 경우에만 유효한 데이터를 포함합니다.

fragmentMetadata

입니다.수신된 패킷 조각의 조각 데이터를 설명하는 FWPS_INBOUND_FRAGMENT_METADATA0 구조체입니다. 이 멤버는 FWPS_METADATA_FIELD_FRAGMENT_DATA 플래그가 currentMetadataValues 멤버에 설정된 경우에만 유효한 데이터를 포함합니다.

pathMtu

아웃바운드 패킷에 대한 경로 최대 전송 단위(경로 MTU)입니다. 이 값은 네트워크에서 조각화 없이 전송할 수 있는 가장 큰 실제 패킷 크기(바이트)를 나타내며, 이 멤버는 FWPS_METADATA_FIELD_PATH_MTU 플래그가 currentMetadataValues 멤버에 설정된 경우에만 유효한 데이터를 포함합니다.

completionHandle

현재 필터링 작업을 보류하는 데 필요한 완료 핸들입니다. 이 멤버는 FWPS_METADATA_FIELD_COMPLETION_HANDLE 플래그가 currentMetadataValues 멤버에 설정된 경우에만 유효한 데이터를 포함합니다.

transportEndpointHandle

아웃바운드 전송 계층에 삽입할 패킷의 끝을 나타내는 엔드포인트 핸들입니다. 이 멤버는 FWPS_METADATA_FIELD_TRANSPORT_ENDPOINT_HANDLE 플래그가 currentMetadataValues 멤버에 설정된 경우에만 유효한 데이터를 포함합니다.

remoteScopeId

아웃바운드 전송 계층 삽입에 사용할 원격 scope 식별자입니다. 이 멤버는 FWPS_METADATA_FIELD_REMOTE_SCOPE_ID 플래그가 currentMetadataValues 멤버에 설정된 경우에만 유효한 데이터를 포함합니다.

controlData

선택적 소켓 컨트롤 데이터 개체입니다. 이 멤버는 FWPS_METADATA_FIELD_TRANSPORT_CONTROL_DATA 플래그가 currentMetadataValues 멤버에 설정된 경우에만 유효한 데이터를 포함합니다. WSACMSGHDR 형식에 대한 자세한 내용은 CMSGHDR을 참조하세요.

controlDataLength

controlData 멤버의 길이(바이트)입니다.

packetDirection

의 상수 값 중 하나에 지정된 네트워크 트래픽의 방향(인바운드 또는 아웃바운드)
FWP_DIRECTION. 이 멤버는 재인증 분류 작업 중에 ALE(애플리케이션 계층 적용) 연결 또는 수신/수락 계층에서 설정됩니다. 자세한 내용은 주의 섹션을 참조하세요.

참고 이 멤버는 FWPS_METADATA_FIELD_PACKET_DIRECTION 플래그가 currentMetadataValues 멤버에 설정된 경우에만 유효한 데이터를 포함합니다.
 

headerIncludeHeader

패킷이 원시 소켓에서 전송되는 경우 IP 헤더에 대한 포인터입니다.

참고 Windows Server 2008, Windows Vista SP1 이상 버전의 Windows에서만 사용할 수 있습니다.
 

headerIncludeHeaderLength

headerIncludeHeader가 가리키는 IP 헤더의 길이(바이트)입니다.

참고 Windows Server 2008, Windows Vista SP1 이상 버전의 Windows에서만 사용할 수 있습니다.
 

destinationPrefix

대상 접두사입니다.

참고 Windows 7 이상 버전의 Windows에서만 사용할 수 있습니다.
 

frameLength

프레임 길이입니다.

참고 Windows 7 이상 버전의 Windows에서만 사용할 수 있습니다.
 

parentEndpointHandle

엔드포인트의 부모 핸들입니다.

참고 Windows 7 이상 버전의 Windows에서만 사용할 수 있습니다.
 

icmpIdAndSequence

ICMP 식별자 및 시퀀스입니다.

참고 Windows 7 이상 버전의 Windows에서만 사용할 수 있습니다.
 

localRedirectTargetPID

리디렉션된 연결을 담당하는 프로세스의 PID입니다.

참고 Windows 7 이상 버전의 Windows에서만 사용할 수 있습니다.
 

originalDestination

리디렉션된 연결의 원래 대상입니다.

참고 Windows 7 이상 버전의 Windows에서만 사용할 수 있습니다.
 

redirectRecords

리디렉션 상태를 가져오기 위해 FwpsQueryConnectionRedirectState0 함수에 전달할 수 있는 리디렉션 레코드 핸들입니다.

참고Windows 8 이상 버전의 Windows에서만 사용할 수 있습니다.
 

currentL2MetadataValues

설정된 계층 2 값을 지정하는 플래그가 포함된 비트 마스크입니다. 하나 이상의 값을 비트 OR과 결합할 수 있습니다.

참고Windows 8 이상 버전의 Windows에서만 사용할 수 있습니다.
 
의미
FWPS_L2_METADATA_FIELD_ETHERNET_MAC_HEADER_SIZE
ethernetMacHeaderSize 멤버의 값은 MAC 헤더의 크기를 나타냅니다.
FWPS_L2_METADATA_FIELD_WIFI_OPERATION_MODE
wiFiOperationMode 멤버의 값은 현재 Native 802.11 작업 모드를 나타냅니다.
FWPS_L2_METADATA_FIELD_VSWITCH_SOURCE_PORT_ID
vSwitchSourcePortId 멤버의 값은 가상 스위치의 원본 포트에 대한 식별자를 나타냅니다.
FWPS_L2_METADATA_FIELD_VSWITCH_SOURCE_NIC_INDEX
vSwitchSourceNicIndex 멤버의 값은 가상 스위치의 원본 NIC에 대한 인덱스를 나타냅니다.
FWPS_L2_METADATA_FIELD_VSWITCH_PACKET_CONTEXT
vSwitchPacketContext 멤버의 값은 가상 스위치 패킷 컨텍스트에 대한 HANDLE을 나타냅니다.
FWPS_L2_METADATA_FIELD_VSWITCH_DESTINATION_PORT_ID
vSwitchDestinationPortId 멤버의 값은 가상 스위치의 대상 포트에 대한 식별자를 나타냅니다.

l2Flags

비트 OR와 결합할 수 있는 계층 2 플래그를 포함하는 비트 마스크입니다.

참고Windows 8 이상 버전의 Windows에서만 사용할 수 있습니다.
 
의미
FWPS_L2_INCOMING_FLAG_IS_RAW_IPV4_FRAMING
원시 IP4 프레이밍을 나타냅니다.
FWPS_L2_INCOMING_FLAG_IS_RAW_IPV6_FRAMING
원시 IP6 프레이밍을 나타냅니다.
FWPS_L2_INCOMING_FLAG_RECLASSIFY_MULTI_DESTINATION
이 플래그는 수신 시 한 번 본 NBL이 각각 다른 VM으로 향하는 여러 NBL로 배포되었으며 이 배포의 첫 번째 NBL이 이미 콜아웃 드라이버에 표시되었음을 나타냅니다.

분산 그룹의 첫 번째 NBL에는 이 플래그가 설정되지 않습니다. 그룹에 대한 모든 후속 NCL에는 이 플래그가 설정됩니다.

주입을 위해 설명선 드라이버는 NBL을 복제하고, 원래 패킷을 차단 및 흡수하고, 첫 번째 표시에 대한 FWPS_RIGHT_ACTION_WRITE 플래그를 지워야 합니다. 그런 다음 복제본을 수정하고 수신 경로에 삽입합니다.

모든 후속 표시의 경우 원래 패킷을 차단 및 흡수하고 클론에 대한 FWPS_RIGHT_ACTION_WRITE 플래그를 지워야 합니다. 주입된 클론이 수신에서 나오면 다시 재배포되고 모든 표시는 FWPS_PACKET_INJECTED_BY_SELF 또는 FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF 주입 상태가 됩니다.

참고Windows 8 이상 버전의 Windows에서만 사용할 수 있습니다.
 

ethernetMacHeaderSize

FWPS_L2_METADATA_FIELD_802_3_MAC_HEADER_SIZE 플래그가 설정된 경우 MAC 헤더의 크기(바이트)입니다. 이 플래그는 인바운드 802.3 계층에 대해서만 설정됩니다.

참고Windows 8 이상 버전의 Windows에서만 사용할 수 있습니다.
 

wiFiOperationMode

FWPS_L2_METADATA_FIELD_802_11_OPERATION_MODE 플래그가 설정된 경우 현재 Native 802.11 작업 모드입니다. 자세한 내용은 DOT11_CURRENT_OPERATION_MODE.

참고Windows 8 이상 버전의 Windows에서만 사용할 수 있습니다.
 

vSwitchSourcePortId

가상 스위치의 원본 포트에 대한 고유 식별자입니다.

참고Windows 8 이상 버전의 Windows에서만 사용할 수 있습니다.
 

vSwitchSourceNicIndex

가상 스위치의 원본 NIC에 대한 인덱스입니다.

참고Windows 8 이상 버전의 Windows에서만 사용할 수 있습니다.
 

vSwitchDestinationPortId

가상 스위치의 대상 포트에 대한 고유 식별자입니다.

참고Windows 8 이상 버전의 Windows에서만 사용할 수 있습니다.
 

padding0

예약되어 있습니다.

참고Windows 8 이상 버전의 Windows에서만 사용할 수 있습니다.
 

padding1

예약되어 있습니다.

참고Windows 8 이상 버전의 Windows에서만 사용할 수 있습니다.
 

padding2

예약되어 있습니다.

참고Windows 8 이상 버전의 Windows에서만 사용할 수 있습니다.
 

vSwitchPacketContext

가상 스위치 패킷 컨텍스트에 대한 핸들입니다.

참고Windows 8 이상 버전의 Windows에서만 사용할 수 있습니다.
 

subProcessTag

예약되어 있습니다.

참고Windows 8 이상 버전의 Windows에서만 사용할 수 있습니다.
 

reserved1

설명

필터 엔진은 FWPS_INCOMING_METADATA_VALUES0 구조체에 대한 포인터를 설명선의 classifyFn 설명선 함수에 전달합니다. 구조체에 포함된 메타데이터 값은 필터 엔진에서 처리되지 않지만 추가 정보를 제공하기 위해 설명선의 classifyFn 설명선 함수에 제공됩니다.

설명선 드라이버는 다음 매크로를 사용하여 특정 메타데이터 값이 FWPS_INCOMING_METADATA_VALUES0 구조에 있는지 테스트할 수 있습니다.

FWPS_IS_METADATA_FIELD_PRESENT(metadataValues, metadataField)

FWPS_METADATA_FIELD_PACKET_DIRECTION 메타데이터 값이 FWPS_INCOMING_METADATA_VALUES0 구조에 있는 경우 packetDirection 멤버는 재인증 분류 작업 중에 패킷이 인바운드인지 아웃바운드인지 지정합니다. 그렇지 않으면 FWPS_METADATA_FIELD_PACKET_DIRECTION 메타데이터 값이 없습니다.

설명선 드라이버는 패킷을 검사할 때 다음 지침을 따라야 합니다.

  • ALE 연결 또는 수신/수락 계층에서 설명선 드라이버는 packetDirection 이 FWP_DIRECTION_OUTBOUND 설정되고 FWPS_METADATA_FIELD_PACKET_DIRECTION 메타데이터 값이 있는 경우 패킷에 유효한 IP 헤더가 포함되어 있다고 가정해서는 안 됩니다.
  • ALE 연결 계층에서 FWPS_METADATA_FIELD_PACKET_DIRECTION 메타데이터 값이 없으면 콜아웃 드라이버는 패킷 방향이 FWP_DIRECTION_OUTBOUND 가정해야 합니다.
  • ALE 수신/수락 계층에서 FWPS_METADATA_FIELD_PACKET_DIRECTION 메타데이터 값이 없는 경우 콜아웃 드라이버는 패킷 방향이 FWP_DIRECTION_INBOUND 가정해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista부터 사용할 수 있습니다.
머리글 fwpsk.h(Fwpsk.h 포함)

추가 정보

CMSGHDR

FWPS_DISCARD_METADATA0

FWPS_INBOUND_FRAGMENT_METADATA0

FWP_BYTE_BLOB

FWP_DIRECTION

FwpsQueryConnectionRedirectState0

NET_BUFFER_LIST

classifyFn