다음을 통해 공유


VM 큐 할당

초기 구성 매개 변수 집합을 사용하여 큐를 할당하기 위해 지나치게 많은 드라이버가 OID_RECEIVE_FILTER_ALLOCATE_QUEUE 메서드 OID 요청을 발급합니다. NDIS_OID_REQUEST 구조체의 InformationBuffer 멤버는 처음에 NDIS_RECEIVE_QUEUE_PARAMETERS 구조체에 대한 포인터를 포함합니다. OID 메서드 요청에서 성공적으로 반환된 후 NDIS_OID_REQUEST 구조체의 InformationBuffer 멤버에는 새 큐 식별자와 MSI-X 테이블 항목이 있는 NDIS_RECEIVE_QUEUE_PARAMETERS 구조체에 대한 포인터가 포함됩니다.

NDIS_RECEIVE_QUEUE_PARAMETERS 구조체는 OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID 및 OID_RECEIVE_FILTER_QUEUE_PARAMETERS OID에서 사용됩니다. VM 큐 매개 변수에 대한 자세한 내용은 VM 큐 매개 변수 가져오기 및 업데이트를 참조하세요.

오버리싱 드라이버는 다음 큐 구성 매개 변수를 사용하여 NDIS_RECEIVE_QUEUE_PARAMETERS 구조를 초기화합니다.

  • 큐 유형(NDIS_RECEIVE_QUEUE_TYPE 열거형의 NdisReceiveQueueTypeVMQueue)입니다.

  • 큐에 대한 프로세서 선호도입니다.

  • 큐 이름 및 가상 머신 이름입니다.

  • lookahead 분할 매개 변수입니다.

    참고 NDIS 6.30부터 패킷 데이터를 별도의 lookahead 버퍼로 분할하는 것은 더 이상 지원되지 않습니다.

참고 오버리싱 드라이버는 NDIS_RECEIVE_QUEUE_PARAMETERS 구조체의 Flags 멤버에서 NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION 및 NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED플래그를 설정할 수 있습니다. 다른 플래그는 큐 할당에 사용되지 않습니다.

NDIS가 수신 큐를 할당하는 OID 요청을 받으면 큐 매개 변수를 확인합니다. NDIS는 필요한 리소스와 큐 식별자를 할당한 후 기본 미니포트 드라이버에 OID 요청을 제출합니다. 큐 식별자는 연결된 네트워크 어댑터에 고유합니다.

미니포트 드라이버가 수신 큐에 필요한 소프트웨어 및 하드웨어 리소스를 성공적으로 할당할 수 있는 경우 성공 상태 OID 요청을 완료합니다.

NDIS가 미니포트 드라이버에 OID 요청을 보내기 전에 NDIS는 NDIS_RECEIVE_QUEUE_PARAMETERS 구조의 QueueId 멤버에 큐 식별자를 할당하고 메서드 요청을 미니포트 드라이버에 전달합니다. 미니포트 드라이버는 MSIXTableEntry 멤버에 MSI-X 테이블 항목을 제공합니다.

미니포트 드라이버는 할당된 수신 큐에 대한 큐 식별자를 유지해야 합니다. NDIS는 미니포트 드라이버에 대한 후속 호출에 수신 큐의 큐 식별자를 사용하여 수신 큐에서 수신 필터를 설정하거나, 수신 큐 매개 변수를 변경하거나, 수신 큐를 해제합니다.

참고 기본 큐(큐 식별자 0)는 항상 할당되며 해제할 수 없습니다.

오버리싱 드라이버는 NDIS가 후속 OID 요청에서 제공하는 큐 식별자를 사용하여 큐 매개 변수를 수정하거나 큐를 해제해야 합니다. 큐 식별자는 큐와 연결된 모든 NET_BUFFER_LIST 구조의 OOB 데이터에도 포함됩니다. 드라이버는 NET_BUFFER_LIST_RECEIVE_QUEUE_ID 매크로를 사용하여 NET_BUFFER_LIST 구조에서 큐 식별자를 검색합니다.

참고 프로토콜 드라이버는 큐를 성공적으로 할당한 후 큐가 삭제되기 전에 언제든지 VMQ 필터를 설정할 수 있습니다.

프로토콜 드라이버는 큐 할당을 완료하기 위해 OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE 메서드 OID 요청을 발급합니다. 미니포트 드라이버는 할당이 완료되면 공유 메모리 및 기타 리소스를 할당할 수 있습니다. 공유 메모리 리소스 할당에 대한 자세한 내용은 공유 메모리 리소스 할당을 참조하세요.

미니포트 드라이버가 OID_RECEIVE_FILTER_QUEUE_ALLOCATION OID 요청을 수신하고 성공적으로 처리하면 큐가 할당됨 상태가 됩니다. 큐 상태에 대한 자세한 내용은 큐 상태 및 작업을 참조하세요.

지나치게 많은 드라이버가 하나 이상의 수신 큐를 할당하고(선택적으로 초기 필터를 설정함) 미니포트 드라이버에 현재 수신 큐 일괄 처리에 대한 할당이 완료되었음을 알리기 위해 OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE 설정 OID 요청을 실행해야 합니다.

해당 큐에 설정된 필터가 없는 경우 미니포트 드라이버는 수신 큐에 패킷을 유지하지 않아야 합니다. 큐에 필터가 설정되지 않았거나 모든 필터가 지워진 경우 큐는 비어 있어야 하며 패킷을 삭제해야 합니다. 즉, 드라이버 스택을 표시하거나 큐에 유지되지 않습니다.

지나치게 많은 드라이버는 OID_RECEIVE_FILTER_FREE_QUEUE OID를 사용하여 할당하는 큐를 해제합니다. 큐 해제에 대한 자세한 내용은 VM 큐 해제를 참조하세요.