다음을 통해 공유


VM 큐 해제

수신 큐를 해제하기 위해 지나치게 많은 드라이버가 OID_RECEIVE_FILTER_FREE_QUEUE 설정된 OID 요청을 발급합니다. NDIS_OID_REQUEST 구조체의 InformationBuffer 멤버에는 NDIS_RECEIVE_QUEUE_ID 형식의 큐 식별자가 있는 NDIS_RECEIVE_QUEUE_FREE_PARAMETERS 구조체에 대한 포인터가 포함되어 있습니다.

OID_RECEIVE_FILTER_FREE_QUEUE OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID를 사용하여 오버리싱 드라이버가 할당한 수신 큐를 해제 합니다. 수신 큐 할당에 대한 자세한 내용은 VM 큐 할당을 참조하세요.

참고NDIS_DEFAULT_RECEIVE_QUEUE_ID 큐 식별자가 있는 기본 큐는 항상 할당되며 해제할 수 없습니다.

오버리싱 드라이버는 큐를 해제하기 전에 큐에 설정한 모든 필터를 해제해야 합니다. 또한 오버리싱 드라이버는 네트워크 어댑터에 대한 바인딩을 닫기 위해 NdisCloseAdapterEx 함수를 호출하기 전에 네트워크 어댑터에 할당된 모든 수신 큐를 해제해야 합니다. NDIS는 미니포트 드라이버의 MiniportHaltEx 함수를 호출하기 전에 네트워크 어댑터에 할당된 모든 큐를 해제합니다.

미니포트 드라이버가 큐를 해제하라는 요청을 받으면 다음을 수행합니다.

  • 큐와 연결된 공유 메모리 리소스에 대한 DMA를 즉시 중지해야 합니다.

  • DMA가 중지되었음을 나타내는 상태 표시를 생성합니다.

  • 큐와 연결된 모든 미해결 NET_BUFFER_LIST 구조체가 반환될 때까지 기다립니다.

  • 연결된 공유 메모리 및 하드웨어 리소스를 해제합니다.

미니포트 드라이버가 OID_RECEIVE_FILTER_FREE_QUEUE 집합 요청을 수신하는 경우 큐는 중지 DMA 상태를 입력해야 하며 큐에서 DMA를 중지하고 미니포트 드라이버는 NDIS_STATUS_RECEIVE_QUEUE_STATE 상태 표시를 사용하여 상태 변경을 나타내야 합니다. 큐 상태에 대한 자세한 내용은 큐 상태 및 작업을 참조하세요.

미니포트 드라이버가 NDIS_STATUS_RECEIVE_QUEUE_STATE 상태 표시를 실행한 후 연결된 공유 메모리를 해제하기 전에 보류 중인 모든 수신 표시가 완료될 때까지 기다려야 합니다. 공유 메모리를 해제하는 방법에 대한 자세한 내용은 공유 메모리 리소스 할당을 참조하세요.