Listeur des processus et de ses childs. kill n'importe quel process (privilege se_debug_name)

Soyez le premier à donner votre avis sur cette source.

Vue 12 263 fois - Téléchargée 1 583 fois

Description

Code assez simple mais tout de même commenté. Exemple d'utilisation de plusieurs API tel que GetWindow, GetClassName, GetWindowText, GetWindowThreadProcessId, OpenProcess, OpenProcessToken, TerminateProcess, EnumProcess, GetCurrentProcessId, LookupPrivilegeValue, AdjustTokenPrivileges, ShowWindow, WindowFromPoint, SetForegroundWindow, SetActiveWindow, CreateToolhelp32Snapshot, Module32First etc...
Vous permez de trouver quelques info. sur les process ainsi de connaître leurs childs (boutton, label, edit etc.).
Il y a aussi un petit code pour rechercher un process avec plusieurs critères de recherche possible (avec wildcards ? *).
Utilisation d'un StringGrid pour l'affichage des résultats de la recherche.
La recherche est faîte dans un THREAD pour ne pas ralentir le programme.
Le process se met en SE_DEBUG_NAME pour pouvoir fermer(/accéder) n'importe quel processus.

Bref, aucun composant externe; Seulement API + Compo. standard
Code fait "à la va vite", donc il doit surment être façilement optimisable

--> Exemple de comment avoir un scrollbar horizonte dans une listbox

Source / Exemple :


[...]
function SetPrivDebug: boolean;   //fonction pour obtenir le droit de debug
var
  dwPid: DWORD;
  hProcess, hToken : THandle;
  tpDebug, tpPDebug: TOKEN_PRIVILEGES;
  rLenght: Cardinal;
begin
  Result := False;

  dwPid := GetCurrentProcessId; //on obtien le PID de notre process
  hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, dwPid); //on obtien un handle pour accéder au process qui a pour pid dwPid
  if hProcess = 0 then     //si OpenProcess a echoué
  begin
    ShowMessage('Error nº' + IntToStr(GetLastError) + ^M + SysErrorMessage(GetLastError));
    Exit;
  end;
  if OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, hToken) = NULL then  //on obtien un handle sur les token de hProcess et on le met dans hToken
  begin
    ShowMessage('Can''t access token''s right' + ^M + 'Error nº' +
                IntToStr(GetLastError) + ^M + SysErrorMessage(GetLastError));
    Exit;        //^M saute une ligne
  end;

  if LookupPrivilegeValue(nil, SE_DEBUG_NAME, tpDebug.Privileges[0].Luid) = NULL then
  begin //on trouve le LUID (locally unique identifier) du privilège et on le met dans tpDebug.Privileges[0].Luid
    ShowMessage('Can''t retrieve the locally unique identifier (LUID)');
    Exit;
  end;
    tpDebug.PrivilegeCount := 1;     //nombre de privilège que l'on va activer
    tpDebug.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; //action a faire, ici on veut activer le privilège donc SE_PRIVIEGE_ENABLED
    rLenght := 0;
    tpPDebug := tpDebug;
    AdjustTokenPrivileges(hToken, False, tpDebug, SizeOf(tpDebug), tpPDebug, rLenght);
    //on active le privilege de debug (SE_DEBUG_NAME) , adjusttokenprivileges rempli tpPDebug avec l'ancien privilège
    Result := GetLastError = ERROR_SUCCESS; //la condition est vérifiée si tout s'est bien passé

    CloseHandle(hToken); //on ferme le handle hToken
end;
[...]

Conclusion :


//ZIP

wExplorer

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
7
Date d'inscription
samedi 18 novembre 2006
Statut
Membre
Dernière intervention
22 novembre 2006

Salut ,je suis débutant en matiere de programmation et je travail sur un projet,mais il y a un probléme qui m'intrigue
est ce que vous pouvez m'aider ladsus
le probléme se résume comme suit :
j'ai le nom et le nom de classe d'un window parent d'une application extérne alors j'ai obtenu son handle par la fonction
Findwindow
mais le probléme est comment obtenir le handle de child window tout en sachant le nom et le nom de classe de ce window (child) et que la fonction FindwindowEx n'est pas supporté par windows NT et XP sur lequel je travail
alors comment on fait pour obtenir ce handle ?
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
C'est quand même plus joli en C, tous ces appels d'API :)
Messages postés
586
Date d'inscription
jeudi 18 septembre 2003
Statut
Membre
Dernière intervention
13 février 2008
1
pas mal du tout,Merci a toi ;)
Messages postés
106
Date d'inscription
mardi 18 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2007

haha 8)
Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
2
code très bien commenté !
néanmoins j'aurais apprécié de voir apparaitre :
" obtenir un manipulateur sur le jeton processus hProcess "

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.