begin process at 2012 02 08 21:25:30
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Application

 > GESTION DE LE MÉMOIRE UTILISÉE PAR UN PROCESSUS

GESTION DE LE MÉMOIRE UTILISÉE PAR UN PROCESSUS


 Information sur la source

Note :
Aucune note
Catégorie :Application Classé sous :processus, mémoire, api, windows, gestion Niveau :Initié Date de création :11/04/2007 Date de mise à jour :12/04/2007 11:30:29 Vu :11 546

Auteur : lilxam

Ecrire un message privé
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

Ce code permet d'observer l'utilisation de la mémoire par un processus et de fixer une limite sur celle-ci. Si la limité est dépassé, le processus est terminé.

Have fun.

lilxam.

Source

  • #include <iostream>
  • #include <cstdio>
  • #include <windows.h>
  • #include <tlhelp32.h>
  • #include <psapi.h>
  • using namespace std;
  • int fileExist(const char* fileName)
  • {
  • return (0 <= (INT_PTR)GetFileAttributesA(fileName));
  • }
  • void SetDebugPrivilege(){
  • TOKEN_PRIVILEGES privilege;
  • LUID Luid;
  • HANDLE handle1;
  • HANDLE handle2;
  • handle1 = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId());
  • OpenProcessToken(handle1, TOKEN_ALL_ACCESS, &handle2);
  • LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Luid);
  • privilege.PrivilegeCount = 1;
  • privilege.Privileges[0].Luid = Luid;
  • privilege.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  • AdjustTokenPrivileges(handle2, FALSE, &privilege, sizeof(privilege), NULL, NULL);
  • CloseHandle(handle2);
  • CloseHandle(handle1);
  • }
  • int main(int argc, char *argv[])
  • {
  • char ProcessName[20];
  • cout<<"\nProcess : "; //On récupère le nom du processus
  • cin>>ProcessName;
  • int limit = 0;
  • cout << "\nBytes limit :"; //On récupère la limite en bytes de l'utilisation de la mémoire
  • cin >> limit;
  • HANDLE hSnapShot; //Handle de la liste de processus
  • PROCESSENTRY32 uProcess;
  • SetDebugPrivilege();
  • hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //On créé une liste des processus
  • uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);
  • int p;
  • short PID = 0;
  • p = Process32First(hSnapShot, &uProcess); //On se positionne sur le premier processus
  • do
  • {
  • if(strstr(uProcess.szExeFile, ProcessName)) //On recherche le nom de notre processus dans la liste
  • {
  • FILE * fichier; //On place les informations dans un fichier log
  • char FileName[30] = "";
  • strcat(FileName, uProcess.szExeFile);
  • strcat(FileName, ".log");
  • if(fileExist(FileName))//Si il existe déjà un fichier log pour le meme processus on le supprime
  • {
  • DeleteFile(FileName);
  • }
  • fichier = fopen(FileName, "a+");
  • fprintf(fichier, "**************Looking at %s *************\n", uProcess.szExeFile);
  • cout<<"\n\nProcess found : "<<uProcess.szExeFile<<"\n";
  • PID = (short) uProcess.th32ProcessID; //On récupere le PID de notre processus
  • HANDLE hTemp; //Handle du processus
  • PROCESS_MEMORY_COUNTERS pmc;
  • hTemp = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_ALL_ACCESS, 0, (DWORD) PID);//On accede au processus en récupérant les informations le concernant et en gardant tout accès dessus
  • system("pause");
  • system("cls");
  • while(GetProcessMemoryInfo(hTemp, &pmc, sizeof(pmc)))//On récupere des informations sur l'utilisation de la mémoire pas notre processus
  • {
  • long work = pmc.WorkingSetSize / 1024;
  • fprintf(fichier , "\nProcessus using %ld bytes ", work);
  • cout<<"Process "<<uProcess.szExeFile<<" is using "<<work<<" bytes";
  • Sleep(1000);
  • if(work > limit) //Si le processus utilise plus de mémoire que la limite on le termine
  • {
  • TerminateProcess(hTemp, 0);
  • cout<<"\nProcess Killed\n";
  • goto s;
  • }
  • system("cls");
  • }
  • }
  • p = Process32Next(hSnapShot, &uProcess);//On se positionne sur le processus suivant
  • }while(p);
  • s:
  • system("pause");
  • return 0;
  • }
#include <iostream>
#include <cstdio>
#include <windows.h>
#include <tlhelp32.h>
#include <psapi.h>

using namespace std;


int fileExist(const char* fileName)
{
    return (0 <= (INT_PTR)GetFileAttributesA(fileName));
}

void SetDebugPrivilege(){
TOKEN_PRIVILEGES privilege;
LUID Luid;
HANDLE handle1;
HANDLE handle2;
handle1 = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId());
OpenProcessToken(handle1, TOKEN_ALL_ACCESS, &handle2);
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Luid);
privilege.PrivilegeCount = 1;
privilege.Privileges[0].Luid = Luid;
privilege.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(handle2, FALSE, &privilege, sizeof(privilege), NULL, NULL);
CloseHandle(handle2);
CloseHandle(handle1);
}
 
