중간 드라이버 네트워크 데이터 관리
중간 드라이버는 네트워크를 통해 보낼 상위 수준 드라이버에서 하나 이상의 연결된 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 함수에서 기본 미니포트 어댑터에서 들어오는 데이터를 받습니다.