중간 드라이버는 상위 수준 드라이버로부터 네트워크를 통해 보내기 위한 하나 이상의 연결된 MDL이 있는 NET_BUFFER_LIST 구조를 받습니다. 중간 드라이버는 드라이버에 연결 없는 아래쪽 가장자리가 있는 경우 NdisSendNetBufferLists를 호출하거나 드라이버에 연결 지향 가장자리가 있는 경우 NdisCoSendNetBufferLists를 호출하여 데이터를 기본 드라이버로 전달할 수 있습니다. 또는 중간 드라이버는 연결된 버퍼의 내용이나 다른 전송을 기준으로 들어오는 데이터의 순서 또는 타이밍을 수정하는 몇 가지 작업을 수행할 수 있습니다.
중간 드라이버의 목적에 따라 이러한 드라이버는 들어오는 NET_BUFFER_LIST 구조체에 연결된 버퍼를 다시 패키징할 수 있습니다. 예를 들어 중간 드라이버는 다음과 같은 상황에서 네트워크 데이터를 다시 패키지합니다.
중간 드라이버는 상위 프로토콜 드라이버로부터 단일 버퍼로 보내는 경우보다 많은 데이터가 포함된 더 큰 데이터 버퍼를 수신합니다. 따라서 중간 드라이버는 들어오는 데이터를 더 작은 버퍼로 나누어야 합니다.
중간 드라이버는 각 보내기를 기본 드라이버로 전달하기 전에 데이터를 압축하거나 암호화하여 네트워크 데이터의 길이 또는 콘텐츠를 변경합니다.
네트워크 데이터 관리를 만드는 방법에 대한 자세한 내용은 프로토콜 드라이버 버퍼 관리참조하세요.
NDIS는 NET_BUFFER_LIST 구조를 복제하고 조각화하기 위한 인터페이스를 제공합니다. 구조체 복제 및 조각화에 대한 자세한 내용은 파생 NET_BUFFER_LIST 구조체참조하세요.
NET_BUFFER_LIST 구조체는 필요에 따라 드라이버 초기화 시간 또는 ProtocolBindAdapterEx 함수에서 할당할 수 있습니다. 중간 드라이버 개발자는 다음을 수행할 수 있습니다. 필요한 경우 성능상의 이유로 초기화 시 많은 구조를 할당하여 ProtocolReceiveNetBufferLists 상위 수준 드라이버에 표시하기 위해 들어오는 데이터를 복사할 리소스를 미리 할당하고 MiniportSendNetBufferLists 들어오는 네트워크 데이터를 다음 하위 드라이버에 전달할 수 있는 NET_BUFFER_LIST 구조(및 버퍼)를 사용할 수 있도록 합니다.
중간 드라이버가 데이터를 보내거나 받은 데이터를 새 버퍼 또는 버퍼로 보내고 마지막 버퍼의 실제 데이터 길이가 버퍼의 할당된 길이보다 작은 경우 중간 드라이버는 NdisAdjustMdlLength 호출하여 버퍼를 데이터의 실제 길이로 조정할 수 있습니다.
연결 없는 하위 가장자리가 있는 중간 드라이버는 항상 ProtocolReceiveNetBufferLists 함수에서 기본 미니포트 어댑터에서 들어오는 데이터를 받습니다.
연결 지향 하위 계층이 있는 중간 드라이버는 항상 ProtocolCoReceiveNetBufferLists 함수에서 기본 미니포트 어댑터로부터 들어오는 데이터를 수신합니다.