Share via


역직렬화된 NDIS 미니포트 드라이버

모든 NDIS 6.0 이상 드라이버는 역직렬화됩니다.

역직렬화된 NDIS 미니포트 드라이버는 자체 MiniportXxx 함수의 작업을 직렬화하고 이러한 함수를 수행하기 위해 NDIS에 의존하지 않고 내부적으로 모든 송신 요청을 큐에 넣습니다. 따라서 역직렬화된 미니포트 드라이버는 직렬화된 미니포트 드라이버보다 훨씬 더 나은 전체 이중 성능을 달성할 수 있습니다.

역직렬화된 드라이버 모델은 NDIS 미니포트 드라이버의 기본 모델입니다. 연결 지향 미니포트 드라이버와 WDM 아래쪽 가장자리가 있는 미니포트 드라이버는 역직렬화되어야 합니다. 새 NDIS 미니포트 드라이버를 작성할 때 역직렬화된 드라이버를 작성해야 합니다. 가능하면 이전 드라이버를 NDIS 6.0 이상으로 이식해야 합니다. 드라이버 포팅에 대한 자세한 내용은 다음을 참조하세요.

역직렬화된 미니포트 드라이버는 NDIS와 인터페이스할 때 다음 요구 사항을 충족해야 합니다.

  • 역직렬화된 미니포트 드라이버는 초기화 중에 NDIS와 같이 자신을 식별해야 합니다.

  • 역직렬화된 미니포트 드라이버는 모든 보내기 요청을 비동기적으로 완료해야 합니다. 송신 요청을 완료하기 위해 연결 없는 NDIS 6.0 이상 미니포트 드라이버는 NdisMSendNetBufferListsComplete 함수를 호출합니다. 연결 지향 NDIS 6.0 이상 미니포트 드라이버는 NdisMCoSendNetBufferListsComplete 함수를 호출합니다.

  • NDIS 6.0 이상을 지원하는 역직렬화된 미니포트 드라이버는 NdisMSendNetBufferListsComplete에 전달할 NET_BUFFER_LIST 구조체의 Status 멤버를 설정합니다.

  • 역직렬화된 미니포트 드라이버가 보내기 요청을 즉시 완료할 수 없는 경우 다시 큐에 대한 요청을 NDIS로 반환할 수 없습니다. 대신 미니포트 드라이버는 데이터를 전송하는 데 충분한 리소스를 사용할 수 있게 될 때까지 내부적으로 전송 요청을 큐에 대기해야 합니다.

  • 역직렬화된 미니포트 드라이버는 NDIS가 반환될 때까지 수신 표시에서 NDIS에 전달하는 구조를 검사해서는 안 됩니다. NDIS는 미니포트 드라이버의 MiniportReturnNetBufferLists 함수에 NET_BUFFER_LIST 구조를 반환합니다.

역직렬화된 미니포트 드라이버는 다음 드라이버 내부 요구 사항을 충족해야 합니다.

  • 역직렬화된 미니포트 드라이버는 스핀 잠금을 사용하여 네트워크 버퍼 큐를 보호해야 합니다. 또한 역직렬화된 미니포트 드라이버는 자체 MiniportXxx 함수를 통해 공유 상태를 동시 액세스로부터 보호해야 합니다.

  • 역직렬화된 미니포트 드라이버의 MiniportXxx 함수는 IRQL <= DISPATCH_LEVEL 실행할 수 있습니다. 따라서 드라이버 작성기는 MiniportXxx 함수가 요청을 처리하는 시퀀스에서 호출된다고 가정할 수 없습니다. 하나의 MiniportXxx 함수는 낮은 IRQL에서 실행되는 다른 MiniportXxx 함수를 선점할 수 있습니다.

  • 역직렬화된 미니포트 드라이버는 네트워크 버퍼 큐 관리를 담당합니다. 미니포트 드라이버에 리소스 문제가 발생하면 다시 큐에 대한 NDIS로 보내기 요청을 반환할 수 없습니다. 대신 미니포트 드라이버는 데이터를 보내기에 충분한 리소스를 사용할 수 있게 될 때까지 내부적으로 모든 송신 요청을 큐에 대기해야 합니다.

  • 역직렬화된 미니포트 드라이버는 프로토콜 결정 순서로 보내기 요청을 완료해야 합니다.

NDIS 드라이버의 송신 및 수신 요구 사항에 대한 자세한 내용은 보내기 및 받기 작업을 참조하세요.

역직렬화된 미니포트 드라이버는 일반적으로 프로토콜 결정 순서로 보내기 요청을 완료합니다. 그러나 패킷 우선 순위를 지원하는 미니포트 드라이버(예: IEEE 802.1p)는 우선 순위 정보에 따라 전송 요청의 순서를 변경할 수 있습니다.