Compartilhar via


Alocação de recursos de memória compartilhada

Para alocar recursos de memória compartilhada para uma fila de VM, um driver de miniport chama a função NdisAllocateSharedMemory. Por exemplo, o miniport driver aloca memória compartilhada quando recebe o OID OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE. Além disso, um driver de miniporto pode alocar memória compartilhada para a fila padrão durante o processo de inicialização do adaptador de rede. Para obter mais informações sobre como alocar filas, consulte Alocando uma fila de VM.

O driver de miniporta pode alocar mais memória para a fila até que ela seja liberada. Para obter mais informações sobre como liberar uma fila, consulte Como liberar uma fila de VM.

A estrutura NDIS_SHARED_MEMORY_PARAMETERS especifica os parâmetros de memória compartilhada para uma solicitação de alocação de memória compartilhada. Os drivers de miniport passam essa estrutura para a função NdisAllocateSharedMemory . O NDIS passa essa estrutura para a função NetAllocateSharedMemory (ou seja, o ponto de entrada ALLOCATE_SHARED_MEMORY_HANDLER).

Quando um driver de miniporto aloca memória compartilhada, ele especifica o seguinte:

  • Identificador de fila.

  • Comprimento da memória compartilhada.

  • Como a memória compartilhada é usada. Por exemplo, o driver de miniporto especifica NdisSharedMemoryUsageReceive se a memória compartilhada será utilizada para buffers de recebimento.

Se o sinalizador NDIS_SHARED_MEM_PARAMETERS_CONTIGUOUS não estiver definido no membro Sinalizadores, a memória compartilhada poderá ser especificada em uma lista de scatter-gather que se encontra na memória não contígua.

A enumeração NDIS_SHARED_MEMORY_USAGE especifica como a memória compartilhada é usada. A enumeração NDIS_SHARED_MEMORY_USAGE é usada nas estruturas NDIS_SHARED_MEMORY_PARAMETERS e NDIS_SCATTER_GATHER_LIST_PARAMETERS . Para obter informações sobre parâmetros de memória compartilhada em buffers de dados de recepção do VMQ, consulte Memória Compartilhada em Buffers de Recebimento.

A função NdisAllocateSharedMemory fornece o seguinte para o chamador:

  • Endereço virtual da memória alocada.

  • Lista de coleta de dispersão.

  • Identificador de memória compartilhado – para indicações de recebimento.

  • Identificador de alocação – usado para identificar a memória posteriormente.

Os drivers de miniport chamam a função NdisFreeSharedMemory para liberar memória compartilhada para uma fila. Se o driver de miniporto alocou a memória compartilhada para uma fila não padrão, ele libera a memória compartilhada no contexto da OID OID_RECEIVE_FILTER_FREE_QUEUE enquanto está liberando a fila. Miniporte drivers memória compartilhada gratuita que eles alocaram para a fila padrão no contexto da função MiniportHaltEx.