Udostępnij przez


Alokacja zasobów pamięci współdzielonej

Aby przydzielić zasoby pamięci udostępnionej dla kolejki maszyny wirtualnej, sterownik miniportu wywołuje funkcję NdisAllocateSharedMemory . Na przykład sterownik miniportu przydziela pamięć udostępnioną po odebraniu identyfikatora OID OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE . Ponadto sterownik miniportu może przydzielić pamięć udostępnioną dla kolejki domyślnej podczas inicjowania karty sieciowej. Aby uzyskać więcej informacji na temat przydzielania kolejek, zobacz przydzielanie kolejki VM.

Sterownik miniportu może przydzielić więcej pamięci dla kolejki do momentu zwolnienia kolejki. Aby uzyskać więcej informacji na temat zwalniania kolejki, zobacz Zwalnianie kolejki VM.

Struktura NDIS_SHARED_MEMORY_PARAMETERS określa parametry pamięci udostępnionej dla żądania alokacji pamięci udostępnionej. Sterowniki Miniport przekazują tę strukturę do funkcji NdisAllocateSharedMemory . NDIS przekazuje tę strukturę do funkcji NetAllocateSharedMemory (czyli punktu ALLOCATE_SHARED_MEMORY_HANDLER).

Gdy sterownik miniportu przydziela pamięć udostępnioną, określa następujące elementy:

  • Identyfikator kolejki.

  • Długość pamięci udostępnionej.

  • Sposób użycia pamięci udostępnionej. Na przykład sterownik miniportu określa NdisSharedMemoryUsageReceive, jeśli pamięć udostępniona ma być używana do buforów odbiorczych.

Jeśli flaga NDIS_SHARED_MEM_PARAMETERS_CONTIGUOUS nie jest ustawiona w elemencie członkowskim Flags, można określić pamięć współdzieloną na liście rozproszonej-zbierającej, która jest zawarta w pamięci nieciągłej.

Wyliczenie NDIS_SHARED_MEMORY_USAGE określa sposób użycia pamięci udostępnionej. Wyliczenie NDIS_SHARED_MEMORY_USAGE jest używane w strukturach NDIS_SHARED_MEMORY_PARAMETERS i NDIS_SCATTER_GATHER_LIST_PARAMETERS . Aby uzyskać informacje o parametrach pamięci współdzielonej w buforach danych odbierania w VMQ, zobacz Shared Memory in Receive Buffers.

Funkcja NdisAllocateSharedMemory zapewnia następujące elementy dla wywołującego:

  • Wirtualny adres przydzielonej pamięci.

  • Lista zbierania punktowego.

  • Uchwyt pamięci współdzielonej — dla wskaźników odbioru.

  • Uchwyt alokacji — służy do identyfikowania pamięci w przyszłości.

Sterowniki miniportu nazywają funkcję NdisFreeSharedMemory, aby zwolnić pamięć udostępnioną dla kolejki. Jeśli sterownik miniportu przydzielił pamięć współdzieloną dla niestandardowej kolejki, zwalnia tę pamięć w kontekście identyfikatora OID OID_RECEIVE_FILTER_FREE_QUEUE podczas zwalniania kolejki. Sterowniki Miniport mają bezpłatną pamięć udostępnioną przydzieloną dla kolejki domyślnej w kontekście funkcji MiniportHaltEx.