다음을 통해 공유


패킷 태그 지정 사용

콜아웃 드라이버는 관심 있는 패킷에 태그를 지정하고 태그가 지정된 패킷에 발생하는 이벤트의 알림을 받을 수 있습니다. 패킷 태그 지정은 Windows 7 이상 버전의 Windows에서 지원됩니다.

패킷 태그 지정을 사용하려면 콜아웃 드라이버가 FWPS_NET_BUFFER_LIST_NOTIFY_FN0 또는 FWPS_NET_BUFFER_LIST_NOTIFY_FN1 콜백 함수를 구현해야 합니다. 이 함수는 태그가 지정된 패킷에 대한 모든 상태 알림을 받습니다. 개별 패킷에 태그를 지정하려면 먼저 콜아웃 드라이버가 FwpsNetBufferListGetTagForContext0호출하여 특수 컨텍스트 태그를 얻어야 합니다. 콜아웃 드라이버는 태그된 패킷의 일부 또는 전체에 동일한 컨텍스트 태그를 사용할 수 있습니다. 예를 들어, 콜아웃 드라이버는 다른 컨텍스트 태그를 사용하여 태그가 지정된 패킷 유형을 구분할 수 있습니다.

패킷에 태그를 지정하기 위해 콜아웃 드라이버는 NET_BUFFER_LIST 구조체를 사용합니다. 설명선 드라이버는 FwpsNetBufferListAssociateContext0 호출하여 개별 NET_BUFFER_LIST 구조에 태그를 지정합니다. 드라이버가 패킷과 연결하는 컨텍스트는 임의의 부호 없는 64비트 값입니다. 이벤트가 트리거되면 FWPS_NET_BUFFER_LIST_NOTIFY_FN0 또는 FWPS_NET_BUFFER_LIST_NOTIFY_FN1 콜백이 콜아웃 드라이버가 태그가 지정된 개별 패킷을 식별할 수 있도록 컨텍스트를 입력 매개 변수로 전달합니다. 컨텍스트는 필터링 엔진에서 사용하거나 평가하지 않습니다. 콜백은 콜아웃 드라이버에서 사용하기 위해서만 전달됩니다.

패킷이 스택을 벗어나면 태그가 지정된 패킷에서 컨텍스트가 자동으로 제거됩니다. 그러나 패킷이 TCP/IP 스택(예: NDIS 필터 드라이버의 경우)에 들어가지 않는 경우 netBufferList 매개 변수가 NULL설정된 FwpsNetBufferListRemoveContext0 호출하여 컨텍스트를 수동으로 제거해야 합니다.

콜아웃에서 태그 작업을 일찍 중단해야 하는 경우, FwpsNetBufferListRemoveContext0을 호출하여 컨텍스트를 제거할 수 있습니다. 컨텍스트를 제거하면 일반적으로 FWPS_NET_BUFFER_LIST_CONTEXT_REMOVED 이벤트가 트리거됩니다. 트리거할 수 있는 이벤트에 대한 자세한 내용은 FWPS_NET_BUFFER_LIST_EVENT_TYPE0 열거형을 참조하세요. 경우에 따라 패킷이 처리를 위해 TCP/IP 스택에 들어가지 않는 경우와 같이 이벤트가 트리거되지 않습니다.

태그가 지정된 패킷이 복제될 때 콜아웃 드라이버가 컨텍스트를 복제 패킷으로 이동하거나 복사할 수 있습니다. 컨텍스트를 이동하려면(클론의 경우) 설명선 드라이버는 removeContext 매개 변수가 TRUE설정된 FwpsNetBufferListRetrieveContext0 호출해야 합니다. 그런 다음 컨텍스트를 새 패킷과 연결할 수 있습니다. 중복의 경우와 같이 컨텍스트를 복사하는 과정은 기본적으로 동일하지만, FwpsNetBufferListRetrieveContext0removeContext 매개 변수를 FALSE로 설정해야 한다는 점이 다릅니다.

TCP/IP 계층에서 태그가 지정된 패킷은 NDIS 필터 드라이버을 통해 검색할 수 있습니다. 그 반대의 경우도 마찬가지입니다. 데이터 세그먼트를 제외하고 패킷이 표시되지 않는 스트림 계층에서는 패킷 태그 지정을 사용할 수 없습니다.

설명선 드라이버는 FwpsNetBufferListRetrieveContext0을 호출하여 FWPS_NET_BUFFER_LIST_NOTIFY_FN0 또는 FWPS_NET_BUFFER_LIST_NOTIFY_FN1 함수 외부의 패킷 컨텍스트를 검색할 수 있습니다. 일반적으로 호출 드라이버는 classifyFn 콜백에서 컨텍스트를 가져옵니다.

classifyFn

FWPS_NET_BUFFER_LIST_EVENT_TYPE0

FWPS_NET_BUFFER_LIST_NOTIFY_FN0

FWPS_NET_BUFFER_LIST_NOTIFY_FN1

FwpsNetBufferListAssociateContext0

FwpsNetBufferListGetTagForContext0

FwpsNetBufferListRemoveContext0

FwpsNetBufferListRetrieveContext0

NET_BUFFER_LIST

NDIS 필터 드라이버