다음을 통해 공유


프로토콜 드라이버에서 데이터 수신

다음 그림에서는 드라이버 스택의 프로토콜 드라이버, NDIS 및 기본 드라이버를 포함하는 기본 수신 작업을 보여 줍니다.

드라이버 스택의 프로토콜 드라이버, NDIS 및 기본 드라이버와 관련된 기본 수신 작업을 보여 주는 다이어그램

NDIS는 프로토콜 드라이버의 ProtocolReceiveNetBufferLists 함수를 호출하여 기본 드라이버에서 제공되는 표시를 처리합니다. NDIS는 기본 드라이버가 수신 표시 함수(예: NdisMIndicateReceiveNetBufferLists)를 호출한 후 ProtocolReceiveNetBufferLists를 호출하여 수신된 네트워크 데이터 또는 루프백 데이터를 나타냅니다.

ProtocolReceiveNetBufferListsReceiveFlags 매개 변수에 있는 NDIS_RECEIVE_FLAGS_RESOURCES 플래그가 설정되지 않은 경우 프로토콜 드라이버는 NdisReturnNetBufferLists 함수를 호출할 때까지 NET_BUFFER_LIST 구조체의 소유권을 유지합니다. NDIS가 NDIS_RECEIVE_FLAGS_RESOURCES 플래그를 설정하는 경우 프로토콜 드라이버는 NET_BUFFER_LIST 구조 및 연결된 리소스를 유지할 수 없습니다. set NDIS_RECEIVE_FLAGS_RESOURCES 플래그는 기본 드라이버가 수신 리소스에서 부족하게 실행되고 있음을 나타냅니다. 이 경우 ProtocolReceiveNetBufferLists 함수는 받은 데이터를 프로토콜 할당 스토리지에 복사하고 가능한 한 빨리 반환해야 합니다.

참고 NDIS는 기본 드라이버가 나타내는 플래그를 변경할 수 있습니다. 예를 들어 미니포트 드라이버가 NdisMIndicateReceiveNetBufferLists 함수의 ReceiveFlags 매개 변수에서 NDIS_RECEIVE_FLAGS_RESOURCES 플래그를 설정하는 경우 NDIS는 표시된 데이터를 복사하고 NDIS_RECEIVE_FLAGS_RESOURCES 플래그가 지워진 ProtocolReceiveNetBufferLists에 복사를 전달할 수 있습니다.

참고NDIS_RECEIVE_FLAGS_RESOURCES 플래그가 설정된 경우 프로토콜 드라이버는 연결된 목록에 원래 NET_BUFFER_LIST 구조 집합을 유지해야 합니다. 예를 들어 이 플래그가 설정되면 드라이버는 구조를 처리하고 스택을 한 번에 하나씩 표시할 수 있지만 함수가 반환되기 전에 원래 연결된 목록을 복원해야 합니다.

프로토콜 드라이버는 NdisReturnNetBufferLists 함수를 호출하여 연결된 NET_BUFFER 구조 및 네트워크 데이터와 함께 NET_BUFFER_LIST 구조 목록의 소유권을 해제합니다.