Utilitário ou função para obter o estado de uma página (na RAM, trocada, não carregada)

0

Eu preciso de um utilitário (ou, se isso não existir, uma função do Windows) para consultar o estado das páginas em um aplicativo em execução. Utilitários como o VMMap já fornecem algumas informações, mas o que me falta é o seguinte: saber se uma página de memória está atualmente na RAM, trocada ou não está carregada.

O problema é que meu executável é carregado a partir da rede e, embora eu tenha usado o sinalizador de vinculador / SWAPRUN: NET no passado, não o uso mais, pois leva a horríveis problemas de desempenho no Windows Explorer desde o Windows Vista (se este O sinalizador está definido O Windows Explorer também carrega o executável completo na rede apenas para mostrar o ícone).

Eu tenho algum truque para forçar o aplicativo na memória, mas tenho a impressão de que nem sempre funciona e também parece não funcionar se o Windows ficar com pouca memória (acho que simplesmente remove as páginas executáveis de trocá-los para o arquivo de paginação).

Com esse utilitário, eu seria capaz de verificar o que o Windows realmente está fazendo e posso tentar algumas idéias alternativas para forçar o código do aplicativo na memória.

Patrick
fonte
11
Você está certo. O Windows não grava páginas não modificadas de arquivos .exe ou .dll no arquivo de paginação. Apenas libera a memória física e lê a partir do local original novamente, se necessário. A função VirtualLock pode ser usada para impedir que a memória seja paginada, mas provavelmente é uma má idéia se você estiver com pouca memória. msdn.microsoft.com/en-us/library/aa366895(v=vs.85).aspx
David Marshall
Esse truque sujo funcionaria: use o VirtualProtect para tornar a página gravável, altere 1 byte (precisa ser diferente?) E faça com que a página seja lida e executada novamente.
30513 Patrick
11
Sim, isso forçaria o Windows a salvá-lo no arquivo de paginação se quisesse reutilizar a memória física. Não acho que o hardware possa detectar que uma gravação realmente não mudou o conteúdo da memória.
David Marshall
> saber se uma página de memória está atualmente na RAM, trocada ou não está carregada. O Windows não inclui uma função para determinar essas informações. Uma boa razão é que qualquer resposta que você recebe pode ficar obsoleta quando você quiser agir de acordo.
Jamie Hanrahan