Compartilhando arquivos e memória

O mapeamento de arquivos pode ser usado para compartilhar um arquivo ou memória entre dois ou mais processos. Para compartilhar um arquivo ou 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 de 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 esteja em uso por um objeto de outro tipo.

Para compartilhar memória que não esteja associada a um arquivo, um processo deve usar a função CreateFileMapping e especificar INVALID_HANDLE_VALUE 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 INVALID_HANDLE_VALUE em uma chamada para CreateFileMapping.

A maneira mais fácil para outros processos obterem um identificador do objeto de mapeamento de arquivo criado pelo primeiro processo é usar a função OpenFileMapping e especificar o nome do objeto. Isso é chamado de 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 herança e 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 seu 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 usando a função CloseHandle .

Para obter informações sobre a segurança do objeto de mapeamento de arquivos, consulte Segurança de Mapeamento de Arquivos e Direitos de Acesso.

Criando memória compartilhada nomeada