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 헤더의 오프셋(바이트)입니다.
다음 인바운드 ICMP 오류 계층에서 ipHeaderSize
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
아웃바운드 전송 계층 삽입에 사용할 원격 범위 식별자입니다. 이 멤버는 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 헤더에 대한 포인터입니다.
headerIncludeHeaderLength
headerIncludeHeader가리키는 IP 헤더의 길이(바이트)입니다.
destinationPrefix
대상 접두사입니다.
frameLength
프레임 길이입니다.
parentEndpointHandle
엔드포인트의 부모 핸들입니다.
icmpIdAndSequence
ICMP 식별자 및 시퀀스입니다.
localRedirectTargetPID
리디렉션된 연결을 담당하는 프로세스의 PID입니다.
originalDestination
리디렉션된 연결의 원래 대상입니다.
redirectRecords
리디렉션 상태를 가져오기 위해 FwpsQueryConnectionRedirectState0 함수에 전달할 수 있는 리디렉션 레코드 핸들입니다.
currentL2MetadataValues
설정된 계층 2 값을 지정하는 플래그가 포함된 비트 마스크입니다. 하나 이상의 값을 비트 OR과 결합할 수 있습니다.
값 | 의미 |
---|---|
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 플래그가 포함된 비트 마스크입니다.
값 | 의미 |
---|---|
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 주입 상태가 됩니다. |
ethernetMacHeaderSize
FWPS_L2_METADATA_FIELD_802_3_MAC_HEADER_SIZE 플래그가 설정된 경우 MAC 헤더의 크기(바이트)입니다. 이 플래그는 인바운드 802.3 계층에 대해서만 설정됩니다.
wiFiOperationMode
FWPS_L2_METADATA_FIELD_802_11_OPERATION_MODE 플래그가 설정된 경우 현재 Native 802.11 작업 모드입니다. 자세한 내용은 DOT11_CURRENT_OPERATION_MODE참조하세요.
vSwitchSourcePortId
가상 스위치의 원본 포트에 대한 고유 식별자입니다.
vSwitchSourceNicIndex
가상 스위치의 원본 NIC에 대한 인덱스입니다.
vSwitchDestinationPortId
가상 스위치의 대상 포트에 대한 고유 식별자입니다.
padding0
예약.
padding1
예약.
padding2
예약.
vSwitchPacketContext
가상 스위치 패킷 컨텍스트에 대한 핸들입니다.
subProcessTag
예약.
reserved1
예약.
발언
필터 엔진은 설명선의 classifyFn 설명선 함수에 FWPS_INCOMING_METADATA_VALUES0 구조체에 대한 포인터를 전달합니다. 구조에 포함된 메타데이터 값은 필터 엔진에서 처리되지 않지만 설명선의 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 연결 또는 수신/수락 계층에서 설명선 드라이버는 packetDirectionFWP_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 포함) |