int main(int argc, char *argv[])
{
    
    char ProcessName[20];
    cout<<"\nProcess : "; //On récupère le nom du processus
    cin>>ProcessName;
    
    int limit = 0;
    cout << "\nBytes limit :"; //On récupère la limite en bytes de l'utilisation de la mémoire
    cin >> limit; 
    
    HANDLE hSnapShot; //Handle de la liste de processus
    PROCESSENTRY32 uProcess;
    
    SetDebugPrivilege();
                                      
    hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //On créé une liste des processus
    uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);
    
    int p;
    short PID = 0;
    
    p = Process32First(hSnapShot, &uProcess); //On se positionne sur le premier processus
    
    do
    {
        if(strstr(uProcess.szExeFile, ProcessName)) //On recherche le nom de notre processus dans la liste
        {
                                      FILE * fichier; //On place les informations dans un fichier log
                                      char FileName[30] = "";
                                      strcat(FileName, uProcess.szExeFile);
                                      strcat(FileName, ".log");
                                      if(fileExist(FileName))//Si il existe déjà un fichier log pour le meme processus on le supprime
                                      {
                                                            DeleteFile(FileName);
                                      }
                                      fichier = fopen(FileName, "a+");
                                      fprintf(fichier, "**************Looking at %s *************\n", uProcess.szExeFile);
                                      
                                      cout<<"\n\nProcess found : "<<uProcess.szExeFile<<"\n";
                                      
                                      PID = (short) uProcess.th32ProcessID; //On récupere le PID de notre processus
                                      
                                      HANDLE hTemp; //Handle du processus
                                      PROCESS_MEMORY_COUNTERS pmc;
                                      

                                      hTemp = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_ALL_ACCESS, 0, (DWORD) PID);//On accede au processus en récupérant les informations le concernant et en gardant tout accès dessus
                                      
                                      
                                      system("pause");
                                      system("cls");
                                      while(GetProcessMemoryInfo(hTemp, &pmc, sizeof(pmc)))//On récupere des informations sur l'utilisation de la mémoire pas notre processus
                                      {
                                             long work = pmc.WorkingSetSize / 1024;
                                             fprintf(fichier , "\nProcessus using %ld bytes ", work);
                                             cout<<"Process "<<uProcess.szExeFile<<" is using "<<work<<" bytes";
                                             Sleep(1000);                                            
                                             
                                             if(work > limit) //Si le processus utilise plus de mémoire que la limite on le termine
                                             {
         
                                                     TerminateProcess(hTemp, 0);
                                                     cout<<"\nProcess Killed\n";
                                                     goto s;
                                             }
                                             system("cls");
                                             
                                      }
        }
        
        p = Process32Next(hSnapShot, &uProcess);//On se positionne sur le processus suivant
    }while(p);

    
    s:
      system("pause");
      return 0; 
}



 Historique

12 avril 2007 11:30:29 :
Légère modification.

 Sources du même auteur

MODIFIER UN PROCESSUS EN MÉMOIRE
MELODIE AVEC LES BEEPS DE L'UNITÉ CENTRALE

 Sources de la même categorie

Source avec Zip Source avec une capture CONTACTS MANAGER par eapaceinfo
Source avec Zip Source avec une capture CONTACTES BOOK par mature
Source avec Zip Source avec une capture [C++/QT] SLIDEALWAYS, RÉALISEZ DES SLIDES POUR VOTRE SITE AV... par doderic
Source avec Zip Source avec une capture MAILLAGE 3D (VTK + QT) par ammoun007
Source avec Zip Source avec une capture CONVHTML : UN UTILITAIRE DE CONVERSION POUR FICHIERS HTML par pgl10

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture LISTE PROCESSUS V2 (WIN64) par BruNews
PROCESS DUMPER par lilxam7
MODIFIER UN PROCESSUS EN MÉMOIRE par lilxam
Source avec Zip SURVEILLER LA MÉMOIRE D'UN PROCESSUS par Arnotic
Source avec Zip Source avec une capture [C/WIN32] CTRLALTDEL : UN GESTIONNAIRE DE PROCESSUS. par deck_bsd

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Gestion du clavier avec l'API Windows [ par tintin72 ] SalutJe programme un petit jeu en OpenGL et pour l'instant j'utilise DirectInput pour la gestion entrée du clavier, mais j'aimerais plutot gérer l'ent Gestion Memoire Windows [ par victorcoasne ] Bonjour, Je fais un programme qui mange &#233;norm&#233;ment en ressources (+ de 5Mo au d&#233;part) et qui augmente un peu. Je r&#233;duis la fen&# Gestion et affichage de bitmaps (API Windows). [ par _michel ] Bonjour à tous,J'ai un problème avec les bitamps:je voudrai conserver en mémoire pendant l'execution de mon programme la "capture d'écran", pour l'aff Developpement des GUI sous Win32 [ par medsetti ] Bonsoir, Tout d'abord je me présente, je suis un ingénieur en génie industriel qui désire developper des applications windows pour la gestion de la pr Programmation multimedia (wave) avec API windows [ par csauvane ] Bonjour, Pour suivre les contraintes d'un projet je dois développer une petite application permettant de lire/enregistrer, afficher et faire quelques [API Windows] Combo box et CBN_SELCHANGE [ par lucelabrute ] Bonjour, Je n'arrive pas ç utiliser correctement le message CBN_SELCHANGE. Alors voila ce que je fais: dans le WM_COMMAND: case CBN_SELCHANGE: /* tra API windows [ par rivaldinho ] Bonjour, j'écris un programme en C++ qui permet d'aller chercher le texte dans une application mot par mot à l'aide de la fonction WM_GETTEXT mais je API windows [ par rivaldinho ] Salut, Je suis entrain d'écrire une phrase sur notepad et je vx faire un programme sur C++ qui lit en meme temps ce que je suis entrain d'écrire sur l gestion d'un processus des archives [ par omario09 ] bonjour a tous, bain je suis un débutant en programmation .net et je suis entrain d'effectuer un stage au saint d'une entreprise et mon theme c'est de snmpwalk API windows [ par Max77240 ] Bonjour à tous, Je travail avec VisualC++ 2008 et le l'API SNMP de Windows. J'aurais voulu savoir s'il est possible de faire l'équivalent d'un "snmpw


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,338 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales