Alocando e liberando memória para um driver proxy san
O driver proxy deve configurar o acesso aos buffers de usuário para que a opção Soquetes do Windows possa transferir mensagens de controle e executar operações RDMA. Para solicitar esse tipo de acesso ao buffer, o driver proxy define um pouco no membro Flags de seu objeto de dispositivo como DO_DIRECT_IO. O driver proxy também deve alocar ou liberar memória usada para transferência de mensagens e RDMA sempre que solicitado. Quando a opção Windows Sockets solicita que um provedor de serviços SAN registre ou libere memória, o provedor de serviços SAN solicita que seu driver proxy aloque ou libere respectivamente a memória física. Para obter mais informações sobre como configurar o acesso ao buffer e alocar e liberar memória, consulte Gerenciamento de Memória e Gerenciamento de Buffer.
Alocando memória baixa para RDMA
Um driver proxy deve alocar memória que possa ser acessada para operações rdma. O driver proxy pode alocar memória baixa para operações rdma mesmo em um sistema configurado para que nenhuma memória física abaixo de 4 GB possa ser alocada. (Isso é chamado de configuração NOLOWMEM.) O driver proxy chama a função MmAllocateContiguousMemorySpecifyCache ou sua própria função DMA AllocateCommonBuffer para recuperar memória baixa.
Para recuperar um ponteiro para a função AllocateCommonBuffer do DMA, o driver proxy executa as seguintes etapas:
Inicializa zero uma estrutura de DEVICE_DESCRIPTION e grava informações relevantes para sua NIC SAN nessa estrutura.
Chama IoGetDmaAdapter para recuperar um ponteiro para a estrutura do adaptador de DMA para sua NIC SAN. Nessa chamada, o driver passa um ponteiro para a estrutura de DEVICE_DESCRIPTION preenchida. IoGetDmaAdapter retorna um ponteiro para uma estrutura do adaptador DMA que contém um ponteiro para uma estrutura DMA_OPERATIONS . DMA_OPERATIONS contém ponteiros para um conjunto definido pelo sistema de funções DMA. Uma dessas funções é AllocateCommonBuffer, que aloca um buffer de DMA fisicamente contíguo.