다음을 통해 공유


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)입니다.

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

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

  • 전방 탐색 분할 매개변수입니다.

    참고 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 큐해제를 참조하세요.