Compartilhando arquivos e memória

O mapeamento de arquivo pode ser usado para compartilhar um arquivo ou memória entre dois ou mais processos. Para compartilhar um arquivo ou uma memória, todos os processos devem usar o nome ou o identificador do mesmo objeto de mapeamento de arquivo.

Para compartilhar um arquivo, o primeiro processo cria ou abre um arquivo usando a função CreateFile . Em seguida, ele cria um objeto de mapeamento de arquivo usando a função CreateFileMapping , especificando o identificador de arquivo e um nome para o objeto de mapeamento de arquivo. Os nomes dos objetos evento, semáforo, mutex, temporizador de espera, trabalho e mapeamento de arquivo compartilham o mesmo namespace. Portanto, as funções CreateFileMapping e OpenFileMapping falharão se especificarem um nome que está sendo usado por um objeto de outro tipo.

Para compartilhar memória que não está associada a um arquivo, um processo deve usar a função CreateFileMapping e especificar um _ valor de identificador inválido _ como o parâmetro hFile em vez de um identificador de arquivo existente. O objeto de mapeamento de arquivo correspondente acessa a memória apoiada pelo arquivo de paginação do sistema. Você deve especificar um tamanho maior que zero quando especificar um hFile de valor de _ identificador inválido _ em uma chamada para CreateFileMapping.

A maneira mais fácil de outros processos obter um identificador do objeto de mapeamento de arquivo criado pelo primeiro processo é usar a função OpenFileMapping e especificar o nome do objeto. Isso é conhecido como memória compartilhada nomeada. Se o objeto de mapeamento de arquivo não tiver um nome, o processo deverá obter um identificador para ele por meio de herança ou duplicação. Para obter mais informações sobre a herança e a duplicação, consulte herança.

Os processos que compartilham arquivos ou memória devem criar exibições de arquivo usando a função MapViewOfFile ou MapViewOfFileEx . Eles devem coordenar o acesso usando semáforos, mutexes, eventos ou alguma outra técnica de exclusão mútua. Para obter mais informações, consulte sincronização.

Um objeto de mapeamento de arquivo compartilhado não será destruído até que todos os processos que o usam fechem seus identificadores para ele usando a função CloseHandle .

Para obter informações sobre segurança de objeto de mapeamento de arquivo, consulte segurança de mapeamento de arquivo e direitos de acesso.

Criando a memória compartilhada nomeada