Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы выделить ресурсы общей памяти для очереди виртуальных машин, драйвер минипорта вызывает функцию NdisAllocateSharedMemory. Например, когда драйвер минипорта получает OID OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE, он выделяет общую память. Кроме того, минипорт-драйвер может выделить общую память для очереди по умолчанию во время инициализации сетевого адаптера. Дополнительные сведения о выделении очереди ВМ см. в "Выделение очереди ВМ".
Минипорт-драйвер может выделить больше памяти для очереди, пока очередь не будет освобождена. Дополнительные сведения о освобождении очереди см. в освобождении очереди виртуальных машин.
Структура NDIS_SHARED_MEMORY_PARAMETERS указывает параметры общей памяти для запроса на выделение общей памяти. Драйверы минипортов передают данную структуру в функцию NdisAllocateSharedMemory. NDIS передает эту структуру в функцию NetAllocateSharedMemory (то есть точку входа ALLOCATE_SHARED_MEMORY_HANDLER).
Когда минипорт-драйвер выделяет общую память, он указывает следующее:
Идентификатор очереди.
Длина общей памяти.
Как используется общая память. Например, драйвер минипорта указывает NdisSharedMemoryUsageReceive, если общая память будет использоваться для буферов получения данных.
Если флаг NDIS_SHARED_MEM_PARAMETERS_CONTIGOUS не задан в элементе Флаги, общая память может быть указана в списке точечного сбора, который содержится в неконтентной памяти.
Перечисление NDIS_SHARED_MEMORY_USAGE указывает, как используется общая память. Перечисление NDIS_SHARED_MEMORY_USAGE используется в структурах NDIS_SHARED_MEMORY_PARAMETERS и NDIS_SCATTER_GATHER_LIST_PARAMETERS. Сведения о параметрах общей памяти в буферах данных для приема с помощью VMQ см. в разделе Общая память в буферах приема.
Функция NdisAllocateSharedMemory предоставляет следующее вызывающему:
Виртуальный адрес выделенной памяти.
Список точечной сборки.
Дескриптор общей памяти — для индикации получения.
Дескриптор выделения — используется для идентификации памяти в будущем.
Драйверы минипорта вызывают функцию NdisFreeSharedMemory, чтобы освободить общую память для очереди. Если драйвер минипорта выделил общую память для недефолтной очереди, он освобождает общую память в контексте OID_RECEIVE_FILTER_FREE_QUEUE OID, при освобождении очереди. Драйверы минипортов освобождают общую память, которую они выделили для очереди по умолчанию в контексте функции MiniportHaltEx.