패킷 태그 지정 사용

설명선 드라이버는 관심 있는 패킷에 태그를 지정하고 태그가 지정된 패킷에 발생하는 이벤트의 알림을 받을 수 있습니다. 패킷 태그 지정은 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 필터 드라이버