Utilitaire ou fonction permettant d'obtenir l'état d'une page (en RAM, permutée, non chargée)

0

J'ai besoin d'un utilitaire (ou si celui-ci n'existe pas, d'une fonction Windows) pour interroger l'état des pages d'une application en cours d'exécution. Des utilitaires comme VMMap donnent déjà pas mal d’informations, mais il me manque le fait suivant: savoir si une page mémoire est actuellement dans la mémoire RAM, est remplacée ou n’a pas été chargée.

Le problème est que mon exécutable est chargé à partir du réseau et que j’utilisais auparavant le drapeau / SWAPRUN: NET linker, je ne l’utilise plus car cela entraîne des problèmes de performances horribles dans Windows Explorer depuis Windows Vista (si cela se produit. l'indicateur est défini L'Explorateur Windows charge également l'exécutable complet sur le réseau pour afficher uniquement l'icône).

J'ai quelques astuces pour forcer l'application en mémoire moi-même, mais j'ai l'impression que cela ne fonctionne pas toujours, et cela ne semble pas non plus fonctionner si Windows manque de mémoire (je pense qu'il supprime simplement les pages exécutables à la place). de les échanger vers le fichier d'échange).

Avec un tel utilitaire, je pourrais vérifier ce que Windows fait réellement et essayer d'autres idées pour forcer le code de l'application en mémoire.

Patrick
la source
1
Tu as raison. Windows n'écrit pas de pages non modifiées à partir de fichiers .exe ou .dll dans le fichier d'échange. Il libère simplement la mémoire physique et lit à nouveau à partir de l'emplacement d'origine, si nécessaire. La fonction VirtualLock peut être utilisée pour empêcher la pagination de la mémoire, mais c'est probablement une mauvaise idée si vous avez peu de mémoire. msdn.microsoft.com/en-us/library/aa366895(v=vs.85).aspx
David Marshall
Est-ce que cette astuce pourrait fonctionner: utiliser VirtualProtect pour rendre la page accessible en écriture, modifier 1 octet (faut-il que ce soit différent?), Puis faire en sorte que la page soit lue + exécutée à nouveau.
Patrick
1
Oui, cela obligerait Windows à l'enregistrer dans le fichier d'échange s'il souhaitait réutiliser la mémoire physique. Je ne pense pas que le matériel puisse détecter qu'une écriture n'a pas réellement changé le contenu de la mémoire.
David Marshall
> savoir si une page mémoire est dans la RAM, est remplacée ou n'est pas chargée. Windows n'inclut pas de fonction permettant de déterminer ces informations. Une bonne raison est que toute réponse que vous obtiendrez pourrait être obsolète au moment où vous voudriez agir.
Jamie Hanrahan