begin process at 2010 02 10 17:26:56
  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 :8 975

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

GESTIONNAIRE DE BIBLIOTHEQUE par eishtein
FICHIER ALBUM MUSICAL par imenouuuuuuuuuche
LOUISDU81 HTTP EDITOR par louisdu81
Source avec Zip Source avec une capture Source .NET (Dotnet) CLIENT IRC BASIQUE par king67
Source avec Zip CONVERTISSEUR NOMBRE ARABE => NOMBRE ROMAIN (1 À 4999) par Calli95

 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 Toolbar sans images ?? - API Windows [ par banane_rose ] j'ai fait une toolbar avec 2 cases ... mais vides . j'ai fait mon fichier bitmap de 32x16 ... expliquez moi pour les imagesDorian / 14 ans / sous Dev- 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 Comment faire un bel interface sous Evcc++ [ par Fabricio19 ] Bonjour à tous, je dois developper un gros programme pour un système embarqué de la marque anders. - UMR-5 - processeur INTEL PXA 270 312MHz - OS WIND


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,858 sec (3)

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