FILTER_SEND_NET_BUFFER_LISTS 콜백 함수(ndis.h)
NDIS는 FilterSendNetBufferLists 함수를 호출하여 필터 드라이버가 연결된 NET_BUFFER_LIST 구조 목록을 필터링할 수 있도록 합니다.
구문
FILTER_SEND_NET_BUFFER_LISTS FilterSendNetBufferLists;
void FilterSendNetBufferLists(
[in] NDIS_HANDLE FilterModuleContext,
PNET_BUFFER_LIST NetBufferList,
[in] NDIS_PORT_NUMBER PortNumber,
[in] ULONG SendFlags
)
{...}
매개 변수
[in] FilterModuleContext
필터 모듈의 컨텍스트 영역에 대한 핸들입니다. FilterAttach 함수에서 이 컨텍스트 영역을 만들고 초기화한 필터 드라이버입니다.
NetBufferList
NET_BUFFER 구조체 목록을 지정하는 NET_BUFFER_LIST 구조체 의 연결된 목록에 대한 포인터입니다. 목록의 각 NET_BUFFER 전송 데이터를 포함하는 MDL 체인을 매핑합니다.
[in] PortNumber
미니포트 어댑터 포트를 식별하는 포트 번호입니다. 미니포트 어댑터 포트 번호는 NdisMAllocatePort 함수를 호출하여 할당됩니다. 0 값은 미니포트 어댑터의 기본 포트를 식별합니다.
[in] SendFlags
보내기 작업에 대한 특성을 정의하는 플래그입니다. 플래그를 OR 작업과 결합할 수 있습니다. 모든 플래그를 지우려면 이 멤버를 0으로 설정합니다. 이 함수는 다음 플래그를 지원합니다.
NDIS_SEND_FLAGS_DISPATCH_LEVEL
현재 IRQL이 DISPATCH_LEVEL 지정합니다. 이 플래그에 대한 자세한 내용은 디스패치 IRQL 추적을 참조하세요.
NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK
NDIS에서 루프백을 확인해야 하며, 기본적으로 NDIS는 전송 요청을 제출한 드라이버에 데이터를 루프백하지 않습니다. 지나치게 많은 드라이버는 이 플래그를 설정하여 이 동작을 재정의할 수 있습니다. 이 플래그가 설정되면 NDIS는 바인딩에 대한 수신 조건과 일치하는 데이터를 포함하는 모든 NET_BUFFER 구조를 식별합니다. NDIS는 조건과 오버리징 드라이버에 일치하는 NET_BUFFER 구조를 나타냅니다. 이 플래그는 다른 바인딩에서 루프백 확인 또는 루프백에 영향을 주지 않습니다.
NDIS_SEND_FLAGS_SWITCH_SINGLE_SOURCE
이 플래그가 설정되면 연결된 NET_BUFFER_LIST 구조 목록의 모든 패킷은 동일한 Hyper-V 확장 가능한 스위치 원본 포트에서 시작됩니다.
자세한 내용은 Hyper-V 확장 가능한 스위치 보내기 및 받기 플래그를 참조하세요.
NDIS_SEND_FLAGS_SWITCH_DESTINATION_GROUP
이 플래그가 설정되면 연결된 NET_BUFFER_LIST 구조 목록의 모든 패킷을 동일한 확장 가능한 스위치 대상 포트로 전달해야 합니다.
자세한 내용은 Hyper-V 확장 가능한 스위치 보내기 및 받기 플래그를 참조하세요.
반환 값
없음
설명
FilterSendNetBufferLists 는 선택적 함수입니다. 필터 드라이버가 보내기 요청을 필터링하지 않는 경우 NdisFRegisterFilterDriver 함수를 호출할 때 이 함수의 진입점을 NULL로 설정할 수 있습니다.
필터 드라이버가 FilterSendNetBufferLists 함수를 지정하고 송신 요청을 큐에 대기하는 경우 FilterCancelSendNetBufferLists 함수도 지정해야 합니다.
필터 드라이버는 FilterSetModuleOptions 함수에서 NdisSetOptionalHandlers 함수를 호출하여 필터 모듈에 대해 FilterSendNetBufferLists 함수를 지정할 수 있습니다.
필터 드라이버가 FilterSendNetBufferLists 함수를 지정하는 경우 NDIS는 이 함수를 호출하여 네트워크를 통해 NET_BUFFER 구조 목록에 포함된 데이터를 필터링합니다. NDIS는 각 NET_BUFFER_LIST 구조체의 NET_BUFFER 구조 목록을 지정합니다.
필터 드라이버가 FilterSendNetBufferLists를 지정하지 않은 경우 NDIS는 FilterSendNetBufferLists 함수를 지정한 드라이버 스택에서 더 낮은 다음 필터 드라이버를 호출합니다. 이러한 기본 필터 드라이버가 없는 경우 NDIS는 기본 드라이버의 MiniportSendNetBufferLists 함수를 호출합니다 .
필터 드라이버는 데이터를 필터링하고 필터링된 데이터를 기본 드라이버로 보낼 수 있습니다. FilterSendNetBufferLists에 제출된 각 NET_BUFFER 구조에 대해 필터 드라이버는 다음을 수행할 수 있습니다.
- NdisFSendNetBufferLists 함수를 호출하여 다음 기본 드라이버에 버퍼를 전달합니다. 필터 드라이버는 NdisFSendNetBufferLists를 호출하기 전에 버퍼 콘텐츠를 수정할 수 있습니다. 이 경우 NDIS는 기본 드라이버가 보내기 요청을 완료한 후 FilterSendNetBufferListsComplete 함수를 호출합니다.
- NdisFSendNetBufferListsComplete 함수를 호출하여 버퍼를 거부합니다.
- 나중에 처리하기 위해 로컬 데이터 구조에서 버퍼를 큐에 대기합니다.
- 버퍼를 복사하고 복사본을 사용하여 보내기 요청을 시작합니다. 보내기 작업은 필터 드라이버 시작 보내기 요청과 유사합니다. 이 경우 드라이버는 NdisFSendNetBufferListsComplete 함수를 호출하여 원래 버퍼를 지나치게 많은 드라이버에 반환해야 합니다.
필터 모듈이 일시 중지된 상태인 경우 필터 드라이버는 해당 필터 모듈에 대한 보내기 요청을 발생시키지 않아야 합니다. NDIS가 FilterSendNetBufferLists를 호출하는 경우 드라이버는 드라이버가 다시 시작될 때까지 NdisFSendNetBufferLists 를 호출하여 데이터를 전달하지 않아야 합니다. 드라이버는 즉시 NdisFSendNetBufferListsComplete 를 호출하여 보내기 작업을 완료해야 합니다. 각 NET_BUFFER_LIST 구조체의 전체 상태를 NDIS_STATUS_PAUSED 설정해야 합니다.
NDIS는 IRQL <= DISPATCH_LEVEL FilterSendNetBufferLists 를 호출합니다.
예제
FilterSendNetBufferLists 함수를 정의하려면 먼저 정의하려는 함수의 형식을 식별하는 함수 선언을 제공해야 합니다. Windows 드라이버에 대한 함수 형식 집합을 제공합니다. 함수 형식을 사용하여 함수를 선언하면 드라이버, SDV(정적 드라이버 검증 도구) 및 기타 확인 도구에 대한 Code Analysis 오류를 찾을 수 있으며 Windows 운영 체제용 드라이버를 작성해야 합니다.예를 들어 " MySendNetBufferLists"라는 FilterSendNetBufferLists 함수를 정의하려면 이 코드 예제와 같이 FILTER_SEND_NET_BUFFER_LISTS 형식을 사용합니다.
FILTER_SEND_NET_BUFFER_LISTS MySendNetBufferLists;
그런 다음 다음과 같이 함수를 구현합니다.
_Use_decl_annotations_
VOID
MySendNetBufferLists(
NDIS_HANDLE FilterModuleContext,
PNET_BUFFER_LIST NetBufferLists,
NDIS_PORT_NUMBER PortNumber,
ULONG SendFlags
)
{...}
FILTER_SEND_NET_BUFFER_LISTS 함수 형식은 Ndis.h 헤더 파일에 정의되어 있습니다. 코드 분석 도구를 실행할 때 오류를 보다 정확하게 식별하려면 함수 정의에 Use_decl_annotations 주석을 추가해야 합니다. Use_decl_annotations 주석은 헤더 파일의 FILTER_SEND_NET_BUFFER_LISTS 함수 형식에 적용되는 주석이 사용되는지 확인합니다. 함수 선언에 대한 요구 사항에 대한 자세한 내용은 NDIS 드라이버에 함수 역할 형식을 사용하여 함수 선언을 참조하세요.
Use_decl_annotations 대한 자세한 내용은 함수 동작에 주석을 추가하세요.
요구 사항
| 지원되는 최소 클라이언트 | NDIS 6.0 이상에서 지원됩니다. |
| 대상 플랫폼 | Windows |
| 헤더 | ndis.h(Ndis.h 포함) |
| IRQL | <= DISPATCH_LEVEL |
참고 항목
FilterCancelSendNetBufferLists
FilterSendNetBufferListsComplete
피드백
다음에 대한 사용자 의견 제출 및 보기