Partilhar via


Gerenciando seções de memória

Um driver pode criar um objeto de seção chamando ZwCreateSection, que retorna uma alça para o objeto de seção. Use o parâmetro FileHandle para especificar o ficheiro de suporte ou NULL se a seção não for suportada por ficheiro. Identificadores adicionais para o objeto de seção podem ser abertos usando ZwOpenSection.

Para tornar os dados que pertencem a um objeto de seção acessíveis dentro do espaço de endereçamento do processo atual, é necessário mapear uma visualização da seção. Os drivers podem mapear uma exibição de uma seção no espaço de endereçamento do processo atual usando a rotina ZwMapViewOfSection. O parâmetro SectionOffset especifica o deslocamento de bytes onde a exibição começa dentro da seção e o ViewSize especifica o número de bytes a serem mapeados.

O parâmetro Protect especifica as operações permitidas na exibição. Especifique PAGE_READONLY para um modo de exibição somente leitura, PAGE_READWRITE para um modo de exibição de leitura/gravação e PAGE_WRITECOPY para um modo de exibição de cópia na gravação.

Nenhuma memória física é alocada para uma exibição até que o intervalo de memória virtual seja acessado. O primeiro acesso à faixa de memória causa uma falha de página; em seguida, o sistema aloca uma página para armazenar a localização de memória. Se a seção tiver suporte de ficheiro, o sistema lê o conteúdo do ficheiro que corresponde a essa página e copia-o para a memória. (Observe que os objetos e modos de exibição de seção não utilizados usam alguns pools paginados e não paginados para fins de contabilidade.)

Depois que um driver não estiver mais usando um modo de exibição, ele o desmapeia fazendo uma chamada para ZwUnmapViewOfSection. Depois que o driver não estiver mais usando o objeto de seção, ele fecha a alça de seção com ZwClose. Observe que depois que a exibição for mapeada e nenhuma outra exibição for mapeada, é seguro chamar imediatamente ZwClose na alça de seção; O modo de exibição (e o objeto de seção) continuarão a existir até que o modo de exibição seja desmapeado. Esta é a prática recomendada porque reduz o risco do condutor não fechar o manípulo.