Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby przydzielić kolejkę z początkowym zestawem parametrów konfiguracji, nadrzędny sterownik wystawia żądanie metody OID OID_RECEIVE_FILTER_ALLOCATE_QUEUE. Element InformationBuffer struktury NDIS_OID_REQUEST początkowo zawiera wskaźnik do struktury NDIS_RECEIVE_QUEUE_PARAMETERS. Po pomyślnym powrocie z żądania metody OID, element InformationBuffer struktury NDIS_OID_REQUEST zawiera wskaźnik prowadzący do struktury NDIS_RECEIVE_QUEUE_PARAMETERS, która posiada nowy identyfikator kolejki oraz wpis tabeli MSI-X.
Struktura NDIS_RECEIVE_QUEUE_PARAMETERS jest używana w identyfikatorze OID OID_RECEIVE_FILTER_ALLOCATE_QUEUE i identyfikatorze OID OID_RECEIVE_FILTER_QUEUE_PARAMETERS. Aby uzyskać więcej informacji na temat parametrów kolejki maszyny wirtualnej, zobacz Uzyskiwanie i aktualizowanie parametrów kolejki maszyny wirtualnej.
Nadrzędny sterownik inicjuje strukturę NDIS_RECEIVE_QUEUE_PARAMETERS z następującymi parametrami konfiguracji kolejki:
Typ kolejki (NdisReceiveQueueTypeVMQueue z listy wyliczeniowej NDIS_RECEIVE_QUEUE_TYPE).
Przywiązanie procesora do kolejki.
Nazwa kolejki i nazwa maszyny wirtualnej.
Parametry podziału lookahead-split.
Uwaga Począwszy od NDIS 6.30, dzielenie danych pakietów na oddzielne bufory wyprzedzające nie jest już obsługiwane.
Uwaga Nadrzędny sterownik może ustawiać flagi NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION i NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED w Flagi składowej struktury NDIS_RECEIVE_QUEUE_PARAMETERS. Inne flagi nie są wykorzystywane do przydzielania kolejek.
Gdy usługa NDIS odbiera żądanie OID w celu alokacji kolejki odbierania, weryfikuje parametry kolejki. Gdy usługa NDIS przydziela niezbędne zasoby i identyfikator kolejki, przesyła żądanie OID do bazowego sterownika miniportu. Identyfikator kolejki jest unikatowy dla skojarzonej karty sieciowej.
Jeśli sterownik miniportu może pomyślnie przydzielić niezbędne zasoby oprogramowania i sprzętu dla kolejki odbierania, realizuje żądanie OID z powodzeniem.
Zanim usługa NDIS wyśle żądanie OID do sterownika miniportu, usługa NDIS przypisuje identyfikator kolejki w QueueId składowej struktury NDIS_RECEIVE_QUEUE_PARAMETERS i przekazuje żądanie metody do sterownika miniportu. Sterownik miniportu udostępnia wpis tabeli MSI-X w elemencie MSIXTableEntry.
Sterownik miniportu musi zachować identyfikatory kolejki dla przydzielonych kolejek odbierania. NDIS używa identyfikatora kolejki odbiorczej podczas kolejnych wywołań sterownika miniportu w celu ustawienia filtru odbiorczego na kolejce, zmiany parametrów kolejki odbiorczej lub zwolnienia tej kolejki.
Uwaga Kolejka domyślna (identyfikator kolejki zero) jest zawsze przydzielana i nie można jej zwolnić.
Nadrzędny sterownik musi użyć identyfikatora kolejki, który NDIS udostępnia w kolejnych żądaniach OID, na przykład aby zmodyfikować parametry kolejki lub ją zwolnić. Identyfikator kolejki jest również uwzględniany w danych OOB we wszystkich strukturach NET_BUFFER_LIST skojarzonych z kolejką. Sterowniki używają makra NET_BUFFER_LIST_RECEIVE_QUEUE_ID do pobierania identyfikatora kolejki w strukturze NET_BUFFER_LIST.
Uwaga Sterownik protokołu A może ustawić filtry VMQ w dowolnym momencie po pomyślnym przydzieleniu kolejki i przed usunięciem kolejki.
Sterownik protokołu wystawia żądanie OID metody OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE w celu ukończenia alokacji kolejki. Sterownik miniportu może przydzielić pamięć współdzieloną i inne zasoby po zakończeniu alokacji. Aby uzyskać więcej informacji na temat przydzielania zasobów pamięci udostępnionej, zobacz Przydzielanie Zasobów Pamięci Udostępnionej.
Gdy sterownik miniportu odbiera żądanie identyfikatora OID OID_RECEIVE_FILTER_QUEUE_ALLOCATION i pomyślnie je obsługuje, kolejka przechodzi do stanu Przydzielone. Aby uzyskać więcej informacji na temat stanów kolejki, zobacz Queue States and Operations.
Gdy nadrzędny sterownik przydziela co najmniej jedną kolejkę odbierania (i opcjonalnie ustawia początkowe filtry), musi wydać zestaw żądań OID OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE, aby powiadomić sterownik miniportu, że alokacja została zakończona dla aktualnej partii kolejek odbierania.
Sterownik miniportu nie może przechowywać żadnych pakietów w kolejce odbierania, jeśli nie ma żadnych filtrów ustawionych w tej kolejce. Jeśli kolejka nigdy nie miała żadnego zestawu filtrów lub wszystkie filtry zostały wyczyszczone, kolejka powinna być pusta, a wszystkie pakiety powinny zostać odrzucone. Oznacza to, że nie są one wskazywane na stos sterownika lub przechowywane w kolejce.
Nadrzędne sterowniki używają identyfikatora OID OID_RECEIVE_FILTER_FREE_QUEUE do zwalniania kolejek, które zostały przez nie przydzielone. Aby uzyskać więcej informacji na temat zwalniania kolejek, zobacz Zwalnianie kolejki maszyny wirtualnej.