OID_RECEIVE_FILTER_FREE_QUEUE

NDIS 프로토콜 드라이버는 수신 큐를 해제하기 위해 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 집합 요청은 NDIS 6.20 이상 미니포트 드라이버에 대해 선택 사항입니다. 가상 머신 큐 인터페이스를 지원하는 미니포트 드라이버의 경우 필수입니다.

지나치게 많은 드라이버가 수신 큐를 할당하기 위해 OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID를 발급한 후 OID_RECEIVE_FILTER_FREE_QUEUE OID를 발급하여 수신 큐를 해제합니다.

NDIS가 VMQ 수신 큐를 해제하도록 미니포트 드라이버를 요청하는 경우 다음 단계를 수행합니다.

  1. 네트워크 어댑터는 수신 큐와 연결된 버퍼를 수신하기 위해 데이터의 DMA 전송을 중지하고, 그 후에는 큐가 DMA 중지됨 상태로 전환되어야 합니다. 네트워크 어댑터가 수신 큐에서 마지막 집합 필터를 지우는 OID_RECEIVE_FILTER_CLEAR_FILTER OID 요청을 받았을 때 DMA 작업을 중지했을 수 있습니다.

  2. 미니포트 드라이버는 DMA 전송이 중지되었음을 NDIS에 알리기 위해 NdisReceiveQueueOperationalStateDmaStopped로 설정된 NDIS_RECEIVE_QUEUE_STATE 구조의 QueueState 멤버를 사용하여 NDIS_STATUS_RECEIVE_QUEUE_STATE 상태 표시를 생성합니다.

  3. 미니포트 드라이버는 해당 큐가 미니포트 드라이버로 반환될 때까지 표시된 모든 수신 패킷을 기다립니다.

  4. 미니포트 드라이버는 NdisFreeSharedMemory를 호출하여 큐와 연결된 네트워크 어댑터의 수신 버퍼에 할당된 모든 공유 메모리를 해제합니다.

  5. 미니포트 드라이버는 OID_RECEIVE_FILTER_FREE_QUEUE OID 요청을 완료하여 수신 큐를 해제합니다.

미니포트 드라이버는 NdisFreeSharedMemory 함수를 호출하여 큐에 대한 공유 메모리를 해제합니다. 미니포트 드라이버가 기본이 아닌 큐에 공유 메모리를 할당한 경우 드라이버는 큐를 해제하는 동안 OID_RECEIVE_FILTER_FREE_QUEUE OID의 컨텍스트에서 공유 메모리를 해제합니다. 미니포트 드라이버는 MiniportHaltEx 함수의 컨텍스트에서 기본 큐에 할당한 공유 메모리를 해제합니다.

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

반환 상태 코드

미니포트 드라이버의 MiniportOidRequest 함수는 이 요청에 대해 다음 값 중 하나를 반환합니다.

용어 Description

NDIS_STATUS_SUCCESS

미니포트 드라이버가 요청을 성공적으로 완료했습니다.

NDIS_STATUS_PENDING

미니포트 드라이버는 요청을 비동기적으로 완료합니다. 미니포트 드라이버가 모든 처리를 완료한 후에는 NdisMOidRequestComplete 함수를 호출하고 Status 매개 변수에 대한 NDIS_STATUS_SUCCESS 전달하여 요청을 성공시켜야 합니다.

NDIS_STATUS_NOT_ACCEPTED

미니포트 드라이버가 다시 설정되고 있습니다.

NDIS_STATUS_REQUEST_ABORTED

미니포트 드라이버가 요청 처리를 중지했습니다. 예를 들어 NDIS는 MiniportResetEx 함수를 호출했습니다.

NDIS는 이 요청에 대해 다음 상태 코드 중 하나를 반환합니다.

상태 코드 Description

NDIS_STATUS_SUCCESS

요청된 큐가 성공적으로 해제되었습니다.

NDIS_STATUS_PENDING

요청이 완료될 때까지 보류 중입니다. NDIS는 요청이 완료된 후 최종 상태 코드 및 결과를 호출자에 대한 OID 요청 완료 처리기에 전달합니다.

NDIS_STATUS_INVALID_PARAMETER

큐 식별자가 잘못되었습니다.

NDIS_STATUS_INVALID_LENGTH

정보 버퍼가 너무 짧습니다. NDIS는 데이터를 설정합니다. METHOD_INFORMATION. 필요한 최소 버퍼 크기에 대한 NDIS_OID_REQUEST 구조체의 BytesNeeded 멤버입니다.

요구 사항

Version

NDIS 6.20 이상에서 지원됩니다.

헤더

Ntddndis.h(Ndis.h 포함)

추가 정보

MiniportHaltEx

NDIS_OID_REQUEST

NDIS_RECEIVE_QUEUE_FREE_PARAMETERS

NDIS_STATUS_RECEIVE_QUEUE_STATE

NdisCloseAdapterEx

NdisFreeSharedMemory

OID_RECEIVE_FILTER_ALLOCATE_QUEUE